2016-08-31 9 views
1

私はユーザー管理システムを作成しました。私は、電子メールアドレスがすでにデータベースに存在するかどうかをPHPスクリプトが確認するようにします。ユーザーデータを更新できます。私は正しい電子メール形式を確認できます。スクリプトの中で動作しない部分は、電子メールがすでに使用されているかどうかを確認する部分です。ここでは動作しない部分がある:電子メールがデータベースに存在するかどうかの確認に問題がある

if($_POST['email'] !=$_POST['email']) 
    { 

    $query_email = " 
     SELECT 
     from users 
     where 
     email = :email 
    "; 

    $query_goes = array(

    ':email' => $_POST['email'] 

    ); 
    try 
    { 

     $stmt = $db->prepare($query_email); 
     $result = $stmt->execute($query_goes); 
    } 
    catch (PDOException $ex) 
    { 
     die("Failed to run query: " . $ex->getMessage()); 
    } 
    $row = $stmt->fetch(); 
    if($row) 
    { 
     die("Email already in use..."); 
    } 
それがスロー

エラー:痛い、クエリを実行するために失敗しました:SQLSTATE [23000]:整合性制約違反を:1062 Duplicataデュ・チャンピオン「[email protected]」がラを注ぎますclef 'email'

+2

あなたの質問は間違っています。何かを選択する必要があります。 A列または '*' –

+0

私はクエリを修正しました。私はそれを逃したとは信じられない。重複するエントリを避けるにはどうしたらいいですか?上記のこのコードは、管理者がユーザーのメールを変更した場合にのみ実行したいと考えています。変更がなければ、スキップされます。 – Grus

答えて

0

juergen dさんがコメントしたように、あなたの質問は間違っています。 あなたは電子メールが存在するかどうかをチェックしたいので、私は電子メールの列を全部ではなく取得することをお勧めします。あなたが何かを選択する必要があり、この

$query_email = " 
    SELECT email 
    from users 
    where 
    email = :email"; 
1

同様

$query_email = " 
     SELECT <----- should be SELECT email 
     from users 
     where 
     email = :email"; 

SELECT 1行が存在するかどうかをチェックしているだけで、物理データが返されることが少なくて済みますので、これを行うことができます。

メールがない場合は結果はありませんが、もしあれば結果があります。別のノートで

$query_email = " 
    SELECT 
    1 
    from users 
    where 
    email = :email 
"; 

は、どのようにこれは今までに実行します:どのような場合には

if($_POST['email'] !=$_POST['email'])

は、変数自体に等しいのではないでしょうか?

私はこの論理をはじめに走らせることはできません。あなたのエラーは、あなたが提供したコードとは何の関係もない、重複したエントリーに対するものです。私の推測では、このコードをスキップしていて、あなたはあなたのインサートにまっすぐ行くつもりです。

if(isset($_POST['email']))は何ですか?

+0

このコードの次の行の更新クエリにまっすぐ行くつもりです。重複したエントリを避けるにはどうすればよいですか? – Grus

+0

!=の背後にある私の論理は、電子メールアドレスがすべて異なっているということです。電子メールが変更された場合、それはもはやそれ自体と同じではなく、電子メールは異なります。例:[email protected]は[email protected]に変更され、それはもはやそれ自体と同じではありません。 – Grus

+1

これは意味がありません。なぜなら、変数がそれ自身と等しくない時点でインスタンスが存在しないからです。 '$ a = 1;変数は別の変数と等しくないかもしれませんが、**は常に数学ではxと等しくなります**($ a!= $ a){/ *これは決して起こらないでしょう。あなたはxが何であるかを変更することができますが、 'x!= x 'を意味するものではありません。 – skrilled

関連する問題