Я использую простой 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
Сразу после запроса используйте 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);
...
date
в нескольких таблицах.
В этой строке отсутствует закрывающая скобка:
if(mysql_num_rows($result) > 0 {
Является ли это недостающим в вашем коде или просто ваш вопрос?
Вы также можете добавить
if (!$result) {
print mysql_error();
}
после вашего запроса
Попробуй это $query = "SELECT Key, Status FROM Validation WHERE Key='".$serial."'";
Попробуйте повторить $serial:
echo $serial;
И это то, что вы набрали в форме?
Это может быть опечатка, но здесь отсутствует закрывающая скобка:
if(mysql_num_rows($result) > 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)."'";