我正在使用一个简单的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为资源,布尔值为
答案 0 :(得分:3)
查询后立即使用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 :(得分:1)
你错过了这一行的右括号:
if(mysql_num_rows($result) > 0 {
您的代码或问题中是否缺少该内容?
您可能还想添加
if (!$result) {
print mysql_error();
}
查询后
答案 2 :(得分:0)
尝试这样
$query = "SELECT Key, Status FROM Validation WHERE Key='".$serial."'";
答案 3 :(得分:0)
如果在最后一行添加此内容会发生什么?
else echo 'Unknown method';
可能发生的是$ _POST和$ _GET没有填充,这是php.ini中的一个设置,如果我没记错的话(在php文档中搜索“superglobals”)。
编辑:此外,你有一个非常糟糕的安全风险,google“sql injection”。基本上问题是你可以直接将任何SQL放入你的数据库,如果php用户有足够的权限,那么可能意味着任何人都可以删除你的Validation表中的所有数据。你应该至少做这样的事情:
$query = "SELECT Key, Status FROM Validation WHERE Key='".addslashes($serial)."'";
答案 4 :(得分:0)
这可能是一个错字,但你在这里错过了一个右括号:
if(mysql_num_rows($result) > 0 {
^
你可能已经关闭了错误报告,在这种情况下你会得到一个空白页面。
答案 5 :(得分:0)
尝试回显$ serial:
echo $serial;
你输入的形式是什么?