2016-07-22 14 views
-1

MySQLのPHPとPHPの問題を1つのPHPページ内で2回使用しようとしています。問題は、最初のクエリは完璧に動作しますが、2番目のクエリは機能しません。最初のクエリはセッションを設定しますが、2番目のクエリはセッションを設定しません。ここに私のコードは(私もDBファイル、フォームや他のファイルに接続している)..ですMySQLiの2番目のクエリが機能しない

$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

に問題if

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

else if

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

を交換してくださいあなたのコードは、最初のクエリが正常に実行されていれば、実行は決してelse ifになることはありません(最初のクエリが結果を返さなくても、succ本質的に)。常に両方の条件をチェックするために、あなたは別のifブロック

でそれら二つを分離する必要が

PS:1つのクエリを実行するために、より効率的である、とあなたは決して挿入ユーザーは、このような$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

関連する問題