Я новичок в PHP, и я создаю html-форму, состоящую в основном из двух вариантов: во-первых, клиент выбирает серию флажков (частей из оборудования), а затем записывает количество каждого выбранного флажка …
<td><input id="11.11.015.0002" name="pecas[]" type="checkbox" value="11.11.015.0002 - BATERIA CHUMBO ACIDO 6V/4AH" /></td> <td><input name="qntd[]" size="7" type="text" /></td>
и в php:
if(isset($pecas)) { $mensagem .= "Peças Selecionadas:<br /><br />"; } else { echo "<script>alert('Selecione as Peças Desejadas!'); location.href='http://www.lyuz.com.br/pecas/erro';</script>"; exit; } foreach ($pecas as $pecas_s) { } $mensagem .= " - ".$pecas_s."<br />";
Это дало мне все выбранные флажки (части), теперь я пытаюсь получить только input_text (суммы), связанные с этими выбранными флажками.
Я застрял. Помогите.
Укажите ключ в имени каждого элемента. Используйте число и просто убедитесь, что pecas[1]
соответствует qntd[1]
. Затем, когда вы перебираете один из массивов, ключи будут одинаковыми в другом массиве. Например:
<?php $count = 0; foreach($itemList as $item){ echo "<tr>\n"; echo " <td><input type='checkbox' id='{$item['id']}' name='pecas[{$count}]'></td>\n"; echo " <td><input type='test' id='{$item['id']}' name='qntd[{$count}]'></td>\n"; echo "</tr>\n"; $count++; }
Если есть 3 флажка и количество ящиков, и позволяет сказать, что отмечены 1-й и 3-й боксы, но не 2-й. Ваш массив сообщений будет выглядеть так:
array( 'pecas'=> array( 0 => 'some value', //notice, no 1 key because the second checkbox was not checked. 2 => 'some other value' ), 'qntd' => array( 0 => 'some qntd', 1 => '' //1 was not checked, so nothing should have been entered in the second textbox. 2 => 'some other qntd' ) );
Клавиши 0
(первый флажок) и 2
(третий) будут существовать в массиве «pecas» и будут соответствовать клавишам 0
и 2
в массиве «qntd». Затем вы можете перебрать данные, например:
//check that at least one checkbox was checked if(!empty($_POST['pecas'])){ //loop over the checkboxes getting key ($k) and value ($v). foreach($_POST['pecas'] as $k=>$v){ //display a message echo "Pecas {$v} ({$k}) was checked with a qntd of {$_POST['qntd'][$k]}<br>"; } }
+ Изменить
foreach ($pecas as $pecas_s) { $mensagem .= " - ".$pecas_s."<br />"; }
в
for($x = 0; $x < count($pecas); ++$x) { $mensagem .= " - ".$pecas[$x]. ": " . $qntd[$x] . "<br />"; //Example }
Поскольку кажется, что для каждого $ pecas существует $ qntd, вам просто нужно получить расположение индекса $ pecas и захватить то же самое местоположение индекса в $ qntd
–
Позвольте мне добавить, однако, что флажки только передаются, если они проверены, поля ввода будут ВСЕГДА пройдены. Таким образом, у вас может быть несоответствие, когда индексы не выравниваются! Возможно, вы захотите использовать некоторый javascript для отключения поля ввода, если его флажок не выбран.
Ну, мне удается решить это с помощью @Jonathan Kuhn с небольшим разным подходом.
В HTML-форме я дал индексы в каждом элементе,
<td><input id="11.11.015.0002" name="pecas[1]" type="checkbox" value="11.11.015.0002 - BATERIA CHUMBO ACIDO 6V/4AH" /></td> <td><input name="qntd[1]" size="7" type="text" /></td>
И в файле PHP я заменяю
foreach ($pecas as $pecas_s) { $mensagem .= " - ".$pecas_s."<br />"; }
в
array('pecas'=> array(), 'qntd' => array()); if(!empty($_POST['pecas'])) { foreach($_POST['pecas'] as $k=>$v) { $mensagem .= "- {$v} - QUANT.: {$_POST['qntd'][$k]}<br>"; } }
И, наконец, моя почта возвращает значение каждого текстового поля, когда флажок установлен! \ О /