Невозможно получить foreach для правильного создания HTML-таблицы с использованием PHP - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть следующие 2 таблицы:

         --  members --

      |member_ID|nick_name|
      ---------------------
      |    1    |   Jack  |
      ---------------------
      |    2    |   Jill  |
      ---------------------

           -- shares --

|member_ID|nick_name|percent_owner|
-----------------------------------
|   1     |  Jack   |     75      |
-----------------------------------
|   2     |  Jill   |     25      |
-----------------------------------

Моя первая php-страница запросит таблицу членов и создаст HTML-таблицу просто отлично.В HTML-таблицу я добавил пустое текстовое поле, чтобы вручную ввести значение процента владельца.Вот как выглядит эта таблица:

<table>
  <?php foreach ($members as $members) : ?>
  <tr>
    <td><?php echo $members['member_ID']; ?></td>
    <td><?php echo $members['nick_name']; ?></td>
    <td><input type="text" name="percent_owner[]" value="" size="3"></td>
  </tr>
  <?php endforeach; ?>
</table>

Теперь я пытаюсь отправить новую информацию на другую страницу, чтобы создать другую HTML-таблицу с member_ID, nick_name и процентным владельцем.Это где моя проблема лежит.Вот вторая HTML-таблица:

<table>
  <?php foreach ($members as $member) : ?>
  <?php foreach ($_POST['percent_owner'] as $value) : ?>                
   <tr>
     <td><?php echo $member['member_ID']; ?></td>
     <td><?php echo $member['nick_name']; ?></td>
     <td><?php echo $value; ?></td>                 
   </tr>
  <?php endforeach; ?>
  <?php endforeach; ?>
</table>

Я не верю, что правильно организовал свои операторы foreach.Либо я получаю только первое значение процент_владельца в каждой строке, либо получаю оба в каждой строке, но не могу сделать это правильно.Как только я это выясню, я внесу все это в таблицу акций, но это будет позже.Мне нужно решить это в первую очередь.

спасибо!

Ответы [ 2 ]

3 голосов
/ 22 ноября 2011

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

foreach ($members as $member) 

сделай это:

<table>
  <?php foreach ($members as $member) : ?>
    <tr>
      <td><?php echo $member['member_ID']; ?></td>
      <td><?php echo $member['nick_name']; ?></td>
      <td><input type="text" name="percent_owner[]" value="" size="3"></td>
    </tr>
  <?php endforeach; ?>
</table>

Обновление:

Вы пытаетесь перебрать оба% для каждой строки, вам нужен%, который находится в этой строке.

<table>
  <?php
   $i = 0;
   $percents = expload(',', $_POST['percent_owner']);
   foreach ($members as $member) : ?>                
   <tr>
     <td><?php echo $member['member_ID']; ?></td>
     <td><?php echo $member['nick_name']; ?></td>
     <td><?php echo $percents[$i++]; ?></td>                 
   </tr>
  <?php endforeach; ?>
</table>

И вы, вероятно, захотите изменить имя входа в первом блоке на «процент_обладателя». Кроме того, возьмите этот код с крошкой соли, поскольку он не проверен.

1 голос
/ 22 ноября 2011

Вы должны быть в состоянии сопоставить введенные данные со строкой, к которой они применяются. Один из способов сделать это - добавить скрытое значение в каждую строку с идентификатором члена, параллельным владельцу процента. Теоретически они оба будут иметь одинаковый индекс в своих соответствующих массивах, и вам просто нужно сопоставить это. Но это уродливый и ненадежный способ сделать это.

Другой способ справиться с этим (безусловно, лучший из двух способов) состоит в том, чтобы при вводе поля формы в таблице в качестве имени пользовательского поля ввода для% owner указывалось процент_обладателя_ [идентификатор участника]. Затем, когда вы отправляете форму, вы можете просто перебирать переменные POST, ища подстроку «процент_владельца_», и когда вы идентифицируете эти входные данные, вы извлекаете идентификатор члена и введенное пользователем значение и сохраняете его в индексированный массив. Затем вы используете извлеченный идентификатор, чтобы запросить в БД информацию о других членах.

Пример полей формы:

<table>
  <?php foreach ($members as $members) : ?>
  <tr>
    <td><?php echo $members['member_ID']; ?></td>
    <td><?php echo $members['nick_name']; ?></td>
    <td><input type="text" name="percent_owner_<?=$members['member_ID']?>" value="" size="3"></td>
  </tr>
  <?php endforeach; ?>
</table>

Затем при отправке вы обработаете это так:

<?php
foreach ($_POST AS $input => $value) {
  if (stristr($input, 'percent_owner_')) {
    $memberID = str_replace('percent_owner_', '', $input);
    $res = mysql_fetch_object(mysql_query("SELECT nick_name FROM members WHERE member_ID = '$memberID'"));

    $data[$memberID] = array(
      'memberID' => $memberID,
      'nickName' => $res->nick_name,
      'percentOwner' => $value
    );
  }
}
?>

<table>
  <?php foreach ($data as $member) : ?>
  <tr>
    <td><?php echo $member['memberID']; ?></td>
    <td><?php echo $member['nickName']; ?></td>
    <td><?php echo $member['percentOwner']; ?></td>
   </tr>
  <?php endforeach; ?>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...