PHP - Как отправить форму, содержащую поля ввода, которые указывают на разные строки MySQL - PullRequest
3 голосов
/ 16 июля 2011

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

    <?php foreach ($items as $row): ?>
            <tr>
                <td>
                    <?php echo form_hidden('id', $row->id); ?>
                </td>
                <td>
                    <?php echo '<strong>' . $row->name . '</strong>'; ?>
                </td>
                <td>
                    <?php echo form_input('number', $number); ?>
                </td>
                <td>
                    <?php echo form_input('registry', $registry); ?>
                </td>
                <td>
                    <?php echo form_checkbox('OK', $ok, $ok); ?>
                </td>
            </tr>
    <?php endforeach; ?>

Это дает мне форму со следующим видом:

enter image description here

Идея заключается в том, что каждая строка принадлежит уникальному идентификатору / строке в базе данных, и я хотел бы позволить пользователю редактировать все на одной странице / форме, используя одну кнопку отправки.

Каков наилучший способ реализации этого?

Когда эти данные отправляются, в моем контроллере должен быть способ прохождения каждого пакета информации (от каждого пользователя). Будет ли это сделано через ajax / json?

Ответы [ 3 ]

2 голосов
/ 16 июля 2011

Нет необходимости использовать ajax mate.

Для каждого положить скрытый ввод с идентификатором строки в этом формате:

<input type="hidden" name="id[<?= $row->id ?>]" value="<?= $row->id ?>" ?>

Сделайте то же самое для каждого элемента в tr, то есть назовите их как

name="number[<?= $row->$id ?>]"
name="registry[<?=$row->$id ?>]"
name="ok[<?=$row->$id ?>]"

и после публикации ФОРМЫ вы можете перебирать каждую строку с помощью:

foreach ($_POST['id'] as $key => $value) {
    echo $_POST['name'][$key];
}
2 голосов
/ 16 июля 2011

Это не использует codeigntier, но вы должны быть знакомы с общей техникой, прежде чем пытаться использовать CI для сокращения этого процесса. Codeigniter поможет вам с визуализацией элементов формы, выполнением проверки, экранированием ввода и выполнением запроса - но это поможет вам (что-нибудь сделать), только если вы понимаете основные принципы. Надеюсь, это поможет

MARKUP

<form action="/process.php">
<div>
    <h2>GORDON</h2>
    <input type="text" name="user[1][number]" /> <!-- The number corresponds to the row id -->
    <input type="text" name="user[1][registry]" />
    <input type="checkbox" name="user[1][ok]" value="1" />
</div>
<div>
    <h2>ANDY</h2>
    <input type="text" name="user[242][number]" />
    <input type="text" name="user[242][registry]" />
    <input type="checkbox" name="user[242][ok]" value="1" />
</div>
<div>
    <h2>STEWART</h2>
    <input type="text" name="user[11][number]" />
    <input type="text" name="user[11][registry]" />
    <input type="checkbox" name="user[11][ok]" value="1" />
</div>

<input type="submit" />

PHP

$users = $_REQUEST['user'];

foreach ($users as $rowId => $info){

    // YOU SHOULD MAKE SURE TO CLEAN YOUR INPUT - THIS IS A GUESS AT WHAT YOUR DATA TYPES MIGHT BE
    $id = (int) $rowId;
    $number = (int) $info['number'];
    $registry = mysql_real_escape_string($info['registry']);
    $ok = (int) ($info['ok']);

    $q = "UPDATE user SET number = $number, registry = '$registry', ok = $ok WHERE id = $id";
    mysql_query($q);

    // You may want to check that the above query was sucessful and log any errors etc.

}
1 голос
/ 16 июля 2011

Вам необходимо настроить входные имена как имена массивов, чтобы вы отправили всю форму и могли перебирать записи.

Например,

<?php
echo form_input('userdata[' . $row->id . '][number]', $number);
?>

, что может создать

<input name="userdata[1][number]" />

(я не знаю, откуда взялись эти функции формы ...)

Это приведет к массиву $_POST['userdata'], который может быть повторен с помощью:

foreach($_POST['userdata'] as $userId => $userInputFields)
{
    $user = new User($userId);
    $user->number = $userInputFields['number'];
    // …
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...