#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);
Пара замечаний:
- Больше не используйте функции mysql_ *(), они устарели много лет назад и были удалены с php7. Вместо этого используйте mysqli или pdo.
- Используйте подготовленные инструкции с привязкой параметров для предотвращения атак с использованием sql-инъекций.
- Не смешивайте различные API mysql.