Публикация переменной возвращает недействительный

0

Я использую простой PHP script для части активации одного из моих приложений. Приложения помещают одну страницу на страницу (http://validate.zbrowntechnology.info/WebLock.php?method=validate). Переменная - это серийный номер, размещенный как "Серийный номер". Каждый раз, когда я отправляю на эту страницу, он возвращает Invalid. Вот код:

<?php

$serial = $_POST['Serial'];
$method = $_GET['method'];

$con = mysql_connect("HOSTHERE", "USERHERE", "PASSHERE");
if(!$con) {
  die('Unable to connect to MySQL:  ' . mysql_error());
}


if($method == "validate") {

  mysql_select_db("zach_WebLock", $con);

  $query = "SELECT Key, Status FROM Validation WHERE Key='".mysql_real_escape_string($serial)."'";
  $result = mysql_query($query);
  if(mysql_num_rows($result) > 0) {
    echo "Valid";
  } else {
    echo "Invalid";
  }
} else {
  echo "Unkown Method";
}
?>

Вот ошибка с PHP,

PHP Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, boolean given

  • 0
    Попробуйте добавить оператор else .. if ($ method == 'validate') {// код здесь} else {echo 'No method'; }
  • 2
    Прежде чем спрашивать, что не так со скриптом, попробуйте выполнить запрос непосредственно в MySQL. «Ключ SELECT, состояние ОТ проверки WHERE ключ =« 123 »» или как вы думаете, значение серийного номера.
Показать ещё 5 комментариев
Теги:
validation
post

6 ответов

3
Лучший ответ

Сразу после запроса используйте mysql_error(), чтобы узнать, что произошло. И Ключ - плохой выбор для имени столбца, потому что это зарезервированное слово в SQL. Вы можете заключить его в ``, чтобы сообщить MySQL ему идентификатор. Сделайте еще несколько отладок:

...
if (!mysql_select_db("zach_WebLock", $con)) die('mysql_select_db failed');

$query = "SELECT `Key`, Status FROM Validation WHERE `Key`='".mysql_real_escape_string($serial)."'";
print "query=$query<br>\n";
$result = mysql_query($query, $con);
print "error=" . mysql_error($con);
...
  • 0
    +1 для вас! Вот в чем проблема! Спасибо!
  • 0
    Имя ключевого столбца? Я ненавижу, когда это происходит. Недавно я взял на себя базу данных, в которой есть столбец с именем date в нескольких таблицах.
Показать ещё 1 комментарий
1

В этой строке отсутствует закрывающая скобка:

if(mysql_num_rows($result) > 0 {

Является ли это недостающим в вашем коде или просто ваш вопрос?

Вы также можете добавить

if (!$result) {
    print mysql_error();
}

после вашего запроса

  • 0
    Извините, исправил это.
  • 0
    Да, хорошо заметили!
Показать ещё 6 комментариев
0

Попробуй это
$query = "SELECT Key, Status FROM Validation WHERE Key='".$serial."'";

  • 0
    Это не имеет никакого значения. Если вы используете двойные кавычки, переменные в строках заменяются их значениями.
  • 0
    Спасибо, теперь он что-то возвращает. Но, независимо от того, какой ключ я POST, он возвращает недействительным. Временной ключ 2772 .
0

Попробуйте повторить $serial:

echo $serial;

И это то, что вы набрали в форме?

  • 0
    Да, он возвращает правильный ключ.
  • 0
    Хорошо, но вы уверены, что выбрали правильную базу данных с таблицей проверки? Я знаю, что это глупый вопрос, но такие вещи иногда случаются.
Показать ещё 1 комментарий
0

Это может быть опечатка, но здесь отсутствует закрывающая скобка:

if(mysql_num_rows($result) > 0 {
                              ^     

И вы можете отключить отчет об ошибках, и в этом случае вы получите пустую страницу.

0

Что произойдет, если на последней строке вы добавите это?

else echo 'Unknown method';

Что может случиться, так это то, что $_POST и $_GET не заполняются, это параметр в php.ini, если я правильно помню (поиск "суперглобалов" в php docs).

изменить. Кроме того, у вас очень плохая угроза безопасности, google "sql injection". В основном проблема заключается в том, что вы можете получить любой SQL непосредственно в вашей базе данных, и если у пользователя php достаточно полномочий, это может означать, что любой может удалить, например, все данные из вашей таблицы Validation. Вы должны хотя бы сделать что-то вроде этого:

$query = "SELECT Key, Status FROM Validation WHERE Key='".addslashes($serial)."'";
  • 0
    Он по-прежнему возвращает Invalid .
  • 1
    Используйте mysql_real_escape_string () вместо addlashes ()
Показать ещё 1 комментарий

Ещё вопросы

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