2014-07-14 5 views
1

Я генерирую динамическую форму заказа в php на основе различных критериев поиска из данных в базе данных MySQL. Форма заказа представляет собой список позиций и может содержать несколько сотен позиций. Каждая позиция будет иметь следующие данные (имитируемые имена): Строка № ItemID Единицы товара/Цена/единица товара. Помимо приведенных выше данных, извлеченных из базы данных, я добавляю 2 динамических полей: 1. флажок для идентификации элементов на заказ 2. текстового поля для ввода Количества упорядоченногоАнализ массива из динамической формы в скрипт

<?php 
$row=0; 
while($item = mysqli_fetch_array($result)) 
{ 
$row++; 
$id  = "$item[ProductID]"; 
$name  = "$item[Name]"; 
$units  = "$item[PerPack]"; 
$price  = "$item[Price]"; 

echo "<tr> 
    <td align='center'>$row</td> 
    <td align='center'>$id</td> 
    <td>$name</td> 
    <td align='center'>$units</td> 
     <td align='center'>$price</td> 
    <td align='center'><input type=checkbox id=$row name=ReviewID[] value='$id' /></td> 
     <td align='center'><input type=text size=3 maxlength=3 id=$row name=ReviewQty[] /></td> 
    </tr>"; 
    } 
?> 

Порядка форма затем обрабатывается скриптом проверки заказа. После долгих поисков и экспериментов я придумал следующий сценарий.

<?php 
$keys_array = $_POST['ReviewID']; 
$keys_count = count($keys_array); 

$values_array = array_filter($_POST['ReviewQty']); 
$values_count = count($values_array); 

$order_array = array_combine($keys_array, $values_array); 

if($keys_count != $values_count){ 
$status = 'Error'; 
$error_message = "ORDER Quatities Mismatch";} 

// html code omitted 
if($status == 'Error') echo $error_message; 
//html code omitted 
if($keys_count != $values_count) exit(); 
//html code omitted 
    while (list ($key, $val) = each ($order_array)) 
    { 
    echo "<tr> 
      <td align='center'>...</td> 
      <td align='center'>$key</td> 
      <td>...</td> 
      <td>...</td> 
      <td align='center'>...</td> 
      <td align='center'>...</td> 
      <td align='center'>...</td> 
      <td align='center'>$val</td> 
      </tr>"; 
    } 
?> 

Проблема с моим решения заключается в том, что это не проверяет, что каждый установлен флажок имеет соответствующее значение Кол-во в той же строке. Другими словами, если я проверю все 5 полей и введите значения в любые 5 текстовых полей, он пройдет тест.

Мне нужна проверка, которая проверяет флажок в той же строке (строке), что и значение qty. Было бы замечательно, если бы я смог разобрать все данные позиции для выбранного флажка, иначе мне нужно было бы сделать еще один запрос MySQL в сценарии обзора.

У меня возникли проблемы с получением массива с 2 значениями для каждой клавиши. Любая помощь/улучшения будут оценены.

TIA.

ответ

0

FWIW по экспериментам Я обнаружил, что, используя номер строки в качестве ключа, я могу сопоставлять ключи и выполнять перекрестную проверку массивов, которые имеют одинаковые ключи.

<td align='center'><input type=checkbox name=ReviewID[$row] value='$id' /></td> 
<td align='center'><input type=text size=3 maxlength=3 name=ReviewQty[$row] /></td> 

Я также могу проанализировать другие данные с помощью скрытых полей в отдельных массивах еще раз с номером строки в виде ключей.

<td align='center'>$price</td><input type=hidden name=ReviewPrice[$row] value='$price' /> 

Все, что мне нужно сделать сейчас, это ключевые значения ключа, тогда я могу вытащить только те данные, которые мне нужны.

Я по-прежнему интересуюсь любыми лучшими решениями, o/wise Я надеюсь, что кто-то еще найдет это полезным - я знаю, что я действительно изо всех сил пытался добраться до этого момента.

Смежные вопросы