Внешний ключ (новичок)

#php #mysql

#php #mysql

Вопрос:

Я хочу вставить свой внешний ключ customer_id в таблицу отзывов. Как я должен это сделать?

customer таблица:

 customer_id 
coach_id
customer_name
  

feedback таблица:

 feedback_id
feedback1
feedback2
customer_id 
  

Я хочу сделать это так, чтобы после входа пользователя в систему пользователь вставлял информацию обратной связи, она автоматически регистрировала идентификатор клиента.

Это мой код после того, как я войду в систему и хочу зарегистрировать отзыв:

 <?php
session_name ('YourVisitID');
session_start();
$page_title = 'Feedback';
include('./header4.html');
//remember to delete.
echo "{$_SESSION['customer_name']}";
?>

<section id="main" class="wrapper">
<div class="container">
<form action = "feedback.php" method="post">
<div class="row uniform 50%">
        <div class="6u 12u$(xsmall)">
        <input type="text" name="weight" placeholder="Weight" 
        required autofocus/>
        </div>
        <div class="6u$ 12u$(xsmall)">
        <input type="text" name="height" placeholder="Height" 
        required autofocus/>
        </div>
        <div class="6u 12u$(xsmall)">
        <input type="text" name="water"  placeholder="Water Level%" 
        required autofocus/>
        </div>
        <div class="6u$ 12u$(xsmall)">
        <input type="text" name="body_fat" placeholder="Body Fat%" 
        required autofocus/>
        </div>
        <div class="6u 12u$(xsmall)">
        <input type="text" name="calorie" placeholder="Calorie" 
        required autofocus/>
        </div>
        <div class="6u$ 12u$(xsmall)">
        <input type="text" name="visceral" placeholder="Visceral Fat Level%" 
        required autofocus/>
        </div>
        <p><input type="submit" name="submit" value="Register" /></p>
        <input type="hidden" name="submitted" value="TRUE" />

</div>
</form>
</div>
</section>

<?php

if(isset($_POST['submitted'])) {

require_once ('mysql_connect3.php');

function escape_data ($data){
    global $dbc;
    if (ini_get('magic_quotes_gpc')){
    $data = stripslashes($data);
    }
    return mysql_real_escape_string(trim($data), $dbc);
    }

    $error = array();
        $weight = escape_data($_POST['weight']);
        $height = escape_data($_POST['height']);
        $water = escape_data($_POST['water']);
        $calorie = escape_data($_POST['calorie']);
        $visceral = escape_data($_POST['visceral']);
        $fat = escape_data($_POST['body_fat']);

mysqli_close($con);
header("location: add_user.php?remarks=success");   
    if (empty ($errors)) {

    $query ="SELECT * FROM feedback WHERE weight ='$weight'";
    $result = mysql_query($query);
    if (mysql_num_rows($result) == 0) {

        $query = "INSERT INTO feedback (weight, height, body_fat, water, calorie, visceral, feedback_date) VALUES 
        ('$weight', '$height', '$water', '$calorie', '$visceral','$fat', NOW() )";
        $result = @mysql_query ($query);
        if ($result) {

        echo '<script>
            alert("Your feedback has been save");
            </script>';

        include ('./footer.html');
        exit();
        }else{
            echo '<script>
            alert("<h1 id="mainhead">System Error</h1>
            <p class="error">You could not give feedback due to a system error.
            We apologize for any inconvenience.</p>");
            </script>';
            echo '<p>'. mysql_error() . '<br /><br />Query: ' . $query . '</p>';
            include ('./footer.html');
            exit();
            }
            }
                }else{
                    echo '<script>
                            alert("<h1 id="mainhead">Error!</h1>
                            <p class="error">Please try again.</p>");
                            </script>';
                        }

                        mysql_close();
                        }

?>

<?php
include ('./footer.html');
?>
  

Комментарии:

1. В принципе, вам пришлось бы запускать несколько запросов, один после того, как ваша таблица клиентов была вставлена, затем вы выбираете этот идентификатор клиента и вставляете его в общую обратную связь. Поначалу может показаться, что работы много, но это будет так быстро, что вы не поймете, что вас поразило 🙂

2. Не удается добавить или обновить дочернюю строку: не удается выполнить ограничение внешнего ключа ( herbalife . feedback , ССЫЛКИ На feedback_ibfk_1 ВНЕШНИЙ КЛЮЧ ( customer_id ) ОГРАНИЧЕНИЯ customer customer_id (,,)) Запрос: ВСТАВИТЬ В значения обратной связи (weight, height, body_fat, water, calorie, visceral, feedback_date) (‘1’, ‘1’, ‘1’, ‘1’, ‘1’,’1′, ТЕПЕРЬ () ) Теперь это стало вот так …..=_=

3. И куда вы вставляете значение в поле customer_id?

Ответ №1:

Я думаю, вам следует определить в схеме таблицы sql.

После определения внешнего ключа customer_id в feedback таблице

Вы можете использовать PHP для выбора данных из этой таблицы

Ответ №2:

Когда клиент входит в систему, просто сохраните его customer_id в сеансе, точно так же, как вы сохраняете его customer_name в данный момент. Когда клиент отправляет форму обратной связи, вы просто предоставляете customer_id результат сеанса.

     $query = "INSERT INTO feedback (weight, height, body_fat, water, calorie, visceral, feedback_date, customer_id) VALUES 
    ('$weight', '$height', '$water', '$calorie', '$visceral','$fat', NOW(), ".$_SESSION ['customer_id']. ")";
    $result = @mysql_query ($query);  
  

Пара замечаний:

  1. Больше не используйте функции mysql_ *(), они устарели много лет назад и были удалены с php7. Вместо этого используйте mysqli или pdo.
  2. Используйте подготовленные инструкции с привязкой параметров для предотвращения атак с использованием sql-инъекций.
  3. Не смешивайте различные API mysql.