Как я могу получить данные _POST из формы, созданной с помощью цикла foreach? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть ассоциативный массив из 20 имен в этом формате:

$operationCodeName = array(
    "Overlord" => 44,
    "Rolling Thunder" => 68,
    "Desert Storm" => 91,
    "Phantom Fury" => 04,
...);

... и я использовал следующий цикл foreach для генерации таблицы (вложенной в форму), которая отображает каждое имя и целое числогод:

foreach($operationCodeName as $operation => $year) {
    echo "<tr>
          <td>" . $operation . "</td>
          <td align='center'>" . $year . "</td>";
    echo "<td><input name='comment" . $operation . "' size='50' type='text' placeholder='Comment here'></td>
    </tr>";
    }

Я назвал переменные, объединив слово «комментарий» с переменной $operation в атрибуте name текстового ввода.

Эта часть работает должным образом, хотя, если есть более разумный способ сделать это, я весь слух!

Когда пользователь нажимает кнопку «Отправить»,Мне нужно, чтобы эти комментарии отображались на сводной странице.Таблица должна отображать те же элементы массива $operation и $year, что и на первой странице, но затем отображать комментарии пользователя с этой предыдущей страницы.

Я попытался использовать решение, состоящее из двух частей, чтобы решить эту проблему:

Во-первых, моя идея заключалась в том, чтобы использовать предыдущий ассоциативный массив для создания каждой объединенной переменной, использовать его для вызова метода _POST:

foreach($operationCodeName as $key => $value){
    ${"comment" . $key} = $_POST[${"comment" . $key}];
}

... и затем циклически перебирайте все в столбце комментариев, повторяя объединенную переменную, как я делал это для установки их на предыдущей странице в третьем столбце:

foreach($operationCodeName as $operation => $year) {
        echo "<tr>
                <td>" . $operation . "</td>
                <td align='center'>" . $year . "</td>";
        echo "<td>" . ${"comment" . $operation} . "</td>
            </tr>";
    }

Когда я запускаю этот код, таблица правильно отображает первые два столбца, но генерирует пустые теги <td></td> для третьего столбца.var_dump(_$POST); отображает:

array(21) { ["commentOverlord"]=> string(9) "Comment 1" ...

"Комментарий 1" был комментарием, введенным на предыдущей странице, поэтому данные здесь, и я просто неправильно вызываю их для отображения в таблице ... Этона самом деле обнадеживает!

Я предполагаю, что не правильно объявляю переменные, но я не уверен, где происходит мое недопонимание.

Как правильно получить комментарии с первой страницы, иотобразить их в третьем столбце этой динамически генерируемой таблицы?

Спасибо за любые предложения!Хотя я программирую на Java около года, я использую PHP только около 2 недель.Тем не менее, пожалуйста, прости меня за любые ошибки новичка!

1 Ответ

0 голосов
/ 08 февраля 2019

В приведенном выше коде вы пытались создать динамические переменные для каждого комментария.Это не то, как динамические переменные могут быть созданы.У вас уже есть данные в POST-запросе в виде массива, поэтому вы можете получить доступ к каждому комментарию по ключу, который вы создали в комментарии формы, объединенном с номером кода операции.Попробуйте это!

foreach($operationCodeName as $operation => $year) {
        // replace space in operation key with _
        $operation = preg_replace('/\s+/', '_', $operation);
        $commentKey = "comment" . $operation;
        $comment = $_POST[$commentKey];
        echo "<tr>
                <td>" . $operation . "</td>
                <td align='center'>" . $year . "</td>";
        echo "<td>" . $comment . "</td>
            </tr>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...