2011-08-06 106 views
0

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

所以,如果我显示的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

这是否有意义吗?

回答

0

像这样的东西应该这样做:

<?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 
?> 
0

使用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” 是List 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).')';