2011-07-30 17 views
0

私は現在、学校の最終学年のWebアプリケーションプロジェクトを行っています。私はウェブデベロッパーよりもウェブデザイナーの方が多いので、私は得ることができるほどの助けが必要です!ポストリダイレクト - データベースへのダブルエントリの取得と投稿

私のプロジェクトでは、ブログサイトとよく似たウェブサイトを作成しています。

私が実装したい最初の機能は、ユーザーが登録しているときに実行されていたので、すでにユーザー名が使用されていないようにsignUp.php(html form)/ doSignUp.php(phpデータをデータベースに投稿)データベース。

たとえば、データベースのusername = "happy"です。 User1は のsignUp.phpにフォームを記入し、 "happy"を記入して doSignUp.phpに提出してください。 doSignUp.phpは username = "happy"が内部にあるかどうかをデータベースでチェックします。内部にある場合は、ダブル入力を防ぐためにデータ を再度内部にポストしませんが、代わりに signUp.phpにリダイレクトして、「ユーザー名は です」というメッセージで通知します。私はアイデアを持っている最初の関数については

は:

$selectUser = executeSelectQuery("SELECT username FROM user WHERE username="$username") 
if ($selectUser==0) { 
    $doRegister = executeInsertQuery("INSERT INTO user (Name,Username, Email, 
      Password, DOB_Date, DOB_Month, DOB_Year, Gender,admin, Country) VALUES 
      ('$Name','$Username','$Email',SHA1('$Password'),'$DOB1','$DOB2','$DOB3','$Gender','$role' , 
      '$Country')"); 
} else { 
<// redirect codes here to signUp.php with message "user name is in used"> 
} 

私が実装したい第二の機能はlogin.php(ログインフォーム)を伴うdoLogin.php(ポストされたデータは、と一致するかどうかを確認ログインフォームに入力したもの)とmemberPage.php(メンバであればmemberPageにリダイレクトし、彼にはセッションを作成し、そうでない場合はlogin.phpにリダイレクトしてメッセージを表示します)。

第2の機能については、私のログインにpost-redirect-getメソッドをどのように実装すればよいかわかりません。私はデモのためにgoogleを試してみましたが、役に立たなかった。できれば助けてください!事前に感謝:D

答えて

0

コードは、リダイレクトします

header("Location: signUp.php?message=" . urlencode("user name is in use")); 

をsignUp.phpでは、エラー、印刷$_GET['message']を印刷します。

+0

助けてくれてありがとうございますが、あなたのコードを試しました\t header( "Location:signUp.php?message ="。urlencode( "user name is in use"));ユーザーが使用したユーザー名を入力したときにリダイレクトしなかったため、間違っているものは見つかりませんでした。 – Jakob

+0

これは、あなたの条件 'if($ selectUser = 0){'は**常に** trueです。なぜなら、あなたは '=='比較演算子の代わりに '='という代入を使用しているからです。 –

+0

私は==演算子に変更しました。テストしました。私の条件が偽であっても、それはsignUpページにリダイレクトされませんが、今やダブルエントリーはできません。 – Jakob

0

header()機能を使用してサインアップ表示ページ(signUp.php)にメッセージでリダイレクトすることはできますが、フォーム処理時にこの複数ファイルの試行をお勧めしません。
何かもっと魅力的なもの(少なくとも私にとって)は、フォームを表示するファイルの上部に処理ロジックを配置しています。このロジックは、フォームが提出されたことを確認するために小切手で折り返す必要があります。何か問題が生じた場合は、後でファイルに表示される変数にエラーを格納します。この例を見てみましょう:この状況で

<?php 
if($_POST['submit'] == 'Submit') { 
    if(!$userNameIsUnique) { //Mysql Processing - duplicate check here 
     $message = "Username has already been used."; 
    } 
    //Check other fields for duplicates or invalid data 
    if(!isset($message)) { 
     //Form submit successful send info to data 
     mail(); //Send confirmation email 
     die('Check your email to verify your account!'); //Display success message 
    } 
} 
?> 
<html> 
<head><title>Signup</title></head> 
<body> 
    <?php if(isset($message)) echo '<p>'.$message.'</p>'; ?> 
    <form action="" method="post"> 
     <input name="username" /> 
     <input type="submit" name="submit" value="Submit" /> 
    </form> 
</body> 
</html> 

を、あなたはまだ、別のビューとコントローラロジック(ファイルを含みます)することができますが、2つのファイルを持ち、2つの要求(フォームの1提出し、1を強制的に避けます入力にエラーがある場合は、フォームにリダイレクトされます)。

+0

ユーザーが正常に登録されたときに電子メール確認機能などがないと、このコードを使用することになります。しかし、洞察に感謝! – Jakob

+0

これで電子メール検証を引き続き使用することができます。私は電子メールからリンクする別のファイルを作成したいと思いますが、電子メールをどこから送信できるかを示すためにコードを更新します。 –

関連する問題