Intereting Posts

Как установить флажок с несколькими массивами с форматами html

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

В этом примере я представляю массив чисел с массивом delete[] , этот массив обрабатывается должным образом, я также хочу представить condition[] массива condition[] это не обрабатывается должным образом, что является лучшим способом решить эту проблему?

PHP-код

 $catalog = $database->getInventory(); if($catalog){ $numRows = sizeof($catalog);//count echo "<b>Book Count:</b> ".$numRows."<br>"; echo "<form method='post' action='inventory.php'>"; echo "<table id='example' class='tablesorter' border='0' cellpadding='0' cellspacing='1'>"; echo " <thead> <tr> <th>ISBN</th> <th>Title&nbsp;&nbsp;&nbsp;</th> <th>Rank&nbsp;&nbsp;</th> <th>Condition&nbsp;&nbsp;</th> <th><input type='checkbox' name='delete' value='all' /></th> </tr> </thead>\n"; foreach($catalog as $elem){ echo " <tr> <td>".$elem["isbn"]."</td> <td>".$elem["title"]."</td> <td>".$elem["rank"]."</td> <td>".$elem["condition"]."</td> <td> <input type='checkbox' name='add[]' value='".$elem['isbn']."_".$elem['condition']."_"."' /> </td> </tr>"; } echo "</table>"; echo "</form>"; } 

пример html-разметки

 <form method='post' action='inventory.php'> <table> <tr> <td> <input type='hidden' name='addInventoryBook' value='1'> <input type='submit' value='Add' /> </td> </tr> <tr> <td> <input type='checkbox' name='add[]' value='100001_used' /> </td> </tr> <tr> <td> <input type='checkbox' name='add[]' value='100001_new' /> </td> </tr> <tr> <td> <input type='checkbox' name='add[]' value='100003_new' /> </td> </tr> </table> </form> 

функция php

 function Inventory(){ if(isset($_POST['addInventoryBook'])){ if(isset($_POST['add']) && is_array($_POST['add'])){ $arr = array(); foreach($_POST['add'] as $checkbox){ $temp = explode("_", $checkbox); $arr[] = array( "isbn" => $temp[0], "condition" => $temp[1], "sub_condition" => $temp[2] ); } $this->addInventoryBook($arr); } else{ echo "No values have been set"; } } function addInventoryBook($arr){ foreach($arr as $elem){ //if used get sub-category if($elem['condition']=='used'){ echo $elem['isbn']."-".ucfirst($elem['condition']) .ucfirst($elem['sub_condition'])."<br>"; } else if($elem['condition']=='new'){ echo $elem['isbn']."-".ucfirst($elem['condition'])."<br>"; } } } 

Все, что я хочу, это в основном передать два массива в мой php-скрипт

токовый выход

 100001 100002 100003 

желаемый выход

 100001 good 100002 new 100003 new 

Solutions Collecting From Web of "Как установить флажок с несколькими массивами с форматами html"

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

Решение этого на самом деле относительно просто – вам просто нужно указать ключи для массива condition чтобы снова совместить значения. Что-то вроде этого:

HTML:

  <tr> <td> <input type='hidden' name='condition[100001]' value='good' /> <input type='checkbox' name='delete[]' value='100001' /> </td> </tr> <tr> <td> <input type='hidden' name='condition[100002]' value='new' /> <input type='checkbox' name='delete[]' value='100002' /> </td> </tr> 

PHP:

 foreach ($_POST['delete'] as $delete) { $condition = $_POST['condition'][$delete]; // Do stuff } 

Это связывает значения в массиве $_POST['condition'] массивом $_POST['delete'] чтобы все снова совпало.

РЕДАКТИРОВАТЬ

Способ создания ключей выше невелик, и в ретроспективе это неправильный способ сделать это.

Чтобы продемонстрировать правильный способ сделать это, давайте представим себе, что у нас есть следующий массив, красивый и простой:

 $books = array( 10001 => 'good', 10002 => 'new', 10003 => 'new', 10004 => 'good' ); 

Нам нужно связать два входа, которые связаны с каждой книгой, а это значит, что нам нужен набор пар ключ / значение, которые можно сопоставить. Для меня это похоже на массив. Но в отличие от приведенного выше примера, ключи должны быть неактуальны для данных – им ничего не нужно значит, потому что все, что мы хотим, это данные.

Нам нужно четко указать каждый отдельный ключ (не массировать массив в стиле стека) и сделать ключи агностиками данных, к которым они относятся.

Мы можем сделать это:

 $i = 0; foreach ($books as $isbn => $condition) { echo " <tr> <td> <input type='hidden' name='condition[$i]' value='$condition' /> <input type='checkbox' name='delete[$i]' value='$isbn' /> </td> </tr> "; $i++; } 

… и затем, когда форма отправлена, мы можем сделать это:

 // We still base our code on $_POST['delete'] - because this is the array that // depends on the user input. This time, though, we'll look at the keys as well foreach ($_POST['delete'] as $key => $isbn) { $condition = $_POST['condition'][$key]; // Do stuff } 

Вам нужно будет найти творческий способ передать несколько скрытых полей в виде массива обработчику PHP или изменить способ сбора этих данных. Кажется, что это «сериализованный» массив.

Этот ответ StackOverflow действительно описывает, что вы можете сделать, и должен по-прежнему соответствовать поведению вашего сценария. Удачи!

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

Попробуйте это …

Это объединит информацию для чисел и условий, а затем разделит их на бэкэнд для обработки. Таким образом, информация передается одновременно.

 <tr> <td> <input type='checkbox' name='delete[]' value='100001-good' /> </td> </tr> <tr> <td> <input type='checkbox' name='delete[]' value='100002-new' /> </td> </tr> <tr> <td> <input type='checkbox' name='delete[]' value='100003-new' /> </td> </tr> <?php if(isset($_POST['deleteInventoryBook'])){ if(isset($_POST['delete']) && is_array($_POST['delete'])){ foreach($_POST['delete'] as $checkbox){ $checkbox = explode('-', $checkbox); echo $checkbox[1]; echo '<br />'; echo $checkbox[0]; echo '<br />'; } }else{ echo "No values have been set"; } } ?> 

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