Galarist_00 Ответов: 1

Как отображать собственные и/или дружеские посты с помощью PHP?


Я хочу отображать свои собственные посты (по умолчанию), но также отображать посты друзей, если статус = '1' в противном случае, просто отображать свои собственные посты с соответствующими изображениями.

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

posts:

| commentid |  comment  | imagesid | author |
---------------------------------------------
|     1     |   fool    |   5557   | test   |
|     2     |  fool2    |   5585   | devel  |
---------------------------------------------


multiple_image:

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


Connections:
 
| id |  Friend | FriendReferee | Status | 
-----------------------------------------
| 1  |  test   |     devel     |    1   |
-----------------------------------------


Текущая структура выборки

The actual code for fetching image(s):

$sql = "SELECT * FROM multiple_image";
  $result = $conn->query($sql);

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

 }


Fetching the related texts

$sql = "SELECT * FROM posts";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
      $commentsToImages[$row['commentid']] = $row['imagesid'];
      $comments[$row['commentid']] = $row['comment']; 
  }     
 }


Displaying the results in sperated divs

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


<?php echo $comments[$commentID];?>
  </div>
  <div class='pics'>
    <?php
          foreach($imgs[$imagesID] as $img) { 
                  echo $img;
          }
    ?>
  </div>
</div>

<?php
}
?>


Что я уже пробовал:

Я пытался работать с утверждением if else, но оно все еще не работает так, как я хочу.

Richard MacCutchan

- не работает так, как я хочу."
Вы должны объяснить, что это значит. Что происходит не так, как вы ожидаете, или что происходит не так, как вы ожидаете? Мы не можем видеть ваш экран или читать ваши мысли.

1 Ответов

Рейтинг:
1

MadMyche

Главное, что нужно будет сделать, - это ограничить результаты, которые возвращает MySql. Это будет сделано путем определения того, кто ваши друзья, используя WHERE пункт. Вопросительный знак, который находится внутри, - это Параметр которые мы будем заполнять позже, чтобы определить, кто вы.

SELECT FriendReference
FROM   Connections
WHERE  Friend = ?  -- Parameter
AND    Status = 1
Тогда это станет подзапрос прикрепленный к запросам, которые вы хотите получить через IN заявление
SELECT *
FROM   Multiple_Image
WHERE  Author = ?    -- Parameter
OR     Author IN (
  SELECT FriendReference
  FROM   Connections
  WHERE  Friend = ?   -- Parameter
  AND    Status = 1
)

SELECT *
FROM   Posts
WHERE  Author = ?   -- Parameter
OR     Author IN (
  SELECT FriendReference
  FROM   Connections
  WHERE  Friend = ?   -- Parameter
  AND    Status = 1
)

В вашем PHP-коде ваши вызовы MySql должны быть изменены, чтобы использовать подготовленные операторы. Это позволит нам безопасно добавьте переменную в оператор.
$YourName = "devon"

$sql = $mysqli->prepare("SELECT * FROM posts WHERE Author = ? OR Author IN (SELECT FriendReferee FROM Connections WHERE Friend = ? AND Status = 1)");

$sql->bind_param("n", $YourName);
$sql->execute();

$sql->bind_result($result);

Отказ от ответственности: я не программист PHP, поэтому могут быть некоторые синтаксические ошибки. Вам следует обратиться к документации на подготовленные операторы
PHP: mysqli::подготовка - руководство пользователя[^]