2015-02-05 55 views
0

我不能爲了我的生活找出這有什麼問題。這可能是一些隱藏的規則或愚蠢的錯誤。此代碼旨在防止用戶創建兩次相同的用戶或同一封電子郵件,但僅適用於用戶名。我是否錯過了一些東西,或者它只是一個愚蠢的錯誤?我使用兩個if語句來嘗試實現這一點(如註釋所述),但它不起作用。卡住試圖阻止重複創建的用戶

在此先感謝

$username = $_POST['username']; 
$password = $_POST['password']; 
$email = $_POST['emailAddress']; 


// Create connection 
$conn = new mysqli($servername, $SQLusername, $SQLpassword, $DBname); 

// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysql_connect_error()); 
} 

$sql = "SELECT * FROM `Login` WHERE `Username` LIKE '$username' AND `Password` LIKE '$password';"; 
$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_assoc($result); 

$emailDB = $row['Email']; 
$usernameDB = $row['Username']; 

// username validation 
if ($username == $usernameDB) 
{ 
    echo "Username '$username' is already taken!<br>"; 
    exit; 
} 
//E-mail validation 
if ($email == $emailDB) 
{ 
    echo "Email '$email' is already registered!<br>"; 
    exit; 
} 
+0

*但它不工作*你能再描述一點嗎?! – Rizier123 2015-02-05 23:10:44

+1

您的查詢看起來不像是在檢查你想要的。你真的只需要計算匹配密碼或用戶名的行。如果有的話,你有一個副本。你可以用=來代替查詢。 – 2015-02-05 23:14:39

+2

存儲明文密碼通常也被認爲是不好的做法,但那是另一回事。 – 2015-02-05 23:15:38

回答

0

你只需要另一個查詢:))):

$sql = "SELECT * FROM `Login` 
     WHERE `Username` LIKE '$username' 
     OR `Email` LIKE '$email';"; 
$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_assoc($result); 

$emailDB = $row['Email']; 
$usernameDB = $row['Username']; 

// username validation 
if ($username == $usernameDB) 
{ 
    echo "Username '$username' is already taken!<br>"; 
    exit; 
} 
//E-mail validation 
if ($email == $emailDB) 
{ 
    echo "Email '$email' is already registered!<br>"; 
    exit; 
} 

,你應該更好地利用:

"SELECT * FROM `Login` 
      WHERE `Username` = '$username' 
      OR `Email` = '$email';" 

因爲如果它沒有真正平等,新用戶可以註冊:-)