2010-04-10 91 views
2

我已经给出了设计具有mysql后端的自定义表单管理器的任务。通过变量后变量循环并将它们添加到数据库中

设置所有前端后,现在遇到的问题是如何处理动态表单。

对于E.G

形成一个可以包含6个领域都具有不同的名字在输入标签属性。 表单2可以包含输入标签中具有不同名称属性的20个字段。

我将如何处理表单而不用占用资源。

最终答案

基于由阿尔达·僖

function processForm($form_id) { 

    $rows = ""; 
    $values = ""; 

    foreach($_POST as $key => $value) { 

     $rows = mysql_real_escape_string($key); 
     $values = mysql_real_escape_string($value); 
     $entry .= "[".$rows . "::".$values."]"; 

    } 
    // clean up the array 


    $entry = preg_replace('/^\[|\d+|\:\:\]/', '', $entry); 

    $query = mysql_query("INSERT INTO `forms_form_data` (`id`, `form_id`, `entry`, `manager_id`, `status`, `created_at`) VALUES (NULL, '".$form_id."', '".$entry."', '".$_SESSION['manager_id']."', '0', NOW())"); 

} 
+0

我在看你使用的正则表达式,我不知道它是否会做你想做的。它会删除[如果字符串以它开头,删除所有数字或只删除'::]'。是对的吗? – 2010-04-10 17:28:13

回答

3

接受的答案字面上的唯一方法是使用一个循环。如果你想尽可能少用资源,你可以连接它们。

$columns = ""; 
$values = ""; 
foreach($_POST as $key => $value) { 
    $columns .= "`" . mysql_real_escape_string($key) . "`, "; 
    $values .= "`" . mysql_real_escape_string($value) . "`, "; 
} 
$columns = substr($columns, 0, -2); 
$values = substr($values, 0, -2); 
$query = "INSERT INTO `table` (".$colums.") VALUES (".$values.")"; 

这将为表单中的所有值创建一个查询。

+0

看起来不错,但我忘了提及每个帖子的价值将只会进入目标表中的一个字段。我将如何将这个纳入你所说的:) – 2010-04-10 13:45:32

+0

所以你想整个表单到一个领域?像逗号分隔的值? – 2010-04-10 14:00:41

+0

本质上,没有那么多的CSV,因为我有我自己的格式,但通过表单提交的所有信息将进入表'forms_form_data'行'条目' – 2010-04-10 14:08:41

1

为什么不按原样存储$ _POST的序列化值?当然逃避它使数据库安全。像:

$value=serialize($_POST); 
相关问题