发布变量返回无效

时间:2010-10-19 04:47:39

标签: php mysql validation post

我正在使用一个简单的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 个答案:

答案 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;

你输入的形式是什么?