Я пытаюсь использовать форму с php.
Я заполняю информацию о форме из базы данных.
Ввод формы разделяется на строки.
Форма предлагает флажок, чтобы пропускать только эту строку данных, а то, что должно произойти, – это когда я анализирую данные в документе синтаксического анализа формы, я получаю только проверенные строки.
Однако то, что происходит, заключается в том, что метод $ _POST для блока checkbox возвращает только то, что проверено, но все остальные массивы ввода все еще содержат все строки, даже те, которые не отмечены.
<?php while($row = mysql_fetch_assoc($query)){ $id = $row["id"]; $email = $row["user_email"]; $androidId = $row["user_androidid"]; $amount = $row["amount"]; echo "<tr> <td><input id='data_id' name='data_id[]' size='25' value='".$id."'/></td> <td><input id='mail' name='mail[]'size='25' value='".$email."'/></td> <td><input id='androidId' name='androidId[]' size='25' value='".$androidId."'/></td> <td><input id='amount' name='amount[]' size='25' value='".$amount."'/></td> <td>coming soon...</td> <td><input id='currency' name='currencyCode[]' size='25' value='USD'/></td> <td><input type='checkbox' name='chosen[]' value='".$id."'<td> </tr>"; } ?>
И я тестирую это так:
for($i=0; $i<count($_POST["chosen"]); $i++){ echo $_POST["chosen"][$i]; } for($i=0; $i<count($_POST["mail"]); $i++){ echo $_POST["mail"][$i]; }
Для конкретного примера прямо сейчас у меня три строки, я «проверяю» первое и последнее.
Когда я разбираю данные формы, ячейка checkbox возвращает значения только для первого и последнего, но если я пытаюсь разобрать почту [], у нее есть все значения для строк 1, 2 и 3.
Любые идеи о том, как правильно настроить это? Я уверен, что что-то не так со структурой, просто ищет подтверждение.
Попробуйте связать входные массивы вместе, предоставив им один и тот же ключ, в этом случае $id
–
while($row = mysql_fetch_assoc($query)){ $id = $row["id"]; $email = $row["user_email"]; $androidId = $row["user_androidid"]; $amount = $row["amount"]; echo "<tr> <td><input id='data_id' name='data_id[".$id."]' size='25' value='".$id."'/></td> <td><input id='mail' name='mail[".$id."]'size='25' value='".$email."'/></td> <td><input id='androidId' name='androidId[".$id."]' size='25' value='".$androidId."'/></td> <td><input id='amount' name='amount[".$id."]' size='25' value='".$amount."'/></td> <td>coming soon...</td> <td><input id='currency' name='currencyCode[".$id."]' size='25' value='USD'/></td> <td><input type='checkbox' name='chosen[".$id."]' value='".$id."'/><td> </tr>"; }
Затем на почте вы можете получить только те массивы, которые были проверены –
foreach($_POST["chosen"] as $key=>$value){ echo $_POST["data_id"][$key]; echo $_POST["mail"][$key]; echo $_POST["androidId"][$key]; echo $_POST["amount"][$key]; echo $_POST["currencyCode"][$key]; echo $_POST["chosen"][$key]; }
Возможно, это лучшая структура, таким образом, у вас будет массив значений с ключом id, а также массив выбранных значений, в котором хранятся выбранные ключи. Проверьте также html-ошибки, которые у вас есть как <td><input type='checkbox' name='chosen[]' value='".$id."'<td>
echo "<tr> <td><input id='data_id' name='".$id."[data_id]' size='25' value='".$id."'/></td> <td><input id='mail' name='".$id."[mail]' size='25' value='".$email."'/></td> <td><input id='androidId' name='".$id."[androidId]' size='25' value='".$androidId."'/></td> <td><input id='amount' name='".$id."[amount]' size='25' value='".$amount."'/></td> <td>coming soon...</td> <td><input id='currency' name='".$id."[currency]' size='25' value='USD'/></td> <td><input type='checkbox' name='chosen[]' value='".$id."'/></td> </tr>";
Теперь PHP для тестирования:
if ( !empty($_POST['chosen']) ) { foreach ( $_POST['chosen'] as $value ) { print_r( $_POST[$value] ); } }
Я предлагаю вам сделать var_dump ($ _ POST) и посмотреть, что вы получаете в целом, потому что меня поражает (если только я не понял), что вы получаете информацию (и только ту информацию) для строки с отмеченным флажком. Для начала, если вы не укажете «тип» в своем типе ввода, тип по умолчанию будет иметь «текст». Это означает, что вы можете редактировать все, что находится в этом текстовом поле, так что, когда вы нажимаете кнопку отправки (независимо от того, установлен ли вы один из этих флажков или нет ), все значения внутри каждого текстового поля будут отправлены.
Существует несколько способов делать то, что вам нужно (обрабатывать только информацию, относящуюся к строке с отмеченным флажком).
Справка по Javascript:
Плюсы этого в том, что ТОЛЬКО информация, связанная с отмеченным флажком, будет отправлена, и вам не придется беспокоиться о фильтрации на сервере.
Косн, если вы не привыкли к javascript, это явно не помогает.
Сторона сервера PHP:
Я только что видел ответ Шона, и он хороший, вы могли бы это сделать, если бы хотели проверить на сервере. Просто позвольте мне предупредить вас, хотя пользователь может редактировать ваши данные текстового поля, например, оставить его пустым или добавить то, что ему заблагорассудится, и когда он его отправит, и вы попытаетесь получить к нему доступ через $ _POST [input_name] [$ key], вы не получите то, что вы установили с сервера.