在将表单保存到数据库并进行内爆方面遇到了一个小问题。问题如下:
我有一个包含多个字段的表单,包括复选框,其中包含一组值。如果我将整个表单发送到我的php脚本,它会删除复选框值并检查最后一个,所以问题是,我只获取数据库中的最后一个检查值而不是所有选中的值。
所以我做了一些调试,我发现了问题,就在这一行:
$values = "'" . implode("', '", $_POST) . "'";
遗憾的是,这剥夺了我的数据。
编辑:
这是我的PHP脚本:
$hoeveelheidvalues = count($_POST);
$values = "'" . implode("', '", $_POST) . "'";
$queryvoorderesperform = "INSERT INTO `app_res_per_form` (";
for($i = 1; $i <= $hoeveelheidvalues; $i++)
{
if($i==$hoeveelheidvalues)
{
$queryvoorderesperform .= "vraag$i";
}
else{
$queryvoorderesperform .= "vraag$i, ";
}
}
$queryvoorderesperform .= ") VALUES ($values)";
编辑2:
如果我使用序列化,我会得到一个非常奇怪的字符串。这是$ queryvoorderespform:
INSERT INTO `app_res_per_form` (vraag1, vraag2, vraag3, vraag4, vraag5, vraag6, vraag7, vraag8, vraag9, vraag10, vraag11, vraag12)
VALUES (a:12:{s:16:"multipleradios-0";s:11:"Orientation";s:11:"textinput-0";s:0:"";s:20:"multiplecheckboxes-0";s:9:"Recycling";s:11:"textinput-1";s:0:"";s:10:"interestin";s:15:"Diverter Valves";s:12:"rotaryvalves";s:7:"AL, AXL";s:14:"divertervalves";s:3:"PTD";s:15:"othercomponents";s:3:"DUC";s:11:"textinput-3";s:0:"";s:16:"multipleradios-1";s:18:"Systems Integrator";s:16:"multipleradios-2";s:38:"Will buy product in long time (1 year)";s:15:"standcrewmember";s:13:"Aap";})
答案 0 :(得分:2)
您可以使用serialize()
,它的PHP函数将数组或对象转换为字符串,然后使用unserialize();
$ values = serialize($ _ POST);
或者更好仍然使用
将$ _POST的内容保存为JSON$values = json_encode($_POST);
使用
重新水合成数组或对象$var = json_decode($x);
这些可用于PHP数组或PHP对象。
现在好了,我看到你实际上想要做什么所以试试这个: -
$fields = '';
$values = '';
$count = 0;
foreach ( $_POST as $idx => $val ) {
// I assume you are skipping occurance 0 for a reason
if ( $count == 0 ) {
$count++;
continue;
}
$fields .= sprintf('vraag%d,', $count );
$values .= sprintf("'%s',", $val );
$count++;
}
//trim off trailing commas
rtrim($fields, ',');
rtrim($values, ',');
$sql = sprintf('INSERT INTO `app_res_per_form` (%s) VALUES (%s)',
$fields, $values);
}
哦,我假设你正在使用MYSQL_扩展!有人会告诉你不要切换到MYSQLI_或PDO。所以它也可能是我。