最佳实践:将大型表单值存储到数据库中


Best Practice : Store Large Form Values into Database

假设我有一个大表单,25个字段由文本框、单选按钮、复选框、选择标签、文本区域等组成。

一旦提交了表单,收集这些值并将其存储到数据库中的最佳方式是什么;我所说的最佳实践是指使用尽可能少的代码行。

有一种传统的方式:

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

这绝对不是要走的路

然后还有另一种方法:

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

但这需要一个巨大的INSERT SQL语句:

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

使用foreach捕获值是很好的,但它附带了一个细长的SQLINSERT语句。我相信肯定有更好的方法来使用INSERT语句。欢迎各种想法、建议和批评。

谢谢,Nisar

您不需要传统的方式,您可以使用extract函数,如:

extract($_POST);

这将使所有索引都成为具有值的变量。

换句话说,要存储在数据库中,您可以使用serialize值或以JSON格式存储。然后将整个表单值作为单个条目存储在DB中(如果没有任何关系,并且目的只是存储值)

在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 ) . "')";  
}