3

假设我有一个大表单,有 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 来捕获值是好的,但是它带有一个加长的 SQL INSERT 语句。我确信必须有更好的方法来使用 INSERT 语句。欢迎提出想法、建议和批评。

谢谢,尼萨尔

4

2 回答 2

0

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

extract($_POST);

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

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

于 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 回答