假设我有一个大表单,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 ) . "')";
}