我有一个奇怪的问题。我有一个用于多种表单的 PHP 脚本。它接收所有请求,然后将数据放入数据库中的适当表中。就目前而言,它看起来像这样:
$fields = "";
$values = "";
foreach ($_REQUEST as $key=>$value)
{
$key = str_replace(":","",$key);
$fields .= "$key,";
$values .= "'$value ',";
}
//remove the ending comma from $fields and $values
$fields = substr($fields, 0, -1);
$values = substr($values, 0, -1);
$sql = "INSERT INTO " . $survey . " ($fields) VALUES ($values)";
mysql_query($sql)
or die(mysql_error());
这很好用。问题是,有些表格带有复选框(即一个人可以选择多个选项)。如果我使用 get 方法,查询字符串将如下所示:
www.somesite.php?V9=1&V9=2&V9=4
使用当前脚本,只取 4,因为它是最后一个值。
现在,我知道发生这种情况的一个原因是因为复选框名称在表单中的定义方式。它说 name="V9" 而不是 name="V9[]" 但是,我无法更改表格。它们是由软件生成的,其想法是任何用户都可以创建一个 HTML 表单,将其指向脚本,它们的信息将记录在一个表格中。因此,更改 HTML 不是我的选择。
因此,我需要一种方法来检测是否已提交密钥,如果已提交,则附加该值。我试过这个:
$fields = "";
$values = "";
foreach ($_REQUEST as $key=>$value)
{
//check to see if the key has already been used for multi-choice questions
$key_check = strpos($fields, "$key,");
if($key_check !== false){
$values = substr($values, 0, -2);
$values .= "\;$value ',";
}else{
$key = str_replace(":","",$key);
$fields .= "$key,";
$values .= "'$value ',";
}
}
//remove the ending comma from $fields and $values
$fields = substr($fields, 0, -1);
$values = substr($values, 0, -1);
$sql = "INSERT INTO " . $survey . " ($fields) VALUES ($values)";
mysql_query($sql)
or die(mysql_error());
但我得到相同的结果。$key_check 似乎永远不会有效。任何帮助,将不胜感激。这里有人有一个工作的 ASP 版本,它做类似的事情,但它通过电子邮件发送数据,而不是将其保存在数据库中。