0

Есть такой вот массив:

$books=array('Detective Comics № 27', 'Action Comics #1', 'All Star Comics #8', 'Showcase №4', 'All-American Comics #16', 'More Fun Comics # 73');

Вот такой цикл для заполнения столбца данными массива я использовал:

$i=0;
do {$episode=$books[$i];
    $i++;
    $conn->query("UPDATE `heroes` SET `the_first_appear_work`= '$episode' WHERE `id` = $i"); // для этого на единицу переменная и увеличивается, ведь нулевого id в таблице нет
}
while ($row=$result->fetch_assoc());

Цикл сработал - таблица базы данных заполнилась!

Выборка для вывода у меня происходит вот так:

$result = $conn->query("SELECT * FROM `heroes`");

Выводятся данные из таблицы базы данных на страницу у меня вот так:

while ($row=$result->fetch_assoc()) { ?>
    <p> <b>ID: </b> <?php echo $row['id']?> 
    Name: <?php echo $row['name']?>
    <?php if (!(empty($row['the_real_name']))) {echo "The real name: "; echo $row['the_real_name'];}?><br>
    The artwork where they first appear: <?php echo $row['the_first_appear_work']?>
    Year of the first appear:  <?php echo $row['the_first_appear']?></p>
    <a href=greeting.php?name=<?php echo $row['name'] ?>> Нажмите, чтобы поприветствовать героя </a><hr> // вот с этим другая проблема
<?php } 

Сделал через параграфы, а не echo, чтобы стилизовывать. Да, условие взял отсюда. Ведь когда строки кончаются, то возвращается ложь и цикл, работающий на истине, останавливается.

Так вот столбец таблицы-то заполнился, а данные из таблицы - не выводятся вообще никакие и ошибок нет. Комментирую цикл заполнения - выводятся, в том числе с новыми данными массива, всё хорошо без цикла.

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

Следующий вопрос: вот там ссылка с методом Get передаёт данные, обрезав после пробела. Как сделать, чтобы она передавала данные с пробелом целиком?

  • по второму вопросу всё просто. во-первых, надо соблюдать правила синтаксиса HTML, когда пишешь атрибуты тегов. А во-вторых, имя никогда не передают, передавать надо всегда только id. – Ипатьев Aug 07 '21 at 06:22
  • 2
    А по первому ВООБЩЕ ничего непонятно. Какой-то адов цикл с fetch_assoc() от несуществующего $result и без запроса select. какое-то "заполнение таблицы" запросом update, полный АД когда id берутся почему-то с потолка. – Ипатьев Aug 07 '21 at 06:25
  • а, до меня дошло. сначала делается запрос селект, потом делается цикл с запросом апдейт, который и проматывает все фетчи. и на следующий цикл ПОЧЕМУ-ТО ВДРУГ fetch_assoc() возвращает ложь. Вот блин удивительно-то. – Ипатьев Aug 07 '21 at 06:27
  • @Ипатьев, так мне и нужна была ложь, чтоб цикл остановился.Я решил проблему: в условие ставить $i<=($result->num_rows). А почему fetch_assoc() не работал при выводе данных, он что, одноразовый? – Максим Aug 07 '21 at 07:02
  • потому что ответ на этот вопрос написан в вашем же вопросе, "Ведь когда строки кончаются, то возвращается ложь и цикл, работающий на истине, останавливается". Останавливается, понимаете? Если строк больше нет, то fetch_assoc() возвращает ложь. И цикл не работает. Логично, правда? – Ипатьев Aug 07 '21 at 07:21
  • и ради бога, во-первых, в исходном массиве указывайте id конкретной записи, которую хотите обновить, и перебирайте массив через foreach, без этих адовых безграмотных костылей. Чтобы обновить БД, запрос select ВООБЩЕ не нужен – Ипатьев Aug 07 '21 at 07:31
  • То есть в массиве ключом сделать номер id, а значением - данные, которые хочу добавить в поле? И в foreach перебирать по ключ-значение? – Максим Aug 07 '21 at 07:35
  • 1
    да, и в foreach перебирать по ключ-значение – Ипатьев Aug 07 '21 at 07:48
  • ну и запросы надо выполнять правильно, а не как здесь. Потому что потом полезут ошибки – Ипатьев Aug 07 '21 at 07:54
  • @Ипатьев "соблюдать правила синтаксиса HTML, когда пишешь атрибуты тегов" - просто ссылку взять в двойные кавычки, прям с куском PHP. Foreach`ем удалось перебрать и заполнить столбец данными из массива. Благодарю за помощь. – Максим Aug 07 '21 at 19:59

0 Answers0