3

約 70 の入力フィールドを持つ大きなフォームがあり、フォームには追加の入力フィールドを作成できるボタンがあります。私の問題は、データベースの挿入エラーなど、フォームの送信時にサーバーで何か問題が発生した場合、これらの入力フィールドとその値をどのように保持するかです。動的検証を行っていますが、送信時に問題が発生した場合はどうなりますか?

4

4 に答える 4

5

多くのオプションがあります。

  1. ajax を使用してフォームを投稿し、成功した場合は新しいページにリダイレクトし、そうでない場合はユーザーに警告することができます (最も簡単です!)。
  2. post 変数からサーバー側で from を再作成できます (複雑なフォームではより困難です)。
  3. サーバーは失敗時にフォームの値を送り返すことができ、JS を記述してフォームを再作成できます (フォームを管理するための JS が既にある場合は簡単かもしれません)。
  4. フォームの値とともにフォームの実際の HTML を渡し、サーバーにそれを使用してフォームを再作成させることができます (一般的に最適なオプションではなく、接続方法によっては JS イベントが失われる可能性があります)。

あまり役に立たないオプションが他にもたくさんあります。私は#1をお勧めします。

于 2013-01-01T20:06:12.320 に答える
1

本当に簡単な解決策の場合:

値をオブジェクトに格納し、確認済みの DB 挿入を取得してからクリアすることができます。挿入が失敗した場合は、数回再試行できます。何度も失敗した場合は、値を CSV ログ ファイルに書き込んで手動で処理できます。

より複雑なソリューション

列。Zend Jobserver、RabbitMQ、または Gearman を使用して、すべての挿入リクエストをジョブ キューに入れます。次に、ワーカー プロセスを作成して、キューの反対側で挿入を実行します。これにより、失敗したジョブを再実行/再試行できます。

于 2013-01-01T20:04:36.823 に答える
0

1 ページにこれほど多くのフィールドがあるのはなぜですか? 私はこれを行うことを再考します。いずれにせよ、サーバー側の検証があり、失敗した場合は、サーバーに送信された投稿値に基づいて各フィールドがデフォルト値を使用するようにページを設定できます...だから、それらを同じページに送り返すだけです入力フィールドの値をポストの値に設定します。

ここに例があります。

$username = array(
                            'name'        => 'username',
                            'id'          => 'username',
                            'maxlength'   => '255',
                            'size'        => '28',
                            'title'             => 'username is required.',
                            'class'       => 'form-text required',
                            'value' => $this->input->post('username'),
                          );
<?php echo form_input($username); ?>
于 2013-01-01T20:07:26.723 に答える
0

フォームの値をセッションに保存するために使用できるいくつかの関数を次に示します。

    //save form inputs
    function Hold_Form_Input()
        {
        $FormPost = array();
            foreach ($_POST as $key => $entry)
                {
                    $FormPost[''.$key.'']= $entry;
                }
         $_SESSION['post_form']= $FormPost;           
        }
    //Clear form values upon success
     function Clear_Form_Input()
        {
           if (isset($_SESSION['post_form']))
               {
                   unset($_SESSION['post_form']);
                 return true;
                }
           return false;
        }

//Reprint form values as needed
    function Keep_on_error($fieldname)
        {
            if(isset($_SESSION['post_form']) && strlen($_SESSION['post_form'][$fieldname]) > 0)
                {
                    $fill = $_SESSION['post_form'][$fieldname];
                    return $fill;
                }
            return false;
        }
于 2013-01-01T20:12:45.393 に答える