-1

それが基本的に私がやろうとしていることです。

データベースに保存するフォームがありますが、この場合の電子メールが既に存在する場合、「 user already exist.

データベースからフォームフィールドに値をエコーアウトしているため、更新をプッシュするたびに「ユーザーは既に存在します」というエラーが表示されます。値をエコーアウトしないと、フォームを更新するときに空の電子メール アドレスが保存されるか、 filter_validate_Email機能によって電子メールが無効であることが通知されます。

チェックボックスの問題を修正したときに成功しましたが、それはちょっと面倒で醜いので、if elseステートメントを試していますが、運がありません。これを管理する方法に関するヒントはありますか?

コードを送ります。

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

    } 

    if(email_exists($_POST['email'])){
        $errors[] = 'email already registered';
    }

$_POST 電子メールが $_POST 電子メールと等しい場合、私が考えていたそのステートメントで。何もしませんが、メールが email_exist 関数から存在する場合。error email already exist.

    if(empty($errors)){ 
        set_profile_info($_POST['firstname'],
        $_POST['lastname'],
        $_POST['username'],
        $_POST['email'],
        $_POST['about']);
    }
}

email_exists クエリ

function email_exists($email){
    global $db;
    $st = $db->prepare("SELECT * FROM user WHERE email=?" );
    $st->bindParam(1, $email);
    $st->execute();

    if($st->rowCount() ==1){
        return true;
    }
    else{ 
       return false;
    }
} 

おそらく他に何百万もの方法がありますが、他に何も思いつきません。ありがとう

4

1 に答える 1

1

「メール」フィールドには UNIQUE インデックスを使用する必要があります

ALTER TABLE yourtable
ADD UNIQUE INDEX EMAIL_UNIQUE(email);

次に、電子メールでユーザーを追加しようとすると、使用するSQLエンジンに応じてエラー/例外が発生します。

グローバルを使用していることに気付きましたが、それは悪い習慣です。データベースオブジェクトを取得するには、レジストリまたはシングルトンを作成することをお勧めします。

http://www.phpeveryday.com/articles/OOP-Pattern-Registry-Introduction-Registry-Pattern-P240.html http://en.wikipedia.org/wiki/Singleton_pattern

また、あなたは1つの奇妙なことをします。同じ型の「EXACT」変数を意味する「===」を使用し、文字列をブール値と比較すると、常に false が返される理由。

変化する

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

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

また

if(email_exists($_POST['email'])===((bool)$_POST['email'])){

変化する

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

} 

if(email_exists($_POST['email'])){
    $errors[] = 'email already registered';
}

$emailExists = email_exists($_POST['email'])
if(emailExists == $_POST['email']){
  //doing your stuff when email exists
} 

if(emailExists){
    //doing other stuff when email exists
    $errors[] = 'email already registered';
}

変更すると、データベースを呼び出す関数は一度だけ呼び出されます。

于 2013-04-17T13:02:18.787 に答える