На моей доске объявлений PHP, как я могу вывести изображение в соответствии с соответствующим постом?

0

Здесь у меня есть доска объявлений на PHP с возможностью отправки комментариев и изображений. Я могу хранить комментарии и изображения в базе данных. Мой вопрос включает в себя две мои таблицы SQL, одну для сохраненных сообщений и другую таблицу для хранения изображений. Когда я выхожу из таблицы столбов, я хотел бы отобразить соответствующее изображение внутри тела сообщения. Я установил таблицы, чтобы они соответствовали атрибуту столбца DATETIME, но я не понимаю, как получить доступ к таблице моих изображений, пока я нахожусь в цикле foreach с моей таблицей сообщений. Я включил код для моего файла index.php и моего файла getImage.php. Помощь будет принята с благодарностью.

Я сделал обновление для моего файла getImage в $ ID = $ _GET ['id']; где "id" должен быть строчным. Теперь я получаю некоторые изображения, отображаемые в моей таблице, но некоторые только частичные. Думаю, я уже в пути. Я знаю, что мне нужно выражение if, чтобы определить, есть ли изображение в сообщении перед отображением. Спасибо за помощь.

<?php

include('connect.php');
$query = 'SELECT * FROM forumPosts LEFT JOIN PostImages ON 
forumPosts.DATETIME = PostImages.ImageDATETIME ORDER BY replyIndex 
ASC';

$statement = $db->prepare($query);
$statement->execute();
$posts = $statement->fetchAll();

$statement->closeCursor();
echo "<table>";
foreach ($posts as $post){
if ($post['post_type'] == "r"){
    $post_id = $post['post_id'];
    echo "<tr bgcolor='beige'><td>reply</td><td>". 
    $post['post_title'] . "</td ><td>". $post['post_body'] . "<img 
    src='getImage.php?id=".$post['ID']."'>". "</td><td>". 
    $post['DATETIME']. "</td><td>". $post['replyIndex']. "</td>
    <td>".$post['post_type']."</td>";

?>  

<?php

include('connect.php');


 $ID = $_GET['id'];

 $query = "SELECT * FROM PostImages WHERE ID=:ID";
 $statement = $db->prepare($query);
 $statement->bindvalue(':ID', $ID);
 $statement->execute();
 $row = $statement->fetch(PDO::FETCH_ASSOC);


  header("Content-type: image/jpeg");
  echo $row['image'];

 ?>
Теги:
image

1 ответ

1
Лучший ответ

Вероятно, вы хотите использовать синтаксис JOIN в запросе SELECT. Что-то вроде:

$query = 'SELECT * FROM forumPosts LEFT JOIN postImages ON forumPosts.DATETIME = postImages.imageDATETIME ORDER BY replyIndex ASC'

Затем вы можете получить данные изображения из вашего цикла foreach, используя $post['name'] и $post['image'].

LEFT JOIN прежнему будет возвращать все строки из первой таблицы (forumPosts), даже если во второй таблице нет совпадений (postImages).

Mysql Join Syntax

  • 0
    Я думаю об этом. Не сразу понимаю, что будет делать.
  • 0
    Ваш запрос только выбирает таблицу forumPosts, поэтому он ничего не вернет из вашей таблицы postImages. Используя JOIN, вы выбираете все из обеих таблиц и объединяете их там, где совпадают значения DATETIME из обеих таблиц. Результатом будет одна таблица с полными данными из обеих таблиц. Таким образом, вы можете получить данные postImages так же, как вы получаете данные forumPosts: $post['name'] и $post['image']
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню