Как отобразить все связанные изображения с комментарием в отдельном div и повторить основной div для новой записи в php? - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу отобразить все связанные изображения для комментария вместе в поле, но отобразить комментарии в другом элементе. Как на изображении, которое я прикрепил.

Если есть новое сообщение, повторитеосновной div с PHP.

Я не могу понять, как мне это сделать.Я предполагаю, что мне нужно где-то разорвать цикл.

Структура базы данных

сообщений:

| commentid |  comment  | iamgesid |
------------------------------------
|     1     |   fool    |   5557   |
|     2     |  fool2    |   5585   |
------------------------------------

multip_image:

| id |  image  | imagesid |
---------------------------
| 1  |  name1  |    5557  |
| 2  |  name2  |    5557  |
| 3  |  name3  |    5585  |
---------------------------

Я хочу что-то вроде этого

.main {
  background-color: #e3e3e3;
  width: 400px;
  padding: 5px 4px;
  margin-bottom: 10px;
  border-radius: 2px;
}

.comments {
  padding: 10px;
  background-color: #eee;
}

.pics {
  padding: 10px;
  background-color: #c3c3c3;
}
<div class='main'>
  <div class='comments'>
    Related Comment here
  </div>
  <div class='pics'>
    Related Images here
  </div>
</div>
<!-- repeat the same thing with a new post -->
<div class='main'>
  <div class='comments'>
    Related Comment here
  </div>
  <div class='pics'>
    Related Images here
  </div>
</div>
<!-- etc -->
<div class='main'>
  <div class='comments'>
    Related Comment here
  </div>
  <div class='pics'>
    Related Images here
  </div>
</div>

Код для извлечения изображений и соответствующий комментарий

$sql = "SELECT * FROM images
    JOIN posts ON (images.imagesid=posts.imgs)
    ORDER BY  postID";
  $result = $conn->query($sql);
  if (!$result) {
      trigger_error('Invalid query: ' . $conn->error);
  }

  if ($result->num_rows > 0) {
    // output data of each row
    $comment = '';
    while($row = $result->fetch_assoc()) {
      if ($row['name'] == NULL) {
        $imgs= '';
      } else {
        $imgs= "<img width='' src='../images/".$row['name']."' >";
      }

  if($comment != $row['content']){
      echo $row['content'];
     $comment = $row['content'];
  }
    echo $imgs;
  } 

 }

1 Ответ

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

Пришлось отследить твой репост, извини, что так долго возвращался к тебе.Работа мешала.Ваш код не соответствует столбцам вашей базы данных, поэтому я не уверен, что ваш пример базы данных правильный или ваш код.Я угадал базу данных, но если я угадал неправильно, вам придется заменить соответствующие поля базы данных.

Я упростил ваши запросы к базе данных, потому что я думаю, что для вас важнее понять, что они делают, чем быть эффективными.

$sql = "SELECT * FROM multiple_image";
  $result = $conn->query($sql);
  if (!$result) {
      trigger_error('Invalid query: ' . $conn->error);
  }

  if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        $imgs[$row['imageid]][$row['id']]= "<img width='' src='../images/".$row['name']."' >"; // array of image id's, with arrays of images inside them.
  } 

 }
$sql = "SELECT * FROM posts";
  $result = $conn->query($sql);
  if (!$result) {
      trigger_error('Invalid query: ' . $conn->error);
  }

  if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
      $commentsToImages[$row['commentid']] = $row['imagesid']; // array of post id's to picture ids
      $comments[$row['commentid']] = $row['comment']; // array of post id's to comment text.
  } 

 }

Теперь вам просто нужно визуализировать ваш хорошийновые массивы.

foreach($commentsToImages as $commentID =>$imagesID) {
    ?>
<div class='main'>
  <div class='comments'>


<?php echo $comments[$commentID]; // render the comment ?>
  </div>
  <div class='pics'>
    <?php
          foreach($imgs[$imagesID] as $img) { // foreach loop that will render all the images...
                  echo $img;
          }
    ?>
  </div>
</div>

<?php
}
?>

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

  1. Простые запросы к БД.
  2. массивы
  3. для каждого цикла.
  4. Если тогда операторы.

Вы ДОЛЖНЫ вернуться и добавить операторы тогда, чтобы поймать различные потенциальные ошибки.Я не знаю, если ваша база данных допускает нулевые значения, например, но они могут бросить гаечный ключ.Но это будет работать в любом случае.

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