2017-07-18 110 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

查詢本身似乎是問題,它現在起作用。然而,與你的答案略有不同。 –

相關問題