2011-07-23 14 views
0

私はプライベートベータ版にサインアップするウェブサイトを作成しています。ユーザーがサインアップページでsubmitをクリックすると、phpコードは自分の名前、電子メール、ランダムに生成された32文字のハッシュを自分のデータベースのテーブルに入れます。その後、ユーザーに電子メールを送信します。電子メールには、ユーザーの電子メールアドレスと究極のセキュリティのためのハッシュを含む確認リンクが含まれています。それは次のようになります。彼らはこのリンクをクリックするとユーザーが別のサイトにサインアップしている場合はphpbb3登録を許可します

domain.com/b/[email protected]&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a 

、それは前述のデータベース内で一致するURLをチェックから電子メールやハッシュをとるverify.phpページ、に送信します。一致するものがあれば、別のメッセージを生成します。一致するものがない場合は、「無効なURLまたは登録していません」と表示されます。また、データベーステーブルには「アクティブ」という列があり、デフォルトでは0に設定されていますが、リンクがクリックされると1に変更されます。 verify.phpコードは、リンクを一度しか使用できないように、一致メッセージを表示する前にactiveが0に設定されていることを確認します。

一致すると表示されるメッセージは、変更されたphpbb3登録ページへのリンクを表示します。リンクは次のようになります。

domain.com/phpbb/ucp.php?mode=register&[email protected]&hash=1a2a3a4a5a6a7a8a9a8a7a6a5a4a3a2a 

私はこのように私のフォーラムのルートディレクトリに私のucp.phpファイルを変更した:

case 'register': 
     // Database info (which I stupidly forgot not to hide prior to this... 

     if(isset($_GET['email']) && !empty($_GET['email']) AND isset($_GET['hash']) && !empty($_GET['hash'])){ 
      // Verify data 
      $email = mysql_escape_string($_GET['email']); // Set email variable 
      $hash = mysql_escape_string($_GET['hash']); // Set hash variable 

      $search = mysql_query("SELECT email, hash FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='1'") or die(mysql_error()); 
      $match = mysql_num_rows($search); 

      if($match > 0){ 
       // We have a match, activate the account 
       mysql_select_db("db2") or die(mysql_error()); 
       if ($user->data['is_registered'] || isset($_REQUEST['not_agreed'])) 
       { 
       redirect(append_sid("{$phpbb_root_path}index.$phpEx")); 
       } 

       $module->load('ucp', 'register'); 
       $module->display($user->lang['REGISTER']); 

      }else{ 
       // No match -> invalid url or account has already been activated. 
       mysql_select_db("db2") or die(mysql_error()); 
       if ($user->data['is_registered'] || isset($_REQUEST['not_agreed'])) 
       { 
       redirect(append_sid("{$phpbb_root_path}index.$phpEx")); 
       } else { 
       redirectpage(); 
       } 
      } 

     }else{ 
      // No match -> invalid url or account has already been activated. 
       redirectpage(); 
     } 
break; 

verify.phpページ上で使用されるこの同じコードを、アクティブにするために0に設定する必要がないように変更した点を除き、

このすべての機能はほとんどの場合動作します。電子メールまたはハッシュが指定されていない場合、または間違っている場合、ページは正しくリダイレ​​クトされます。唯一の問題は、ユーザーが登録契約ページの[同意する]ボタンをクリックすると、何らかの理由でリダイレクトが再生されることです。登録フォームが存在する次のページには持ち込まれません。

これは、登録契約ページをスキップしようとしたときにも発生しました。正常にスキップしましたが、登録フォームに記入して「送信」をクリックすると、リダイレクト機能が再度トリガーされました。

送信ボタンを押すたびにリダイレクトが発生する理由を知っていますか?

答えて

0

私は、送信ボタンをクリックするといつでも同じページにあなたを送り、モードが「登録」に設定されているので、ページがリダイレクトされていると想像してください。フォームからのハッシュしたがって、submitをクリックして最終ページに行くときに渡される値のリダイレクトの例外を設定するだけです。

+0

問題は、私がPHPにうまく対応していないことと、フォーム提出で実際にどの値が渡されているかを知るのに十分ではない...ということです。本当に助けに感謝します。私は会うための締め切りが短く、前にこれをやりたいと思います。 – Purag

+0

コードをコメントアウトし、[送信]ボタンをクリックして最終ページに移動します。 .phpの後に渡される変数は何ですか?ここに掲示すれば、私はあなたを助けようとします。 –

+0

私はこれをやろうとしましたが、URLの変更や、渡される変数の追加に気付かなかった...それはむしろ奇妙です。私は何をすべきか? – Purag

関連する問題