Я хочу вставить данные из формы в таблицу, но каждый раз, когда я получаю сообщение, ничего не происходит, я проверил и перепроверил все, но я не могу найти причину.
indextest1.php
<!DOCTYPE html> <html> <head> <title></title> <meta charset="UTF-8"> <meta name="author" content=""> <meta name="description" content=""> <meta name="keywords" content=""> </head> <body> <form action="test1.php" method="post"> <input type="text" name="name"><br> <input type="text" name="lastname"><br> <input type="radio" name="radio" value="one" checked> one<br> <input type="radio" name="radio" value="two" > two<br> <select name="drop"> <option value="0" selected>0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> </select> <input type="checkbox" name="check" value="1"><br> <input type="submit" value="Submit"> </form> </body> </html>
test1.php
<?php $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "db-test"; $connect = ("$servername, $username, $password, $dbname") or die ("ERROR DURING CONNECTION"); $name = $_POST["name"]; $lastname = $_POST["lastname"]; $radio = $_POST["radio"]; $drop = $_POST["drop"]; $check = $_POST["check"]; $sql_insert = mysql_query("INSERT INTO test-table (id, name, lastname, radio, drop, check) VALUES ('', '$name', '$lastname', '$radio', '$drop', '$check')"); header("location: indextest1.php"); ?>
Значения таблиц
Спасибо заранее, я надеюсь, что предоставил всю необходимую информацию.
Помимо другого ответа,
Во-первых, эта часть вашего запроса:
INSERT INTO test-table (id, name, lastname, radio, drop, check)
следует читать как
INSERT INTO `test-table` (id, name, lastname, radio, `drop`, `check`)
MySQL интерпретирует вашу таблицу как «таблицу теста минус ». Используйте тики или переименуйте его с помощью test_table
подчеркивания test_table
которая является безопасным разделителем.
Затем вы используете два зарезервированных слова MySQL, «drop» и «check». Также используйте клещи для них.
Справка:
Посмотрите, как MySQL сообщает вам, где начинается синтаксическая ошибка?
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «drop, check»
и это показало бы вам еще один
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «проверкой»)
Чтобы уточнить, вы смешиваете MySQL API с
mysql_query("INSERT ...
которые эти функции mysql_
не смешиваются с вашим mysql_
методом. Используйте то же самое из подключения к запросу
mysqli_query($connect, "INSERT ...
и, конечно, тот факт, что вы открыты для SQL-инъекции. Используйте подготовленное заявление:
Вы также должны проверить наличие пустых полей в массивах POST, таких как !empty()
.
Sidenote: Если апостроф или любой другой персонаж должен быть вставлен, что MySQL будет жаловаться, вы должны избегать их. В любом случае, вы должны.
Плюс, не забудьте добавить exit;
после заголовка. В противном случае, если у вас больше кода ниже, он может продолжить и выполнить.
header("location: indextest1.php"); exit;
Я бы порекомендовал вам прочитать о том, как сначала подключиться к MySQL
с PHP, прежде чем продолжить, как показывает ваш код, в противном случае.
http://php.net/manual/en/function.mysqli-connect.php http://php.net/manual/en/mysqli.query.php
Прекратите использование mysql
, поскольку он устарел. Вы должны правильно указать аргументы в своем скрипте. Ваш $connect
– это полностью недопустимый синтаксис (для подключения к MySQL)
<?php $servername = "localhost"; $username = "root"; $password = "root"; $dbname = "db-test"; $connect = mysqli_connect($servername, $username, $password, $dbname) or die ("ERROR DURING CONNECTION"); $name = $_POST["name"]; $lastname = $_POST["lastname"]; $radio = $_POST["radio"]; $drop = $_POST["drop"]; $check = $_POST["check"]; $sql = "INSERT INTO test-table (name, lastname, radio, drop, check) VALUES ('$name', '$lastname', '$radio', '$drop', '$check')"; //Don't need to insert id since it's an PRI_KEY A_I $result = mysqli_query($connect, $sql) or die (mysqli_error($connect)); header("location: indextest1.php"); ?>
Помимо прочего, вы просите, чтобы у вас была SQL injection attack
которую вы можете легко заблокировать. mysqli_real_escape_string
чтобы добавить тип данных varchar в таблицу sql, мы должны поместить его в одинарную кавычку, поэтому сначала поместите одинарную кавычку, если значение находится в переменной, чем между двойными кавычками и точками (только для php).
Для значения auto increment нам нужно передать только null.
напишите свой запрос следующим образом.
$sql_insert = mysql_query("INSERT INTO test-table (id, name, lastname, radio, drop, check) VALUES (null, '".$name."', '".$lastname."', '".$radio."', ".$drop.", ".$check.")");
Надеюсь, это сработает.