$ _post данные не так, как ожидалось - PullRequest
0 голосов
/ 25 июня 2010

Я использую следующее для создания формы:

<form method="post" action="">
<input type="hidden" name="group_name" value="<?php echo $user_group ?>" />
<table width="100%" border="0">
  <tr>
    <td>User</td>
    <td>Email</td>
    <td>&nbsp;</td>
  </tr>

<?php foreach ($user_info as $key => $array) {
    while ($row = mysql_fetch_array($array)) { ?>

    <input type="hidden" name="remove_user_id" value="<?php echo $row['id'] ?>" >
    <input type="hidden" name="email" value="<?php echo $row['email'] ?>" >

  <tr>
    <td><?php echo $row['first_name']." ".$row['last_name']; ?></td>
    <td><?php echo $row['email']; ?></td>
    <td><input type="submit" value="Remove" name="removeuser" /></td>
  </tr>

<?php } } ?>

</table>

...other form controls...

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

1 Ответ

4 голосов
/ 25 июня 2010

У вас есть несколько кнопок отправки в одной и той же форме, и, таким образом, последняя строка является последней строкой, которая будет обработана и отправлена ​​на сервер.

Вам нужна отдельная форма для каждой строки:

<input type="hidden" name="group_name" value="<?php echo $user_group ?>" />
<table width="100%" border="0">
  <tr>
    <td>User</td>
    <td>Email</td>
    <td>&nbsp;</td>
  </tr>

<?php foreach ($user_info as $key => $array) {
    while ($row = mysql_fetch_array($array)) { ?>

<form method="post" action="">
    <input type="hidden" name="remove_user_id" value="<?php echo $row['id'] ?>" >
    <input type="hidden" name="email" value="<?php echo $row['email'] ?>" >

  <tr>
    <td><?php echo $row['first_name']." ".$row['last_name']; ?></td>
    <td><?php echo $row['email']; ?></td>
    <td><input type="submit" value="Remove" name="removeuser" /></td>
  </tr>
</form>
<?php } } ?>

</table>

Обратите внимание, что элемент <form> теперь печатается в каждой строке.Я не уверен, что вы делаете с другими элементами формы, поэтому им, вероятно, понадобится собственный (новый) тег <form>.

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

Редактировать:

Вот лучший ответ:

<table width="100%" border="0">
  <tr>
    <td>User</td>
    <td>Email</td>
    <td>&nbsp;</td>
  </tr>

<?php foreach ($user_info as $key => $array) {
    while ($row = mysql_fetch_array($array)) { ?>

  <tr>
    <td><?php echo $row['first_name']." ".$row['last_name']; ?></td>
    <td><?php echo $row['email']; ?></td>
    <td>
      <form method="post" action="">
        <input type="hidden" name="remove_user_id" value="<?php echo $row['id'] ?>" >
        <input type="hidden" name="email" value="<?php echo $row['email'] ?>" >
        <input type="hidden" name="group_name" value="<?php echo $user_group ?>" />
        <input type="submit" value="Remove" name="removeuser" />
      </form>
    </td>
  </tr>
</form>
<?php } } ?>

</table>

Теперь это должно делать именно то, что вы хотите, должно проверяться как правильный HTML, но для других элементов формы потребуетсяновый тег <form> (те, что ниже указанного кода).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...