我在下面的脚本中遇到了主题错误:
<?php
include("db.php");
if($_SERVER["REQUEST_METHOD"] == "POST") {
$email = mysqli_real_escape_string($link,$_POST['email']);
$password = mysqli_real_escape_string($link,$_POST['password']);
$gender = $_POST['gender'];
$password = md5($password);
if ($gender == female) {
$sql="SELECT id FROM female_users WHERE email='$email' AND password='$password'";
} else {
$sql="SELECT id FROM male_users WHERE email='$email' AND password='$password'";
}
$result=mysqli_query($link,$sql);
$count=mysqli_num_rows($link,$result);
if($count==1) {
echo('Hello');
} else {
$error="Your Email or Password is invalid";
}
}
mysqli_close($link);
?>
我不确定它是什么......我试图消除if语句,但它没有给我任何结果。
答案 0 :(得分:2)
在此处查看错误:
$count=mysqli_num_rows($link,$result);
mysqli_num_rows()
函数不会将数据库连接作为参数,因此请从那里删除$link,
。
然后,female
中的if ($gender == female)
被视为常量http://php.net/manual/en/function.constant.php,而不是字符串http://php.net/manual/en/language.types.string.php:
if ($gender == 'female')
并且错误报告会给你一些关于未定义的不断女性通知的事情。
现在,MD5不再被认为可以安全地存储密码。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
关于列长的重要说明:
如果您决定使用password_hash()
或兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/,请务必注意,如果您当前的密码列的长度低于60 ,它需要更改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。
答案 1 :(得分:0)
尝试
$count=mysqli_num_rows($result);
答案 2 :(得分:0)
将计数查询更改为:
$result=mysqli_query($link,$sql);
$count=mysqli_num_rows($result);