【问题标题】:Select box options to write to new row in database - MySQL and PHP选择框选项以写入数据库中的新行 - MySQL 和 PHP
【发布时间】:2017-02-23 12:01:58
【问题描述】:

我有一个当前包含以下字段的表单:

Name, Size, Template

此表单中有两个选择框用于字段“尺寸”和“模板”。如果用户在选择框中选择了多个选项,我希望表单插入新行。

我已设法为“模板”执行此操作,但我无法弄清楚如何两次使用 foreach 构造,以便在从 Size 字段中选择多个选项时插入新行.

这是我的代码,可用于为多个“模板”选定选项插入新行:

$template = $_POST['Template'];
$size = $_POST['Size'];

foreach( $template as $temp ) {

  switch( $temp ) {
 case '1':
   $template;
 break;
 case '2':
   $template;
 break;
 case '3':
   $template;
 break;
  case '4':
   $template;
 break;
 };

 $query = "INSERT INTO tbl (Name,Size,Template) VALUES('$name', '$size', '$temp')";
 }

有没有办法使用这个 foreach 语句两次但运行相同的查询。

例如,我正在考虑做

foreach( $size as $newsize) {
switch( $newsize ) {

//cases go here

};
}

【问题讨论】:

  • 如果case '1':$template = "1"; 为什么?如果条件和值与您不直接使用的相同? $template
  • 那么一个名字可以搭配多种尺寸和模板?但是尺寸的数量可能与模板的数量不同?
  • 请注意,您当前的查询将 4 个值插入到 3 列中,因此当您说“它有效”时,您并没有说实话,而且您非常容易受到 SQL 注入攻击。
  • @Strawberry ID 是一个自动增量字段。
  • 不符合您的查询

标签: php html mysql forms select


【解决方案1】:

for 循环更适合您想要实现的目标:

for($i=0; $i<count($size); $i++)
{
    for($j=0; $j<count($template); $j++)
    {
        $currentSize = $template[$i];
        $currentTemplate = $template[$j];
        $query = "INSERT INTO tbl (Name, Size, Template) VALUES('$name', '$currentSize', '$currentTemplate')";
    }
}

警告:我只是以与您演示其余代码相同的方式编写查询。该查询实际上容易受到 SQL 注入攻击,您应该绝对避免它。而是像这样编写查询:

$query = "INSERT INTO tbl (Name, Size, Template) VALUES(?,?,?)";

问号是占位符。您需要准备此语句,然后在执行前将$name$currentTemplate$currentSize 绑定到它们。检查this 以获取有关准备好的语句的更多信息。由于您需要使用不同的数据多次执行相同的查询,因此您还有一个理由使用预准备语句。我强烈建议您查看上面链接中文档的 Example#3

【讨论】:

  • 您好,此代码未按预期工作。我选择了 3 个大小选项和 3 个模板选项,但是 sql 只在 3 行中执行了一个模板.. 并且根本没有写入大小字段。
  • @Zayn 试试 var_dump($query)。你应该得到 9 个查询。如果缺少大小,则代码的另一部分有问题
  • 不幸的是,它只给了我 3 个结果。代码在其他地方看起来很好。
  • @Zayn 所以它只打印你 3 个查询?在第一个循环之前包含这两个语句:var_dump($size);var_dump($template);。在 cmets 中发布结果。
  • NULL 数组(3) { [0]=> 字符串(1) "1" [1]=> 字符串(1) "2" [2]=> 字符串(1) "3" } NULL 数组(3){ [0]=> 字符串(1)“1”[1]=> 字符串(1)“2”[2]=> 字符串(1)“3”} NULL 数组(3){ [0]=> 字符串(1)“1” [1]=> 字符串(1)“2” [2]=> 字符串(1)“3” }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多