На моей веб-странице я прошу пользователя заполнить форму с указанием их возраста, расы, пола и состояния. После отправки данные отправляются на ту же страницу, и страница будет обрабатывать ее следующим кодом, чтобы отправить его в базу данных (все данные входа в базу данных поддельны в этом примере):
<?php
if($_COOKIE['infoGiven']==true){
$con=mysql_connect('localhost','asasdfasd','asdf','asdfasdf');
if($_COOKIE['like']==true){
$sql="INSERT INTO LIKE(state, age, gender, race)
VALUES(\'".$_POST["state"]."\'".$_POST["age"]."\'".$_POST["gender"]."\'".$_POST["race"].")";
$con->query($sql);
}
if($_COOKIE['like']!=true){
$sql="INSERT INTO DISLIKE(state, age, gender, race)
VALUES(\'".$_POST["state"]."\'".$_POST["age"]."\'".$_POST["gender"]."\'".$_POST["race"].")";
$con->query($sql);
}
}
?>
Это должно просто отправить данные пользователя в базу данных, но вместо этого я получаю пустую страницу с ошибкой "500". Внутри нет кода. Имейте в виду, что перед отправкой формы страница отображается правильно.
Вам не хватает запятых в вашем заявлении вставки; вам также не нужно избегать одиночных кавычек, когда вы используете двойные кавычки.
Поскольку ваш код прямо сейчас, вы пытаетесь вставить одну конкатенированную строку.
$sql="INSERT INTO LIKE(state, age, gender, race)
VALUES(\'".$_POST["state"]."\'".$_POST["age"]."\'".$_POST["gender"]."\'".$_POST["race"].")";
Должно быть:
$sql="INSERT INTO 'LIKE'(state, age, gender, race)
VALUES('".$_POST["state"]."', '".$_POST["age"]."', '".$_POST["gender"]."', '".$_POST["race"]."')";
Но чтобы проиллюстрировать проблемы пунктуации с параметрами: не используйте этот код сам, потому что альтернативы более безопасны и менее устарели.
Лучшая версия с использованием подготовленных команд mysqli:
$db = new mysqli("DBHOST","DBUSERNAME","DBPASS","DBNAME");
$stmt = $db->prepare("INSERT INTO 'LIKE'(state, age, gender, race) VALUES (?,?,?,?)");
$stmt->bind_param('i', $VALUE)
^ свяжите параметры, подобные этому. Первым параметром является тип второго параметра (целое в этом случае, 's' для строки и т.д.). $VALUE
- переменная для привязки. Количество связанных параметров должно соответствовать номерам заполнителей/вопросительных знаков; это подготовленное выражение ожидает четыре.
Чтобы связать несколько параметров в одной строке, вы можете использовать формат bind_param('sss', $string1, $string2, $string3)
, чтобы выбрать пример. Затем:
$stmt->execute();
$stmt->close();
Я также проверил бы ваш объект соединения, чтобы убедиться, что он успешно подключился к базе данных с фактической информацией для входа. Наряду с этим, не забудьте очистить/подтвердить свой ввод до того, как он войдет в базу данных. Это хорошо его охватывает.