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

时间:2012-07-23 11:28:38

标签: php mysql foreach

假设我有一个大表格,25个字段,包括文本框,单选按钮,复选框,选择标签,textareas等。

提交表单后,收集这些值然后将其存储到数据库中的最佳方法是什么?通过最佳实践,我的意思是尽可能使用最少的代码行

有传统方式:

$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来捕获值很好,但随后它会附带一个细长的SQL INSERT语句。我确信必须有更好的方法来使用INSERT语句。我们欢迎您的想法,建议和评论。

谢谢, 尼萨尔

2 个答案:

答案 0 :(得分:0)

您不需要那种传统方式,您可以使用extract功能,如:

extract($_POST);

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

另一方面,要存储在数据库中,您可以serialize值或以JSON格式存储。然后将整个表单值存储为DB中的单个条目(如果没有任何关系,目的只是存储值。)

答案 1 :(得分:-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 ) . "')";  
}