假设我有一个大表格,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语句。我们欢迎您的想法,建议和评论。
谢谢, 尼萨尔
答案 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 ) . "')";
}