PHP в MySql Form обрабатывает несколько флажков выбора - PullRequest
1 голос
/ 06 августа 2011

Я не знаю, как структурировать запросы 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

Имеет ли это смысл?

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Используйте 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" - это идентификатор списка.

При отправке, со значениями, указанными в вашем вопросе, вы получите:

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

Итак, чтобы создать массив, подобный тому, который вы упомянули в ОП:

$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 ).' )';
1 голос
/ 06 августа 2011

Что-то вроде этого должно сделать это:

<?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
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...