Публикация переменной возвращает неверный - PullRequest
0 голосов
/ 19 октября 2010

Я использую простой PHP-скрипт для части активации одного из моих приложений. Приложения публикуют одну переменную на странице (http://validate.zbrowntechnology.info/WebLock.php?method=validate). Переменная - это серийный номер, обозначенный как Serial . Каждый раз, когда я отправляю сообщение на эту страницу, он возвращает 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 будет ресурсом, логическое значение

Ответы [ 6 ]

3 голосов
/ 19 октября 2010

Сразу после запроса используйте mysql_error (), чтобы увидеть, что произошло.И Key - плохой выбор для имени столбца, потому что это зарезервированное слово в 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);
...
1 голос
/ 19 октября 2010

Вам не хватает закрывающей скобки в этой строке:

if(mysql_num_rows($result) > 0 {

Это отсутствует в вашем коде или только в вашем вопросе?

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

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

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

0 голосов
/ 19 октября 2010

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

echo $serial;

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

0 голосов
/ 19 октября 2010

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

if(mysql_num_rows($result) > 0 {
                              ^     

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

0 голосов
/ 19 октября 2010

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

else echo 'Unknown method';

Может случиться так, что $ _POST и $ _GET не заполняются, это настройка в php.ini, если япомните правильно (ищите «superglobals» в php документах).

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

$query = "SELECT Key, Status FROM Validation WHERE Key='".addslashes($serial)."'";
0 голосов
/ 19 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...