#php
#php
Вопрос:
я пытаюсь вставить некоторые данные из формы, и это выдает ошибку каждый раз, когда «ошибка запроса базы данных», моя кодировка такая
<?php
$dbc = mysqli_connect('localhost', 'root', '', 'askquestion')
or die('Error connecting to MySQL server.');
$first_name=$_POST['firstname'];
$last_name=$_POST['lastname'];
$email=$_POST['email'];
$password=$_POST['password'];
$state=$_POST['state'];
$city=$_POST['city'];
$category=$_POST['category'];
$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', $email, $password, $state, $city, $category)";
$result=mysqli_query($dbc, $query) or die('Error querying database.'). mysql_error();;
echo 'you are registered...!';
mysqli_close($dbc);
?>
Ответ №1:
Вы уязвимы для атак с использованием SQL-инъекций. Всегда экранируйте входящие значения POST, используя mysql_real_escape_string()
. Это помогает предотвратить внедрение SQL и гарантирует, что все значения, используемые в вашем операторе запроса, которые содержат специальные символы, экранируются должным образом (например, кавычки).
Кроме того, убедитесь, что все строковые значения правильно заключены в кавычки в вашем операторе VALUES.
Комментарии:
1. на самом деле это не ответ на вопрос, не так ли?
2. Абсолютно, потому что, если бы входящие значения POST были экранированы, специальные символы не нарушили бы инструкцию INSERT.
Ответ №2:
Взгляните на свой запрос, у вас есть
'$last_name', $email, $password, $state, $city, $category)
В то время как вы должны иметь:
$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', '$email', '$password', '$state', '$city', '$category')";
Кроме того, попробуйте использовать
die(mysql_error());
в разработке
Для безопасности SQL вы всегда должны экранировать каждое входное значение:
$first_name=mysql_real_escape_string($_POST['firstname']);
Комментарии:
1. Большое вам спасибо much……..it была глупая ошибка. и я также вставил этот код mysql_real в. Большое спасибо. Теперь он работает.
Ответ №3:
при вставке значений в базу данных вам нужны кавычки вокруг переменных или значений, которые являются строками, вам не нужны кавычки вокруг целых чисел / чисел с плавающей запятой или чисел.
Я бы предположил, что все значения, которые вы получаете из POST super global, представляют собой текстовые строки. поэтому замените это: (проверьте структуру вашей таблицы, если это не работает):
$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', $email, $password, $state, $city, $category)";
с помощью этого:
$query = "INSERT INTO signup (first_name, last_name, email, password, state, city, category) VALUES ('$first_name', '$last_name', '$email', '$password', '$state', '$city', '$category')";
для получения дополнительной информации прочитайте здесь: http://www.w3schools.com/sql/sql_insert.asp