2017-01-06 12 views
-3

なぜmysqli_num_rows関数は常に以下のコードでfalseを返すのですか?mysqli_num_rowsが常にfalseを返す理由

<?php 
if($_POST['submit']){ 
    //to validate the email address 

    if(!$_POST['email']){ 
    $error.="<br/>Please enter your email"; 
    }else if(!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)){ 
    $error.="<br/>Please enter a valid email address"; 
    } 

    // To validate password 
    if(!$_POST['password']){ 
    $error.="<br/>Please enter a password"; 
    }else{ 
    if(strlen($_POST['password'])<8){ 
     $error.="<br/>Please enter a password with at least 8 characters"; 
    } 
    if(!preg_match('`[A-Z]`',$_POST['password'])){ 
     $error.="<br/>Please include at least one capital letter in your password"; 
    } 
    } 

    if($error){ 
    echo "There were error(s) in your sign up details".$error; 
    }else{ 

    $link=mysqli_connect("localhost","diary",""); 
    if(mysqli_connect_error()){ 
     die("there is an arror"); 
    } 

    //$query="insert into `users` (`email`,`number`) values ('[email protected]',123)"; 

    $email1=$_POST['email']; 

    // search for already registered emails 
    $query="select * from users where email='".mysqli_real_escape_string($link,$email1)."'"; 

    $result = mysqli_query($link, $query); 

    if (!$result){ 
     die(mysqli_error($link)); 
    } 

    // And here where errors comes. 
    $results = mysqli_num_rows($result); 

    if(!$results){ 
     echo "That email address is already registered"; 
    }else{ 
     echo "dont know"; 
    } 
    } 
} 
?> 

<form method=post> 
    <input type="email" name="email" id="email"/> 
    <input type="password" name="password" /> 
    <input type="submit" name="submit" value="Sign Up"> 
</form> 
+0

「mysqli_num_rows」は「0」または「false」を返しますか? 'var_dump($ results);'を使ってチェックします。 –

+0

さて、何番の返事ですか?それは何を返すと思いますか?なぜそれを期待していますか? – David

+0

@David私はPHPスクリプトを実行するランプを使用しています。私はページをリフレッシュするたびにエラーが発生します。 "警告:mysqli_num_rows()は、パラメータ1がmysqli_result、〜29行目のdiary.phpで指定されたブール値になることを期待しています。"この代わりに、データベースにあるレコードに従って0または1を返します。 –

答えて

0

これはスクリプト全体ではない場合、エラーをある値に初期化してから、それに連結する必要があります。

第2に、クエリの結果をmysqli_num_rowsに送る前に確認する必要はありません。 常にを使用して他の操作を実行する前に、クエリの値を確認する必要があります。

$query="select * from users where email='".mysqli_real_escape_string($link,$email1)."'"; 
$result = mysqli_query($link, $query) or die(mysqli_error($link)); 
if (!$result) { 
    // you should write this to an error log. don't show it to a user 
    $error = mysqli_error($link); 
    die("The query failed!"); 
} 

// And here where errors comes. 
$results = mysqli_num_rows($result); 
関連する問題