2017-09-30 3 views
1

入力された電子メールと入力されたユーザー名の両方が既に取得されていないことを確認しようとしています。なぜそれが機能していないのか分かりません。一度に1つの作業しかできませんでした。電子メールとユーザー名のどちらも既に取得されていないことを確認してください

session_start(); 
$con = mysqli_connect('localhost','root',''); 

-

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

-

$sqltwo = "SELECT Username FROM user WHERE `Username`='$Username'"; 
     $resulttwo = $con->query($sqltwo); 

     if ($resulttwo->num_rows == 0) { 
      $UsernameTaken = false; 
     } else { 
      $_SESSION['usravailability'] = "Username already taken." ; 
      header ('location: index'); 
     } 

    $sqlthree = "SELECT Email FROM user WHERE `Email`='$Email'"; 
     $resultthree = $con->query($sqlthree); 

     if ($resultthree->num_rows == 0) { 
      $EmailTaken = false; 
     } else { 
      $_SESSION['emlavailability'] = "Username already taken." ; 
      header ('location: index'); 
     } 


    if ($UsernameTaken == false && $EmailTaken == false) { 
    echo 'not taken; 
} else { 
    echo 'taken'; 
} 

私もどちらか動作しませんでした

if ($UsernameTaken == false || $EmailTaken == false) { 
    echo 'not taken; 
} else { 
    echo 'taken'; 
} 

で試してみました。私はおそらく何か非常に間違っているが、私は何が分からない。私の意見では

+1

電子メールとユーザー名列にUNIQUE制約を追加しないのはなぜですか? – djfdev

+1

エラーは何ですか? –

+1

'echo 'は取られません;'これは1つのことについて解析エラーを投げ、データベースも選択しませんでした。この事はまた、重大なSQLインジェクションを起こしがちです。私が言ったことのほかに、ここでやっておくべき事柄はかなりたくさんあります。 –

答えて

1

簡単なバージョンは、1つのSQL文を持っているだろう:

$sqlquery = "SELECT Username, Email FROM user WHERE `Username`='$Username` OR `Email`='$Username`"; 

次に任意の行が見つかったかどうかを確認し、新しい変数(例alreadyExists。)にその値を格納します。

メッセージの場合、行が見つかった場合は、$ Username変数が行のユーザー名と一致するかどうかを確認し、「username is already exists」というメッセージを出力します。電子メールが一致する場合は、もう存在している"。このよう

あなただけの、私はそれがあなたのスクリプトを向上させることができます見る「alreadyExists」

+0

だからこのようにしたよ。 '$ sqlquery =" SELECTユーザー名、ユーザーからのメールアドレス 'Username' = '$ Username' OR' Email' =' $ Username' "; $ emusr = $ con-> query($ sqlquery); if($ emusr-> num_rows == 0){ echo 'do stuff'; } else { if($ row ['Username'] == $ Username){ $ _SESSION ['usravailability'] = 'ユーザー名はすでに取得済みです。'; } if($ row ['Email'] == $ Email){ $ _SESSION ['emlavailability'] = '既に使用中のメールアドレス'; }} ' あなたはこのような変数を持っている必要があります混乱 – Idk

+0

については申し訳ありません:$ alreadyExists = $ emusr-> NUM_ROWS> 0;既に存在するかどうかを確認するまた、1つの行だけではなく、2つの行を持つこともできます。 Onwより多くのことは、 'if($ row [' Email ']'はelseでなければならないのでif –

1

いくつかの問題をチェックするために、データベースへの接続と変数を1つだけ減らす、1つのクエリを持っています。

第一 -

第二あなたのクエリを実行する前に、データベースを選択 - プリペアドステートメント、または最低限の使用mysqli_real_escape_stringでユーザー入力をサニタイズ。

第3 - @CliveCiapparaが彼の答えで書いたように、1つのクエリで十分です。

4 - 'あなたのエコーで(エコー 『追加』を取られていない;)

session_start(); 
$con = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); 

$Email = $con->mysqli_real_escape_string($_POST['email']); 
$Username = $con->mysqli_real_escape_string($_POST['username']); 

$q = "SELECT Username, Email 
     FROM user 
     WHERE `Username`='$Username' 
     OR `Email`='$Email'"; 

$r = $con->query("$q"); 

echo ($r->num_rows === 0) ? "Not Taken" : "Taken"; 
1

あなたは(正しく文字列を終了していない)not taken'が欠けているように見えます。これはあなたの問題に関連していますか?

関連する問題