За последние 24 часа нас посетил 36781 программист и 7753 робота. Сейчас ищут 1722 программиста ...

Некорректный вовод изображений

Тема в разделе "PHP для новичков", создана пользователем lamac0, 17 фев 2023.

  1. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    Пытаюсь сделать, чтобы в столбце "Изображения" все имеющиеся миниатюры выводились в той же строке, что и заявка, пока что какой-то загадочной причине каждое изображение выводится в новой строке, то есть в заявке будет 5 изображений значит будет 5 строк, что делаю не так?
    PHP:
    1. echo "<table border='1' style='margin-top: 50px;'>
    2.  <tr>
    3.    <th style='width: 100px'>Магазин</th>
    4.    <th>Проблема</th>
    5.    <th style='width: 150px'>Дата заявки</th>
    6.    <th style='width: 100px'>Контакт</th>
    7.    <th style='width: 150px'>Изображение</th>
    8.    <th style='width: 100px'>Действие</th>
    9.  </tr>";
    10. while ($row = $result->fetch()) {
    11.       echo "<tr style='border-color: black;'>";
    12.       echo "<td>" . $row["name"] . "</td>";
    13.       echo "<td>" . $row["problem"] . "</td>";
    14.       echo "<td>" . $row["data"] . "</td>";
    15.       echo "<td>" . $row["contacts"] . "</td>";
    16.       echo "<td>";
    17.       echo "<div>";
    18.       $images = explode(",", $row["image"]);
    19.       foreach ($images as $image) {
    20.           echo "<a href='uploads/" . $image . "' target='_blank'><img src='uploads/" . $image . "' style='display: inline-block; width:30px; height:30px; margin-right: 5px;'/></a>";
    21.       }
    22.       echo "</div>";
    23.       echo "</td>";
    24.       echo "<td><a href='arhive_do_1.php?id=" . $row["id_ticket"] . "'><input type='submit' name='submit' value='Архивировать'></form></td>";
    25.       echo "</tr>";
    26.    
     
  2. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Попробуй составить строку в цикле с помощью конкатенации а вывести после цикла.
     
  3. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    ситуацию это не исправило, все равно выводит в разных строках
    PHP:
    1. while ($row = $result->fetch()) {
    2.         echo "<tr style='border-color: black;'>";
    3.         echo "<td>" . $row["name"] . "</td>";
    4.         echo "<td>" . $row["problem"] . "</td>";
    5.         echo "<td>" . $row["data"] . "</td>";
    6.         echo "<td>" . $row["contacts"] . "</td>";
    7.         echo "<td>";
    8.         $images = explode(",", $row["image"]);
    9.         $image_html = "";
    10.         foreach ($images as $image) {
    11.             $image_html .= "<a href='uploads/" . $image . "' target='_blank'><img src='uploads/" . $image . "' style='display: inline-block; width:30px; height:30px; margin-right: 5px;'/></a>";
    12.         }
    13.         echo "<div>" . $image_html . "</div>";
    14.         echo "</td>";
    15.         echo "<td><a href='arhive_do_1.php?id=" . $row["id_ticket"] . "'><input type='submit' name='submit' value='Архивировать'></form></td>";
    16.         echo "</tr>";
    17.     }
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    вопрос не к php, а итоговому html,
    посмотрите его - все ли там как надо?
     
  5. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    а что с ним может быть не так? по сути я же ему говорю куда и что показать в данном случае, он это и делает
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    да откуда нам знать что - вы покажите получившийся html и картинку - как это отображается

    например display: inline-block
     
  7. Drunkenmunky

    Drunkenmunky Старожил

    С нами с:
    12 авг 2020
    Сообщения:
    1.511
    Симпатии:
    284
    Попробуйте td вложить в div, а не наоборот
     
  8. Survivor

    Survivor Новичок

    С нами с:
    8 фев 2023
    Сообщения:
    93
    Симпатии:
    19
    5 картинок с разрешением 30х30 пикселей никак не влезут в блок из-за margin-right: 5px;, как минимум.
    Во-вторых, скорее всего, на смещение и/или размер влияют css стили. Попробуй смоделировать в отдельном файле поочередно подключая все стили, что в оригинале.
     
  9. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    вот в таком виде выходят изображения, одна заявка, для каждой картинки своя строка создается
    [​IMG]
    вот что выводи сайт
    [​IMG]
     
    #9 lamac0, 20 фев 2023
    Последнее редактирование: 20 фев 2023
  10. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    Может у тебя в базе одинаковые записи...
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    есть некие подозрения в неверной выборке данных ну и возможно в структуре БД )))
    вы как каждую картинку храните - в отдельной таблице?
    что в поле image находится?
     
  12. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    туда формируется рандомное имя
    PHP:
    1. if (is_uploaded_file($tmp_name)) {
    2.           $filename = basename($_FILES['files']['name'][$key]);
    3.           $extension = pathinfo($filename, PATHINFO_EXTENSION);
    4.           $basename = bin2hex(random_bytes(8)) . '.' . $extension;
    5.           $query = "INSERT INTO images (id_ticket, imgname, image) VALUES (?, ?, ?)";
    6.           $statement = $pdo->prepare($query);
    7.           }
    каждое изображение привязывается к id_ticket, у каждого изображение свой id_img
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    ну очень все странно....

    записывает вроде в отдельную таблицу....
    а зачем же при выводе берете из какго-то поля основной таблицы? разбиваете по explode
    Код (Text):
    1. $images = explode(",", $row["image"]);
    посмотрите что у вас в $images .... похоже там всегда одна картинка.. .а вы ждете кучу
     
  14. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    PHP:
    1. print_r ($images);
    выдает, что у каждого изображения свое название
    [​IMG]
     
  15. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @lamac0, заодно уберите загрывающий форму тег там, где value='Архивировать'></form></td>
    В начале цикла сделайте var_dump($row);
    И поделитесь результатом :)
    --- Добавлено ---
    В "песочнице" можете сделать "срез" базы данных и запрос, которым получаете записи для заявки.
    Очень похоже, что просто группировки не хватает.
     
  16. lamac0

    lamac0 Новичок

    С нами с:
    4 авг 2022
    Сообщения:
    42
    Симпатии:
    0
    PHP:
    1. $sql = "SELECT tickets.id_ticket, shop.id_shop, shop.name, tickets.problem, tickets.arhive, tickets.contacts, tickets.data, images.image
    2. FROM shop
    3. JOIN tickets
    4. ON shop.id_shop = tickets.id_shop AND tickets.arhive = 0
    5. JOIN images
    6. ON tickets.id_ticket = images.id_ticket";
    тег убрал, ничего не поменялось, а должно ли было?
    выглядит вот так
    [​IMG]
     
  17. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Поменялось. Ошибок в структуре html стало меньше.
    Текстом, пожалуйста. В блоке кода.
    --- Добавлено ---
    @lamac0, а в запросе действительно не хватает группировки по id магазина и заявки + разложения "изображений" в строку с разделителем "запятая".
    Раз уж в коде разбираете именно такую строку "изображений".
    --- Добавлено ---
    @lamac0, или можете отслеживать в цикле по $row изменение id заявки и добавлять в ячейку изображение вместо формирования строки.
    (т.к. судя по #12 id заявки "сквозной" для всех магазинов)