2016-07-22 53 views
-1

我試圖在一個php頁面內使用查詢兩次時遇到MySQLi和PHP的問題。問題是,第一個查詢完美,但第二個不起作用。第一個查詢設置了會話,但第二個查詢不。這裏是我的代碼(我也有連接到數據庫文件,表格及其它文件)..MySQLi第二個查詢不起作用

$connection = new mysqli($server,$username,$password,$database); 

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

if($select1 = $connection->query("SELECT * FROM users WHERE username = '$username'")) { 
    $counter1 = $select1->num_rows; 
    if($counter1 != 0) { 
     $_SESSION["accesserror"] = "Error: <em>That username is already used by other member.</em>"; 
    } 
} 
else if($select2 = $connection->query("SELECT * FROM users WHERE user_email = '$email'")) { 
    $counter2 = $select2->num_rows; 
    if($counter2 != 0) { 
     $_SESSION["accesserror"] = "Eror: <em>That E-Mail is already used by other member.</em>"; 
    } 
} 
+0

而不是設置一個變量,顯示真正的錯誤('mysqli'的最佳實踐示例)。此外,不要sql注入您的分數 – Drew

回答

0

更換else if

else if($select2 = $connection->query("SELECT * ... 

隨着if

if($select2 = $connection->query("SELECT * ... 

的問題你的代碼是隻要第一個查詢成功運行,執行永遠不會進入else if(即使第一個查詢沒有返回結果,它仍然運行succ essfully)。爲了經常檢查這兩個條件,則需要分開單獨if

這兩個

PS:這將是更有效地運行一個查詢,你應該永遠插入用戶提供的值,如$username直接在您的疑問;這是爲了避免SQL注入。你的代碼非常脆弱。這裏是一個更安全,更高效的版本:

$username = mysqli_escape_string($_POST['username']); 
$email = mysqli_escape_string($_POST['email']); 
$sql = "SELECT * FROM users WHERE username='$username' OR email='$email'"; 
if($select = $connection->query($sql) && $select->num_rows) { 
    while($row = $select->fetch_assoc()){ 
     if($row['username']===$username){/* add the "username taken" error */} 
     if($row['email']===$email){/*add the "email taken" error */} 
    } 
}elseif($select===false){ 
    //Todo: handle server error. probably a badly formed query 
    //error details in $connection->error 
}else{ 
    // OK to register 
} 
+0

感謝您的幫助和建議。 – dovlapsy

+0

@dovlapsy不客氣。我已經爲我的解決方案添加了一些代碼。如果我幫你解決了你的問題,一定要選擇我的解決方案,這就是我們在這裏感謝幫助者的方式。歡迎來到StackOverflow! – BeetleJuice

+0

我選擇了你的解決方案,但無法使用utnil我達到了15的聲望。感謝您發佈的代碼,但我想讓用戶確切知道什麼是錯誤的(用戶名或電子郵件),所以我不得不使用2個查詢。再次感謝! :) – dovlapsy