2017-07-18 3 views
0

PHPスクリプトを使用して、電子メールとユーザー名の両方がDBに存在するかどうかを確認し、成功したばかりの1つだけをチェックするようにしましたが、挿入前に両方をチェックしようとしていますが、いくつかの問題があります。2つの別のクエリを使用して、電子メールとユーザー名がdb内に存在するかどうかを確認します

私がここで間違っていることについて、誰かに私に何か提案をしてもらえますか?

// Check if simple anti-bot test is correct 
if ($human !== 5) { 
    $errHuman = 'Your anti-spam is incorrect'; 
} 
else { 
    if (!$errEmail && !$errUsername && !$errPassword && !$errPassMatch && !$errHuman) { 

     $query1="SELECT email FROM blog_members WHERE email='$email'"; 
     $query2="SELECT username FROM blog_members WHERE username='$signupusername'"; 
     $result1=mysqli_query($conn, $query1); 
     $result2=mysqli_query($conn, $query2); 

     if ($result1 && mysqli_num_rows($result1) >=1) { 
      $error = "Email already exists!"; 
     }else if ($result2 && mysqli_num_rows($result2) >=1) { 
      $error = "Username already exists!" 
     }else { 
      $query="INSERT INTO blog_members(username, password, email) VALUES ('$signupusername', '$signuppassword', '$email')"; 
      $result=mysqli_query($conn, $query); 
      ?> 
       <script type="text/javascript"> 
       alert("User created, please login from the homepage!"); 
       window.location.href = 'http://www.mywebsite.co.uk/index.php#login'; 
       </script> 
      <?php 
     } 
    } 
} 
+2

どうなりますか?間違いはありますか? – Daniel

+0

あなたはこのようにしようとしましたか?電子メール= '$ email'とusername = '$ signupusername'か、そうでない場合は別のものを使用してください。 – zod

+1

あなたはSQLインジェクションを広く開いています。 mysqliを使用しているので、[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と[bind_param](http://php.net/ manual/en/mysqli-stmt.bind-param.php)。これは、厄介な引用問題を防ぐのにも役立ちます。 – aynber

答えて

0

これを行うにしてください:

$query = mysqli_query("SELECT * FROM blog_members WHERE username='$username' OR email='$email'", $conn); 
$result = mysqli_num_rows($query); 

if ($result != 0) { 
    // What happens if it exists 
} else { 
    // What happens if it doesn't exist 
} 

は私に何かがうまくいかない場合に発生または任意のエラーを知らせます。

+0

クエリ自体が問題であるように見えましたが、今すぐ動作します。しかし、あなたの答えに少し違った方法で。 –

関連する問題