php - 选择框选项以写入数据库中的新行 - MySQL 和 PHP

标签 php html mysql forms select

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

Name, Size, Template

此表单中有两个用于字段'Size' 和'Template' 的选择框。如果用户在选择框中选择了多个选项,我希望表单插入一个新行。

我已经为"template"做到了这一点,但我不知道如何使用 foreach 结构两次,以便在从 Size 字段中选择多个选项时它也插入一个新行.

这是我的代码,用于为多个"template"选择的选项插入新行:

$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

};
}

最佳答案

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 注入(inject)攻击,您应该绝对避免它。而是像这样编写查询:

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

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

关于php - 选择框选项以写入数据库中的新行 - MySQL 和 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40036649/

相关文章:

mysql - 在mysql中将月份名称显示为列名称

php - 如何使用 Laravel 的 @yield 设置 HTML 属性?

jquery - 为什么我的导航栏 ol 比 li 更宽?

html - 使某些表单字段与标签内联

javascript - 如何将按钮的 HTML 包装在一个 div 中?

php - 为什么使用 SQL AVG() 函数时 mysqli_num_rows 总是返回 1?

php - Laravel 路由不起作用,只有根路由起作用

php - 使用 PHP、JS 或 JQuery 生成多页 PDF 订单?

php - mysql 撤消查询或函数

php - Symfony 2 - 在 Id 之后向 Symfony 中的现有实体添加一列