这是我的代码:
$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语句时,它都是正确的。
此代码过去常常工作,所以我不知道这里出了什么问题。
答案 0 :(得分:1)
这是因为您没有正确引用$_POST
数组变量。您有$_POST[username]
和$_POST[password]
。它应该是$_POST['username']
和$_POST['password']
。这会导致PHP将用户名和密码解释为constants。
以下是您的语法的另一个镜头 -
$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注入风险很大。
密码相关
我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能
对于PHP&lt; 5.5使用password_hash() compatibility pack
。
另外,关于SQL注入,use mysqli
with prepared statements或PDO with prepared statements,,它们更安全。