Почему мой PHP-код возвращает пустую страницу при запуске? [Дубликат]

0

На моей веб-странице я прошу пользователя заполнить форму с указанием их возраста, расы, пола и состояния. После отправки данные отправляются на ту же страницу, и страница будет обрабатывать ее следующим кодом, чтобы отправить его в базу данных (все данные входа в базу данных поддельны в этом примере):

<?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". Внутри нет кода. Имейте в виду, что перед отправкой формы страница отображается правильно.

Теги:
database

1 ответ

1

Вам не хватает запятых в вашем заявлении вставки; вам также не нужно избегать одиночных кавычек, когда вы используете двойные кавычки.

Поскольку ваш код прямо сейчас, вы пытаетесь вставить одну конкатенированную строку.

$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();

Я также проверил бы ваш объект соединения, чтобы убедиться, что он успешно подключился к базе данных с фактической информацией для входа. Наряду с этим, не забудьте очистить/подтвердить свой ввод до того, как он войдет в базу данных. Это хорошо его охватывает.

  • 0
    В этом случае проверка будет заботиться о санитарной обработке. Возможно, вы могли бы опубликовать пример.
  • 1
    Это решает некоторые из самых поверхностных проблем в этом вопросе, не затрагивая другие чрезвычайно серьезные проблемы. Хотя вы вкратце упоминаете о вещах, демонстрация гораздо лучше, чем передача кому-то «рабочего» кода, что является огромной ответственностью.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню