2016-04-24 88 views
-1

我已经得到了从话题错误下面的脚本:警告:mysqli_num_rows()期望的是1个参数,2 ....在线14

<?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); 
?> 

我不知道它是什么。我试图消除陈述,但它没有给我任何结果。

+2

'mysqli_num_rows()'没有数据库连接作为参数。 RTFM http://php.net/manual/en/mysqli-result.num-rows.php –

+0

关于$ link呢? – user3267302

+0

呢?这只适用于数据库连接和查询。哦,顺便说一句......'如果($性别==女性)''女性',在这里被视为一个常量。并且如果您正在或打算上线,请勿使用MD5。 –

回答

0

尝试

$count=mysqli_num_rows($result);  
+1

尝试尝试...这就是我们在这里看到的。不是我倒下了。编辑:现在它消失*大声笑* –

+1

为什么要OP“试试这个”?一个**好的答案**总是会解释做了什么以及为什么这样做, 不仅适用于OP,而且适用于SO的未来访问者,可能会发现此问题并正在阅读您的答案。 – RiggsFolly

+1

哦,你错过了什么。如果你打算做出答案,至少可以得到所有的错误。 –

2

投奔这里的错误:

$count=mysqli_num_rows($link,$result); 

mysqli_num_rows()功能并不需要一个数据库连接作为参数,所以从那里取出$link,

然后你在if ($gender == female)female被视为常数http://php.net/manual/en/function.constant.php而不是字符串http://php.net/manual/en/language.types.string.php

if ($gender == 'female') 

和错误报告会抛出你对一个未定义的常量女性的东西注意。

现在MD5不再被认为是安全,可以用来存储密码使用。下面的

用途之一:

其他链接:

有关列长度重要旁注:

如果当你决定使用password_hash()或兼容包(如果PHP < 5。5)https://github.com/ircmaxell/password_compat/,重要的是要注意,如果你现在的密码列的长度是低于60的任何东西,它将需要被改变为(或更高)。本手册建议长度为255.

您需要更改列的长度,并使用新散列重新开始以使其生效。否则,MySQL将无声无息地失败。

0

变化计查询:

$result=mysqli_query($link,$sql); 
    $count=mysqli_num_rows($result); 
相关问题