2017-07-18 38 views
0

我试图让我的PHP脚本检查电子邮件和用户名是否已经存在于数据库中,然后显示消息,如果他们这样做 - 我最初能够检查只有一个成功,但现在我试图检查插入之前,我有一些问题。使用2个单独的查询来检查数据库中是否存在电子邮件和用户名

有人可以给我一些关于我在做什么错误的建议吗?

// 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

你是否试过这样的WHERE email ='$ email'和username ='$ signupusername',或者单独使用,如果不是的话,如果 – zod

+1

你已经开放SQL注入。由于您使用的是mysqli,请利用[prepared statements](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[bind_param](http://php.net/手动/ 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

查询本身似乎是问题,它现在起作用。然而,与你的答案略有不同。 –

相关问题