l oop через x число выпадающих списков данных в php - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть страница php, которая состоит из 3 раскрывающихся списков данных, заполненных из файла базы данных sqlite (comics.db).

Я пытаюсь сохранить код, используя для l oop ( Мне нужно три раскрывающихся списка), но когда я нажимаю «отправить запрос» на странице «Действие формы». php 'не производит три ввода, выбранные пользователем, т.е. символ [1], символ [2] и символ [3].

Я пробовал различные комбинации этой строки:

echo '<input list="characters" name="character[$x]">';

, но я получаю пустую страницу. php. Я предполагаю, что переменная _POST не хранит три входа из индекса. php page?

Я застрял на этом несколько дней, я пробовал переменные сеанса, но не могу найти ответ, который работает, кроме повторения блока кода три раза с именем = символ1, 2, 3 и т. д. c ... Конечно, есть цикл / массив, который работает?

, пожалуйста, помогите!

Мой индекс. php страница:

<html>
<body>

<?php
class MyDB extends SQLite3 {
    function __construct() {
        $this->open('comics.db');
    }
}
for ($x = 1;$x < 4;$x++) {
    $db = new MyDB();
    $sql = <<<EOF
      select character_name from characters group by character_name order by character_name asc;
EOF;
    $ret = $db->query($sql);
    echo '<form action="page.php" method="post">';
    echo '<label for="character">Character: </label>';
    echo '<input list="characters" name="character[$x]">';
    echo '<datalist id="characters">';
    while ($row = $ret->fetchArray(SQLITE3_ASSOC)) {
        unset($name);
        $name = $row['character_name'];
        echo '<option value=""></option>';
        echo '<option value="' . $name . '">' . $name . '</option>';
    }
    echo "</datalist>";
    $db->close();
}
echo '<input type="submit" name="submit" />';
echo '</form>';
?>

</body>
</html>

Моя страница. php:

<html>
<body>

<?php

for($x = 1; $x < 4; $x++) {
  if(isset($_POST['character[$x]'])) {
    $character = $_POST['character[$x]'];
    echo "$character";
    }
  }
?>

</body>
</html>

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Большое спасибо за вашу помощь!

Я изменил строку в индексе. php на:

echo '<input list="characters" name="character[]">';

и изменил мою страницу. php на следующую:

<html>
<body>

<?php

for ($x = 0; $x < count($_POST['character']); $x++)
{
   echo $_POST['character'][$x];
}

?>

</body>
</html>

Это дает желаемый результат. Следующий фрагмент кода также дает желаемый результат

foreach ($_POST['NAME'] as $value)
{
    echo $value;
}

@ DinoCoderSaurus - большое спасибо за информативный ответ и указание мне в правильном направлении!

0 голосов
/ 22 апреля 2020

page. php создает пустую страницу, потому что это if(isset($_POST['character[$x]'])) равно никогда не верно .

Выберите «Inspect Element» для одного из элементов ввода, чтобы увидеть, что они все говорят :

<input list="characters" name="character[$x]">

Буква «x» здесь взята буквально:

echo '<input list="characters" name="character[$x]">';

Это потому, что строка заключена в одинарные кавычки , символ $ x "не раскрывается.

Этот $_POST['character'] будет списком с одним элементом, ключ которого -" $ x "; «$ x» буквально, не имеет отношения к $x в l oop. Если вы хотите увидеть какие-либо результаты, измените вхождения этого $_POST['character[$x]'] на $_POST['character']['$x'].

Возможно, это не тот результат, который вы ищете. Более простое решение - пусть браузер сделает это! Если ваши входные элементы построены таким образом

echo '<input list="characters" name="character[]">';

, браузер отправит массив $_POST['character'], который вы можете перебрать на странице. php. Естественно, вам придется внести изменения в страницу. php, чтобы правильно перебрать $_POST['character'] для отображения желаемых результатов.

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