2011-08-06 54 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).')';