PHP MYSQL Предупреждение: mysql_query() ожидает, что параметр 1 будет строкой, ресурс указан в
Возможный дубликат:
mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, логическое значение указывается в select
<?php
include 'connect.php';
include 'header.php';
$page = "signup.php";
// receive the invite code:
$code = $_POST['code'];
$sql = "SELECT codes FROM invites WHERE codes='$code'";
// check the table for matching codes
$result = mysql_query($sql);
// check if the request returned 1 or 0 rows from the database
if (mysql_query($result)) {
// end any previously defined sessions.
session_start();session_unset();session_destroy();
// start a new session
session_start();
// define the session variable.
// this allows us to check if it's set later and is required for
// the script to run properly.
$code = $_POST["code"];
mysql_query("DELETE FROM invites WHERE codes='$code'");
header('Location: '.$page);
exit;
} else {
echo "Invite invalid. Please try again later.";
echo $code;
}
include 'footer.php';
?>
Я пытаюсь внедрить систему приглашений на веб-страницу, над которой я работаю. Однако, пытаясь оценить, есть ли строка, содержащая код приглашения, я либо получаю ничего, либо это предупреждение. Предупреждение в этом случае, но если я изменю состояние if на ==1, оно разрешает всем, независимо от кода, а ==0 выдает разные ошибки.
3 ответа
Здесь есть несколько вещей не так.
1) Уязвимости SQL-инъекций, никогда не передавайте суперглобальные $_POST или $_GET или любую другую предоставленную пользователем переменную прямо внутри вашего запроса! Используйте как минимум mysql_real_escape_string() для переменной, прежде чем впустить ее в запрос, или лучше изучите параметризованные запросы, это лучший способ избежать уязвимостей SQL
2)
$result = mysql_query($sql);
// check if the request returned 1 or 0 rows from the database
if (mysql_query($result)) ....
Это не проверяет, возвращает ли запрос 1 или 0 строк, вы должны использовать здесь mysql_num_rows()
if(mysql_num_rows() == 1) //or whatever you need to check
3)
session_start();session_unset();session_destroy();
// start a new session
session_start();
session_start () должен быть вызван прежде чем что-либо на вашей странице. Не знаю, почему это избыточность вызова, сброса, уничтожения, вызова этого здесь. Если вы хотите другой идентификатор, просто используйтеsession_regenerate_id();
И, как уже сказали другие, используйте некоторые сообщения об ошибках в вашем запросе, что-то вроде
$result = mysql_query($sql) or die(mysql_error())
на самом деле увидеть, что не удалось, где и почему.
Проблема в вашем запросе. Прежде всего, проверьте свое заявление и используйте это:
$result = mysql_query($sql) or die(mysql_error());
вместо этого
$result = mysql_query($sql);
Итак, вы можете увидеть, есть ли какая-либо ошибка в вашем запросе SQL.