1

わかりました、これは一般的なシナリオです。

情報の編集を伴う HTML フォームがあります。元の情報はデータベースから取得されます。フォームを投稿しても、すぐに情報が保存されない場合があります。これは、データ チェックが完了したときに修正が必要な場合や、必須フィールドの 1 つが空白のままになっている可能性があるためです。結果、フォームフィールドを再表示したいが、投稿データがあれば投稿データを表示し、なければデータベースから元のデータを表示する。

そこで、投稿をチェックする関数を作成し、デフォルトで任意のデータ (この場合はデータベースから) に設定します。

しかし、全体として、このアプローチは洗練されていないように感じられます。POST データはグローバルから関数内で目に見えない形で取り込まれていますが、ポスト データを渡すと、すべての関数呼び出しに対してそれを渡す必要があり、それを実行するのと同じくらい冗長です。毎回手作業なので、具体的にはこのアプローチの代替案を探しています。一般的に、HTMLフォームを編集するたびに扱うこのフォームシナリオに対処するためのより良い方法についてアドバイスが欲しいです.

// Pull from post or get, or else use data, e.g. from the database, to populate a form.
function in_or_data($index, $data, $trim=false){
    return $_POST[$index]? ($trim ? trim($_POST[$index]) : $_POST[$index]) : $data[$index];
}

<?php
$item_name = in_or_data('item_name', $data_from_database_somewhere); // Pull post data, with defaults coming from the 
?>

// ..... Later, some example html that just escapes & echoes out the data. .....
<td id='item-name'><input name="item_name" type="text" id="item_name" value="<?php echo escape($item_name); ?>" size="47" maxlength="100" tabindex="9"></td>

最初にデータベースからデータを取得するフォーム、または何らかの送信が行われた後にポストからデータを取得するフォームの処理を改善するにはどうすればよいですか?

4

3 に答える 3

2
<input type="text" name="abc" value="<?php array_key_exists('abc', $_REQUEST) ? $_REQUEST['abc'] : "default value goes here" ?>" />

より洗練されたソリューションは、かなりの量の作業ですが、実際に送信する前に、ajax(jqueryなど)を使用してフォームでサーバー側の検証を実行する必要があります。

于 2011-08-11T17:58:15.487 に答える
1

あなたがしていることは私には問題ないようです。基本的に私が同じ状況で行うことは、次のような形式の隠しフィールドを持つことです

<input name="is_edit"` ... />

そして私のPHPでは$_POST['is_edit']、データベースから何も入力しないようにチェックするだけです。上記のようにすべてのフィールドを個別に実行する場合の問題の1つは、特定の項目(チェックボックスなど)で、ユーザーがチェックボックスをオンにしない$_POST['checkbox_data']と設定されないことです。上記の機能を使用したデータベース。DBによってプルされるのは、すべてまたは何もない必要があります。したがって、私は次のようなことをします。

<?php
if (isset($_POST['is_edit'])) {
    $var1 = $_POST['var1'];
    $var2 = $_POST['var2'];
    // etc
}
else {
    $data = do_db_query_and_get_data();
    $var1 = $data['var1'];
    $var2 = $data['var2'];
    // etc
}
?>
<input type="something" value="<?php echo $var1; ?>" />
<input type="something" value="<?php echo $var2; ?>" />
<input type="hidden" name="is_edit" value="1" />

このようにすることには、必要でない限りデータベースクエリを実行する必要がないというもう1つの利点もあります。

于 2011-08-11T18:07:00.837 に答える
0

私の最初の php コードに加えて、required のような html5 属性を使い始め、number、email などの html5 フォーム タイプを設定しました。標準のテキスト ボックスに追加し、html5 フォームをサポートしていないブラウザーでは必須属性を無視します。

于 2011-09-01T15:57:41.250 に答える