这是我的代码:
$usersql = "Select fab2_type from feesys_admin where adminname ='$_POST[username]' and adminemail = '$_POST[password]'";
$userresult = mysql_query($usersql) or die ("<h3>Error in query: $query. ".mysql_error()."</h3>");
$num_rows = mysql_num_rows($userresult);
if($num_rows > 0) {
if($userresult['fab2_type']=='Partner'){
}
当我通过PHP Admin在数据库上运行SQL语句时,它运行得很好。但它在此处的结果中返回空。
我检查了一下以确保数据库连接良好。我检查了所有拼写正确返回的行数。没有语法错误。当我回显用户名和密码以及sql语句时,一切都是正确的。
这个代码以前是有效的,所以我不知道这里出了什么问题。
这是因为您没有正确引用$_POST
数组变量。您有$_POST[username]
和$_POST[password]
。它应该是$_POST['username']
和$_POST['password']
。这导致PHP将用户名和密码解释为常量。
这里有一个不同的语法镜头-
$usersql = "SELECT `fab2_type` FROM `feesys_admin` WHERE `adminname` ='".$_POST['username']."' AND `adminemail` = '".$_POST['password']."' ";
您可以通过预定义(正如Fred在下面所说)来进一步缩短此时间。
$user = $_POST['username']; // please sanitize this
$pass = $_POST['password']; // please sanitize this
$usersql = "SELECT `fab2_type` FROM `feesys_admin` WHERE `adminname` ='".$user."' AND `adminemail` = '".$pass."' ";
如果不清理用户输入,SQL注入的风险就很大。
- 请参阅以下关于堆栈的内容:如何防止SQL注入
密码相关
我注意到你可能在以纯文本存储密码。如果是这样的话,我们强烈反对。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
函数
对于PHP<5.5使用password_hash() compatibility pack
。
此外,关于SQL注入,将mysqli
与已准备好的语句一起使用,或者使用PDO与已准备的语句一起,它们更安全。