php - 如果已提交 key ,则附加值(表单中的复选框) PHP

标签 php mysql

我有一个奇怪的问题。我有一个用于多种表单的 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 对我来说不是一个选择。

所以,我需要一种方法来检测 key 是否已提交,如果是,则追加该值。我试过这个:

    $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 版本,可以做类似的事情,但它通过电子邮件发送数据,而不是将其保存在数据库中。

最佳答案

如果您使用 $_GET,可以尝试此操作:

function convertInput($qs=""){
  $rtn = "";
  $holdingArray = array();
  if(trim($qs)!=""){
    $vars = explode("&", $qs);
    foreach($vars as $val){
      $kv = explode("=", $val);
      if(count($kv)==2){
        if(isset($holdingArray[$kv[0]])){
          $holdingArray[$kv[0]] .= "," . $kv[1];
        }else{
          $holdingArray[$kv[0]] = $kv[1];
        }
      }
    }
    $rtn = $holdingArray;
  }
  return $rtn;
}
print_r(convertInput($_SERVER["QUERY_STRING"]));

关于php - 如果已提交 key ,则附加值(表单中的复选框) PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10450042/

相关文章:

mysql - SQL查询返回第一行,并且只返回满足条件的第一行

php - 从 PHP 更新查询不起作用

php - 使用jquery加载xml文件,编辑它,然后使用php再次保存到服务器

mysql - 优化 mySql 以更快地改变表添加列

mysql - 我想获得每个类别中访问量最大的文章(4 个类别)

mysql - 在 MariaDB/MySQL 中何时不使用 <=> 而不是 =?

php - 在 PHP 中使用 strtotime() 和在 MySQL 中使用 UNIX_TIMESTAMP() 时的不同时间戳

php - 如何阻止内容在固定标题下滚动?

php - 提交日期范围之间的日期 - mySQL

php - 函数内 fetch_assoc 发生 fatal error