1

私は数年前に大学でこれを学びましたが、今では実際に仕事のためにこのようなことをしなければなりません. 私は昔の宿題をふるいにかけています。

登録ページを作成しています。

ユーザーは POST を自分自身に送信します -> php は同じページで検証します。うまくいかない場合は、自分自身にリダイレクトし、フォームに悪い回答を入力します。セッションを開始して、すべての変数をセッションなどに保存する必要がありますか? コードの一部を省略しました。早く読めるように

<?php
    //connect to database.....

    //Extracting the data
    if ($_SERVER['REQUEST_METHOD'] == 'POST')
    {
     $pageValid = true;
     $fName         = $_POST['fName'];
     $lName         = $_POST['lName'];
    };

        //validate $fname $lname etc $pageValid = true if it's all good

        if ($_SERVER['REQUEST_METHOD'] == 'POST'){
        if ($pageValid  == true){
            //insert into sql
        header('Location: thankyou.php');
        exit;

        } else  {  
        //if page is not valid redirect come back here
        header('Location: register.php');
        exit;
    };
} //<!--End of ($_SERVER['REQUEST_METHOD'] == 'POST')


?>
<!DOCTYPE html>
<html lang="en">
<head>header...</head>

<body>

<div id="form"  class="col-md-12">
<form id="form1" name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">

<table class="table"><tr>
<td width="200"><label for="firstName">First Name:</label></td>
<td>
<input name="fName" type="text" id="register" 
value="<?php 

//$fName I want to add the value of $fName here after it gets redirected

?>" size="25" maxlength="50" /> *
 <?php print $fNameError;?>          
</td>
</tr>
</table>

</body>
</html>
4

4 に答える 4

1

fName$_REQUEST['fName'] で設定できます

$_POSTを使用して(または$_GETGETメソッドを使用したフォームの場合)、すべての投稿入力の値をいつでも取得できます

どちらの場合も、配列にアクセスして入力値を取得できます$_REQUESTドキュメントはこちら

セッションを使用することは、非常に悪い考えです。ユーザーが複数のタブから Web アプリにアクセスし始めると、頭痛の種になります。また、フォームを処理した後にセッションをクリアする必要があるか、ユーザーが次にフォームを使用するときに予期しない結果が発生する可能性があるため、これも問題です (たとえば、入力フィールドが自動的に、ユーザー入力なしで説明できないほど埋められるなど)。 )。

アップデート

フォーム入力をセッションに保存することは、少なくとも 2 つの理由からお勧めできません。

  • セッションは、同じユーザーが同時に開いたすべてのページ間で共有されます。タブでフォームを開き、いくつかのエラーで送信したとします。Web アプリはフォームを再度開き、フォームにセッション中のデータを入力します。次に、同じフォームで 2 番目のタブを開きます。セッションは同じであるため、フォームには最初のフォームのデータが入力されます。いくつかのエラーで送信します: 両方のフォームのデータを変更します

  • $_REQUESTアイテムは POST 中に入力され、次のリクエストで自動的にクリーンアップされます。セッションはそうではなく、セッション全体で永続化されます。これは、コードでそれらを明示的にクリアする必要があることを意味します。そうしないと、フォームを送信しなくても、古い値を持つフォーム入力を見つけるリスクがあります。

于 2013-10-14T21:28:56.323 に答える
0

エラー時にフォームにリダイレクトする必要はありません...フォームは同じスクリプト内で構築されているため、残りのスクリプトをレンダリングさせてください。有効な登録データに対するリダイレクトのみが必要です。

基本的に、PHP の「else」部分を取り除きます。

于 2013-10-14T21:45:10.783 に答える
0

はい、$_SESSION 変数にデータを格納することをお勧めします。

例えば$_SESSION["lname"] = $_POST["lname"];。セッションを開始したり、入力の有効性を確認したりする必要があることは明らかです....

于 2013-10-14T21:20:22.163 に答える
0

基本的に、POST変数の存在を確認します。

<?php
if( isset( $_POST['fName'] ) )
{
  // the form has been submitted, do something

}
?>

データを受け取るページにフォーム データが表示される場合は、セッション変数を使用する必要はありませんPOST

編集

いくつかの $_SESSION 変数を設定したい場合は、すべての POST データをセッション配列に詰め込むことができます

<?php
if( isset( $_POST['fName'] ) )
{
  $_SESSION['posted'] = $_POST;
}
?>

または、POST データを検証し、有効な入力のみをセッションに入力する場合:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
  $_SESSION['formData'] = array();
  $_SESSION['formData']['pageValid'] = true;
  $_SESSION['formData']['fName'] = $_POST['fName'];
  $_SESSION['formData']['lName'] = $_POST['lName'];
};
?>
于 2013-10-14T21:21:51.193 に答える