2016-03-14 94 views
1

所以我有一個註冊表格應該檢查電子郵件是否存在,如果它沒有註冊,但是如果它沒有註冊。問題是,每當我得到你已經是一個註冊用戶,即使我甚至沒有任何數據庫中的數據。註冊表格返回你已經註冊的用戶

這裏是代碼

<?php 
error_reporting(E_ALL); 
define('DB_HOST', 'localhost'); 
define('DB_NAME', 'Users'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', ''); 

$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); //Use MySQLi as MySQL is depreciated. 

if (isset($_POST['submit'])) { 
//No need for functions, do it all here as otherwise you'll have to declare globals. 
    if (!empty($_POST['email'])) { 
    $query = mysqli_prepare($con, "SELECT * FROM Websiteusers WHERE email = ?"); //Preparing the SQL query (We don't insert values directly into the query) 
    mysqli_stmt_bind_param($query, "s", $_POST['email']); //Bind the email to the SQL query 
    mysqli_stmt_execute($query); //Execute the query 
    mysqli_stmt_store_result($query); //Store the results 
    if(!mysqli_stmt_num_rows($query)) //Is the number of rows 0? 
    { 
     //Yes 
     echo "SORRY...YOU ARE ALREADY REGISTERED USER..."; 
    } 
    else 
    { 
     //No 
     $query = mysqli_prepare($con, "INSERT INTO WebsiteUsers (firstname,efternamn,email,password) VALUES (?, ?, ?, ?)"); //Preparing the SQL query (We don't insert values directly into the query) 
     mysqli_stmt_bind_param($query, "ssss", $_POST['firstname'], $_POST['efternamn'], $_POST['email'], $_POST['password']); //Bind the params to the SQL query 
     mysqli_stmt_execute($query); //Execute the query 
     echo "YOUR REGISTRATIOfafa"; 
    } 
    } 
    } 
    ?> 
<!DOCTYPE HTML> 
<html> 
<head> 
<title>Registrera Dig</title> 
<link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 
<table> 
    <form method="POST" action="test.php"> 
     <tr> <td>Namn</td><td> <input type="text" name="firstname"></td> </tr> 
     <tr> <td>Efternamn</td><td> <input type="text" name="efternamn"></td> </tr> 
     <tr> <td>Email</td><td> <input type="text" name="email"></td></tr> 
     <tr> <td>Lösenord</td><td> <input type="password" name="password"> </td> </tr> 
     <tr> <td>Bekräfta lösenord </td> 
     <td><input type="password" name="cpass"></td> </tr> 
     <tr> <td><input id="button" type="submit" name="submit" value="Skapa konto"></td> </tr> 
    </form> 
    </table> 
    </body> 
    </html> 

什麼可能是問題嗎?

+0

任何人都有什麼? – Markus

回答

0

看看下面的行

if(!mysqli_stmt_num_rows($query)) 

,並考慮當你沒有行從數據庫中返回。然後,您的代碼將在原則上看起來像

if (!0) 

相當於true,因爲驚歎號標誌是 - 運算符 - 它扭轉它。 if (1)也是如此,但if (0)將是錯誤的(並跳到else-您的聲明的塊)。

解決方法是簡單地刪除這個!,因爲您的邏輯當前是顛倒的。因此,該行看起來像

if (mysqli_stmt_num_rows($query)) 

爲了使你的代碼更易讀,你可以檢查它是否大於零,它基本上做同樣的事情,但它是更快地瞭解到底發生了什麼事。不過這是個人喜好。

if (mysqli_stmt_num_rows($query) > 0) 
+0

謝謝sooooo多。很好,你解釋,而不僅僅是回答。驚人的如何一件事可以bug整個代碼,thx再次 – Markus

+0

@Markus樂於幫助! ;-) – Qirel