【问题标题】:PHP to MySql Form process multiple select checkboxesPHP to MySql Form 处理多选复选框
【发布时间】:2011-10-21 11:13:13
【问题描述】:

我不知道如何构建 PHP/MySQL 查询来完成此任务。我正在尝试将项目添加到列表中。我有一个表格,其中列出了带有多个复选框表格的所有项目。对于检查的每个项目,我需要它在 MYSQL 表中创建一个新条目。该表具有三个字段,entry_id、list_id 和 item_id。

所以,如果我显示 5 个项目的列表

列表 #1

  • 项目 1
  • 第 2 项
  • 项目 3
  • 第 4 项
  • 第 5 项

并选择了 3

列表 #1

  • 项目 1
  • 项目 2*
  • 项目 3*
  • 第 4 项
  • 项目 5*

我需要 php/mysql 代码,它将这些值插入到表中,如下所示:

  • entry_id / list_id / item_id
  • 1 / 1 / 2
  • 2 / 1 / 3
  • 3 / 1 / 5

这有意义吗?

【问题讨论】:

    标签: php mysql forms


    【解决方案1】:

    应该这样做:

    <?php
      // get array of selected elements
      $selections = $_POST['selections'];
      $list = intval($_POST['list_id'], 10);
      // prevent sql injection
      $selections = array_map(function ($el) {
        return intval($el, 10);
      }, $selections);
      // create tuples
      $selections = array_map(function ($el) use ($list) {
        return '(' . $list . ', ' . $el . ')';
      }, $selections);
      // create a comma sperated list of tuples
      $selections = implode(', ', $selections);
      $sql = 'INSERT INTO table (list_id, item_id) VALUES ' . $selections . ';';
    
      // run $sql through the driver of your choice
    ?>
    

    【讨论】:

      【解决方案2】:

      使用 HTML 如下:

      <strong>List Number 1</strong>
      <ul>
      <li><label><input type="checkbox" name="checked[1][]" value="1">Value 1</label></li>
      <li><label><input type="checkbox" name="checked[1][]" value="2">Value 2</label></li>
      <li><label><input type="checkbox" name="checked[1][]" value="3">Value 3</label></li>
      <li><label><input type="checkbox" name="checked[1][]" value="4">Value 4</label></li>
      <li><label><input type="checkbox" name="checked[1][]" value="5">Value 5</label></li>
      </ul>
      
      <strong>List Number 2</strong>
      <ul>
      <li><label><input type="checkbox" name="checked[2][]" value="1">Value 1</label></li>
      <li><label><input type="checkbox" name="checked[2][]" value="2">Value 2</label></li>
      <li><label><input type="checkbox" name="checked[2][]" value="3">Value 3</label></li>
      <li><label><input type="checkbox" name="checked[2][]" value="4">Value 4</label></li>
      <li><label><input type="checkbox" name="checked[2][]" value="5">Value 5</label></li>
      </ul>
      

      name 参数的格式为checked[X][],其中“X”是列表 ID。

      提交后,使用您问题中提到的值,您将获得:

      array(1) {
        [1]=>
        array(3) {
          [0]=>
          string(1) "2"
          [1]=>
          string(1) "3"
          [2]=>
          string(1) "5"
        }
      }
      

      所以要生成一个像您在 OP 中提到的那样的数组:

      $sqlValues = array();
      foreach( $_POST['checked'] as $list_id => $values ){
        foreach( $values as $k => $v ){
          $sqlValues[] = ( $k+1 ).' , '.(int) $list_id.' , ' .(int) $v;
        }
      }
      $sqlCmd = 'INSERT INTO `yourTable` ( `entry_id` , `list_id` , `item_id` )
                 VALUES ( '.implode( ' ) , ( ' , $sqlValues ).' )';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        • 1970-01-01
        • 2010-11-01
        • 2013-09-01
        • 1970-01-01
        • 2021-10-13
        相关资源
        最近更新 更多