質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

268閲覧

PHP掲示板で画像を投稿・表示できるようにしたい

_____sakura

総合スコア1

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/11/07 06:04

PHP掲示板で画像を投稿・表示できるようにしたい。

PHPで掲示板を作っています。ここで画像データも投稿と表示ができるようにしたいです。

前提

PHPで掲示板を作っています。
データベースのテーブルはposts, images, yoko_imagesの3つ。

写真はadd.phpでimagesテーブル、yoko_imagesテーブルに格納される。ここでのid (image_id, yoko_image_id) がpostテーブルにも格納される。

投稿表示の時にはpostsテーブルに格納されているこのIDからimagesテーブル、posts_imagesテーブルを参照して画像を表示させる。

現在

データベースのイメージ
(↓postsテーブル)
イメージ説明
(↓yoko_imagesテーブルのイメージ)
イメージ説明

発生している問題・エラーメッセージ

画像マークがでるのみで画像が表示できません。
そのほかの投稿内容は表示できているので、データベース接続に問題はないです。
また、画像データをデータベースに反映させることはできているようです。(yoko_imageテーブルのイメージ写真参照)
イメージ説明

該当のソースコード

PHP

1 2<?php 3try { 4 $user = 'name'; 5 $pass = 'pass'; 6 $dbh = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', $user, $pass); 7 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 8 9 // データベースからデータを取得 10 $sql = "SELECT posts.id, posts.title, posts.body, posts.image_yoko_id, posts.image_def_id, posts.date, posts.public, images.image_id AS def_image_path, yoko_images.image_id AS yoko_image_path 11 FROM posts 12 LEFT JOIN images ON posts.image_def_id = images.image_id 13 LEFT JOIN yoko_images ON posts.image_yoko_id = yoko_images.image_id"; 14 $stmt = $dbh->query($sql); 15 $posts = $stmt->fetchAll(PDO::FETCH_ASSOC); 16 17 18 $dbh = null; 19} catch (PDOException $e) { 20 echo 'エラー発生' . htmlspecialchars($e->getMessage(), ENT_QUOTES) . '<br>'; 21 exit; 22} 23?> 24 25 26 27 <div class="container"> 28 <div class="row no-gutters"> 29 <?php foreach ($posts as $post): ?> 30 <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12"> 31 <div class="card" style="width: 18rem;"> 32 <a href="news_detail.php?id=<?= $post["id"] ?>"></a> 33 <?php if (!empty($post["image_yoko_id"])): ?> 34 <img src="image.php?id=<?= $post["image_yoko_id"] ?>" style="width: 100%" class="card-img-top"> 35 <?php endif; ?> 36 <div class="card-body"> 37 <h1 class="card-title"><?= $post["title"] ?></h1> 38 <div class="row"> 39 <div class="col read-article-left"> 40 <?= $post["date"] ?> 41 </div> 42 <div class="col read-article-right"> 43 記事を読む 44 </div> 45 </div> 46 </div> 47 </div> 48 </div> 49 <?php endforeach; ?> 50 </div> 51</div> 52</div> 53 54

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2023/11/07 06:14

ここに記載がないimage.php次第では?
guest

回答1

0

ベストアンサー

ブラウザから

image.php?id=1

で画像が表示されるかどうかで切り分けができるでしょう。
画像ビューワー(image.php)のアルアルだけ

  • headerでマイムを出力する必要があります。
  • ソースのキャラクターコードにBOMはつけない、UTF-8ではなくUTF-8N
  • 場合によってはラージオブジェクトを指定する

PHP: ラージオブジェクト (LOB) - Manual

投稿2023/11/07 06:39

yambejp

総合スコア117674

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_____sakura

2023/11/08 01:51 編集

回答ありがとうございます。 image.php?id=1では開きませんでした。 そこでimage.phpを書き直してみたのですが、うまく動きません。何が問題でしょうか? また、あるあるで上げてくださったUTF-8N 設定は、image.php内での設定でしょうか? 知識がまだ浅くたくさん質問してしまってすみません。 ```PHP <?php require_once 'news.php'; $pdo = connectDB(); $sql = 'SELECT * FROM yoko_images WHERE image_id = :image_id LIMIT 1'; $stmt = $pdo->prepare($sql); $imageId = (int)$_GET['id']; if ($imageId > 0) { $stmt->bindValue(':image_id', $imageId, PDO::PARAM_INT); $stmt->execute(); $image = $stmt->fetch(); if ($image) { header('Content-type: ' . $image['image_type']); echo $image['image_content']; exit(); } else { echo('画像が見つかりません'); } } else { echo('不正な入力値が指定されました'); } ?> ```
yambejp

2023/11/08 01:26

>うまく動きません うまくいかないとは?
_____sakura

2023/11/08 02:32

私の説明不足でした。エラーは出ないのですが、相変わらず写真アイコンのみで、写真が表示されずに動いていませんでした。 ただ、もう一度コードを確認してみてデータベースとの接続部分を直してみたところ、しっかり画像が表示されました。ありがとうございます。 何度も回答してくださりありがとうございました。
yambejp

2023/11/08 02:47

呼び出し方が間違っているのか、登録の仕方がまちがっているのか切り分けができてないのでもっと上流の方から当たったほうが良いと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問