3

テキストボックス、ラジオボタン、チェックボックス、選択タグ、テキストエリアなどで構成される25のフィールドを持つ大きなフォームがあるとします。

フォームが送信されたら、それらの値を収集してデータベースに保存するための最良の方法は何でしょうか。ベストプラクティスとは、可能な限り最小限のコード行を使用することを意味します。

従来の方法があります:

$name = $_POST['name'];
$age = $_POST['age'];
$city = $_POST['city'];

これは間違いなく進むべき道ではありません。

次に別の方法があります:

foreach($_POST['submit'] as $key=>$val)
{
 $$key = $val;
}

ただし、これにも巨大なINSERTSQLステートメントが必要になります。

"INSERT INTO tablename (col1, col2, col3, col4,...col25)
 VALUES('$var1', '$var2', '$var3',.....'$var25')"

foreachを使用して値をキャプチャするのは良いことですが、その場合、細長いSQLINSERTステートメントが付属します。INSERTステートメントを使用するためのより良い方法があるはずです。アイデア、提案、批評家はすべて大歓迎です。

ありがとう、ニサール

4

2 に答える 2

0

従来の方法は必要ありません。次extractのような機能を使用できます。

extract($_POST);

これにより、すべてのインデックスが値を持つ変数になります。

つまり、データベースに保存するには、serialize値を保存するか、JSON形式で保存することができます。次に、フォーム全体の値を単一のエントリとしてDBに格納します(リレーショナルがなく、値を格納することだけが目的の場合)。

于 2012-07-23T11:32:14.380 に答える
-1

HTMLでは次のように変更します

<input type="text" name="pval[name]" value="test" />
<input type="city" name="pval[city]" value="Bangalore" />

次にサーバー側で

更新しました :

// Need to have the predefined array which is having valid fields
$fields = array('name', 'city');

$pval = $_POST['pval'];
foreach( $pval as $field_name => $val ){

   if( ! isset($fields[$field_name]) ){ // If it is not a valid field name

      unset($pval[$field_name]);
   }

}

if( count($pval) > 0 ){

$pval = array_map( 'mysql_real_escape_string', $pval );

//Then its easy to write the query as follows

    $qry = "INSERT INTO table_name( ". implode( ',', array_keys( $pval ) ) .") values( '". implode( "','", $pval ) . "')";  
}
于 2012-07-23T11:48:21.737 に答える