У меня есть следующий код / файл PHP на моем сайте, но по какой-то нелогичной причине он не будет вставлять записи, введенные пользователем в таблицу базы данных mySQL, как это требуется. Может ли кто-нибудь сказать мне, почему это?
Насколько я могу сказать, код абсолютно прав, я не знаю, почему это происходит …
Пожалуйста, помогите … Код ниже …
<html> <head> </head> <body> <form action="register_development_file_1.php" method="post"> Email: <input type="text" name="email"><br /> Date: <input type="text" name="date"><br /> Time: <input type="text" name="time"><br /> <input type="submit" name="submit"> </form> <?php if (isset($_POST['submit'])) { $con = mysql_connect("localhost","username","password"); if (!$con) { die("Could not connect to the database: " . mysql_error()); } mysql_select_db("wwwbrecs_BREC",$con); $sql = "INSERT INTO 'signups' ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')"; mysql_query($sql,$con); mysql_close($con); } ?> </body> </html>
В вашем запросе есть синтаксическая ошибка, вы не указали название таблицы и столбец с кавычками, по крайней мере, вы можете использовать обратную линию `
INSERT INTO 'signups' ('signup_email_address', 'signup_date','signup_time')
Должно быть
INSERT INTO signups (signup_email_address, signup_date, signup _time) VALUES
Или
INSERT INTO `signups` (`signup_email_address`, `signup_date`, `signup _time`) VALUES
Только значения (фактически не целые числа для целых столбцов) должны быть окружены кавычками '
.
Затем я хотел бы запомнить вас, что функции mysql_
устарели, поэтому я бы посоветовал вам переключиться на mysqli
или PDO
и вы действительно рискуете sql injection
, посмотрите здесь. Как я могу предотвратить SQL-инъекцию в PHP? , Вы должны использовать подготовленный статус, чтобы избежать любого риска
таблица signups не должна быть окружена одинарными кавычками, но апострофы `
Следовательно
$sql = "INSERT INTO 'signups' ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";
Должно быть
$sql = "INSERT INTO `signups` ('signup_email_address', 'signup_date', 'signup_time') VALUES ('$_POST[email]','$_POST[date]','$_POST[time]')";
<?php $sql = " INSERT INTO signups (signup_email_address, signup_date, signup_time) VALUES ('" . mysql_real_escape_string($_POST['email']) . "','" . mysql_real_escape_string($_POST['date']) . "', '" . mysql_real_escape_string($_POST['time']) . "')";
это должно сделать трюк, а также проверить свою безопасность
Здесь вы создали лучшую версию скрипта, потому что ваша была на 100% открытой для SQL-инъекций и даже не обычным способом кодирования, это безопаснее, но если вам нужно безопасно, я предлагаю вам узнать о PDO отсюда
<?php if(isset($_POST['submit'])){ mysql_connect("localhost","username","password") or die(mysql_error()); mysql_select_db("wwwbrecs_BREC", $con) or die(mysql_query()); $email = mysql_real_escape_string($_POST['email']); $date = mysql_real_escape_string($_POST['date']) $time = mysql_real_escape_string($_POST['time']) $sql = "INSERT INTO signups ('signup_email_address', 'signup_date','signup_time') VALUES ('".$email."','".$date."','".$time."')"; mysql_query($sql, $con) or die(mysql_error()); mysql_close($con); }