0

ユーザーのアカウントを有効にするためにPHPを書いています......コードはフィルタリングされ、サニタイズされ、パスワードは暗号化され、PDOを使用してデータを保存しました....データがいったんヘッダーリダイレクトされますが保存され、ユーザーが登録済みの電子メール アドレスのアクティベーション リンクをクリックするように誘導されます。

すべてが正常に機能していました。PDO RowCount() を使用してリダイレクトを実行するように指示していましたが、MySql データベースにハッシュ列を追加して、アクティブ化リンクを支援し、実際にアカウントをアクティブ化するために照会されるようにしました。 RowCount は既に入力されており、リダイレクトはフォーム自体をバイパスして実行されます。そのため、リダイレクトを機能させるコードをいくつか書きましたが、それでもフォーム自体をバイパスしています..... ヘッダーリダイレクトを実行するには、このコードが必要です。フォームですが、フォーム自体をバイパスして先に進んでリダイレクトするのをやめる必要があります。

以下のコード....リクエストに応じて利用可能なその他のコード.....

   try{
   $checkEmail = $db->prepare('SELECT email FROM users WHERE email = :email');
   $checkEmail->bindParam(':email', $clean['email']);
   $checkEmail->execute();
   $result = $checkEmail->fetch();
   print_r($result);
    } catch(PDOException $e) {
   $e->getMessage();
    }
   if ($result[0] === $clean['email']){

           header('Location:verifyemail.php');



     }

$clean['email'] は、プログラミング ロジックにおける現在の電子メール アドレスです。しかし、PHP にはすでにこれに対する何らかの価値があるように思われるため、フォームはバイパスされています。

4

1 に答える 1

0

このコード スニペットの意図を完全に誤解している可能性がありますが、ページが最初に読み込まれたときに$clean['email'](フォーム入力が処理されていないため) である場合、条件は常に true になるNULLと思います。if

  1. PDO 置換は、プレースホルダーが NULL に置換された状態で実行されるため、SELECT email FROM users WHERE email = NULL
  2. 行が一致しません ( NULL = NULLSQL では偶数が false であるため、保証されます)
  3. $result[0]SQL クエリが行を返さなかったため、未定義です。
  4. したがって、$result[0]両方$clean['email']とも PHP NULL と評価されるため、同一です。
  5. リダイレクトファイア

[更新、コメントから] このアプローチは、NULL 入力以外のすべてに対して機能すると思います。$clean['email']まったく供給されていない場合を検出する必要があるだけです。多分if ( ! empty($clean['email']) && $result[0] === $clean['email'] ) { ... }

于 2013-02-10T20:19:07.107 に答える