0

ユーザーが入力したさまざまなフィールドを送信するフォームがあります。

PHP ページがフォームを受け取り、すべてのフィールドが入力されているかどうかを確認します。それらのいずれかが欠落している場合は、フォームに戻り、欠落しているものが特定されます。

ユーザーがフォーム全体を再入力する必要がないように、PHP サイトでキャッチされたすべてのフィールドをフォーム ページに戻すのが最善の方法であると考えていました。

これが私がチェックする方法です:

if (empty($firsName) || empty($lastName) || empty($address) || empty ($city) || empty ($state) || empty($zip))
{
header('Location: checkout.php');
}

チェックするフィールドが他にもたくさんある可能性があり、少し重いように見えるので、URLを介してそれらを渡したくありません...これを達成する通常の方法はどれですか?

ありがとう!

4

4 に答える 4

1

やり方がわからない場合の最善の方法は、フレームワークを使用することです。それがオプションでない場合は、通常、投稿された値があるかどうかを確認し、必要に応じて出力する関数があります。

function getElementValue($elementName)
{
    if (isset($_POST[$elementName]))
    {
        return htmlspecialchars($_POST[$elementName]);
    }

    return '';
}

そしてあなたのページで:

<input type="text" name="firstName" value="<?php echo(getElementValue('firstName')); ?>" />

チェックボックスなどには、似ているが異なる機能が必要です。

于 2013-06-06T15:42:24.593 に答える
0

他のページに投稿する前に、それらが空であるかどうかを確認してみませんか

    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

とにかくあなたの質問への答え

いくつかの選択肢があります。それらを個別にセッションに保存するか、配列としてセッションに保存し、すべてを取得した後にインデックスを設定解除することができます

GET パラメーターを介して渡すこともできますが、長いようで、get を使用するのが最も安全ではありません。重いため、ページの読み込み時間に目に見える違いはなく、URL の方法についてあまり気にする必要はありません。見える

データベースがある場合は、それをテーブルに保存して、次のページの読み込み時に読み取りと削除を行うことができます

于 2013-06-06T15:41:58.520 に答える
0

変数をセッションに保存し、フォーム ページでセッション変数をエコーアウトします。$_SESSION['error_msg'] のような別のセッション変数を作成し、それに追加することで、そのようにエラー メッセージを返すこともできます。

session_start();

$errors = array();

if(empty($firstName)){
    $errors[] = 'Please enter your first name';
}
if(empty($lastName)){
    $errors[] = 'Please enter your last name';
}
if(empty($address)){
    $errors[] = 'Please enter your address';
}
if(empty($city)){
    $errors[] = 'Please enter your city';
}
if(empty($state)){
    $errors[] = 'Please enter your state';
}
if(empty($zip)){
    $errors[] = 'Please enter your zip code';
}


if(!empty($errors)){
    $_SESSION['firstName'] = $firstName;
    $_SESSION['lastName'] = $lastName;
    $_SESSION['address'] = $address;
    $_SESSION['city'] = $city;
    $_SESSION['state'] = $state;
    $_SESSION['zip'] = $zip;
    $_SESSION['errors'] = $errors;
    header('Location: checkout.php');
    exit;
}
于 2013-06-06T15:42:00.550 に答える
0

以下のようなものを試してください

$validate_fields_arr = array('firsName', 'lastName', ...)       
$returntourl = false;
foreach($validate_fields_arr as $v){
    if(empty($_POST[$v]))
        $returntourl = true;
}

if($returntourl){
    $return_str  = '<html><title>ERROR!</title><body><h3>ERROR on data submitted!</h3>';
    $return_str .= '<form action="checkout.php" method="post" name="retfrm">';
    foreach($_POST as $k=>$v){
        $return_str .= '<input type="hidden" name="'.$k.'" value="'.$v.'">';
    }
    $return_str .= '</form>';
    $return_str .= '</body><script>document.retfrm.submit()</script></html>';
    echo $return_str;
    exit;
}
于 2013-06-06T15:46:31.110 に答える