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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

1回答

904閲覧

データベースに保存した画像を取得し表示させたい

cafe1111

総合スコア62

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2020/06/07 02:52

編集2020/06/07 07:31

前提・実現したいこと

データベースに保存した画像を取得し表示させたい

※追記
イメージ説明

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

写真を自由に投稿できるサイトを作りたく下記のサイトを参考にコードを書きデータベースに画像を保存することはできたがそれを出力できない。

参考

該当のソースコード

php

1//content-single-topic.php 2 3<?php 4 5/** 6 * The template for displaying all pages. 7 * 8 * @package Theme Freesia 9 * @subpackage Excellent 10 * @since Excellent 1.0 11 */ 12 13 14 15/** 16 * Single Topic Content Part 17 * 18 * @package bbPress 19 * @subpackage Theme 20 */ 21 22 23 24require_once 'functions.php'; 25$pdo = connectDB(); 26if ($_SERVER['REQUEST_METHOD'] != 'POST'){ 27//画像を取得 28$sql = 'SELECT * FROM images ORDER BY created_at DESC'; 29$stmt = $pdo->prepare($sql); 30$stmt->execute(); 31$images = $stmt->fetchAll(); 32 33 34}else{ 35//画像を保存 36 if(!empty($_FILES['image']['name'])){ 37 $name = $_FILES['image']['name']; 38 $type = $_FILES['image']['type']; 39 $content = file_get_contents($_FILES['image']['tmp_name']); 40 $size = $_FILES['image']['size']; 41 42 $sql = 'INSERT INTO images(image_name,image_type,image_content,image_size,created_at) 43 VALUES (:image_name,:image_type,:image_content,:image_size,now())'; 44 $stmt = $pdo->prepare($sql); 45 $stmt->bindValue(':image_name',$name,PDO::PARAM_STR); 46 $stmt->bindValue(':image_type',$type,PDO::PARAM_STR); 47 $stmt->bindValue(':image_content',$content,PDO::PARAM_STR); 48 $stmt->bindValue(':image_size',$size,PDO::PARAM_INT); 49 $stmt -> execute(); 50 } 51 unset($pdo); 52 header('Location:content-single-topic.php'); 53 exit(); 54 55} 56 57unset($pdo); 58 59?> 60 61 62<div class="post-form__result"> 63 <h1 class="page-title"><?php the_title(); ?></h1> 64 <ul> 65 <?php for($i=0; $i<count($images); $i++): ?> 66 <li> 67 <p><?php echo $_POST["name"]; ?></p> 68 <p><?php echo $_POST["explanation"]; ?></p> 69 <p><a href="<?php echo get_template_directory_uri(); ?>"><?php echo $_POST["url"];?></a></p> 70 <p><? =$images[$i]['image_id']; ?></p> 71 72 <p><img src="<?php echo get_stylesheet_directory_uri(); ?>/image.php?id=<? =$images[$i]['image_id']; ?>" alt="" width="100px" height="auto"></p> 73 <a href="#">削除</a> 74 </li> 75 <?php endfor;?> 76 </ul> 77</div> 78 79 80 81<div class="post-form"> 82 <h2 class="form-title">投稿フォーム</h2> 83 <p><?php the_title(); ?></p> 84 <form action="" method="POST" enctype="multipart/form-data"> 85 <label for="name"></label> 86 <input type="text" name="name" id="name"> 87 88 <label for="email">メールアドレス(必須)(情報公開されません)</label> 89 <input type="email" name="email" id="email"> 90 91 <label for="url"></label> 92 <input type="url" name="url" id="url"> 93 94 <label for="explanation"></label> 95 <textarea name="explanation" id="explanation" cols="30" rows="10"></textarea> 96 <label for="file"></label> 97 <input type="file" name="image" id="file" required> 98 <input type="submit" value="送信" class="btn btn-primary"> 99 </form> 100</div> 101

php

1//functions.php 2<?php 3//データベースに接続 4function connectDB() { 5 $param = 'mysql:dbname=aaaa;host=localhost'; 6 try{ 7 $pdo = new PDO($param,'root','root'); 8 return $pdo; 9 }catch(PDOException $e){ 10 echo $e->getMessage(); 11 exit(); 12 13 } 14 15} 16 17 18?> 19 20//image.php 21<?php 22require_once 'functions.php'; 23 24$pdo = connectDB(); 25 26$sql = 'SELECT * FROM images WHERE image_id = :image_id LIMIT 1'; 27$stmt = $pdo->prepare($sql); 28$stmt->bindValue(':image_id',(int)$_GET['id'],PDO::PARAM_INT); 29$stmt->execute(); 30$image = $stmt->fetch(); 31 32header('Content-type: '. $image['image_type']); 33echo $image['image_content']; 34 35unset($pdo); 36exit(); 37 38?> 39 40

試したこと

ほぼサイトの通りにやったが無理だった

補足情報(FW/ツールのバージョンなど)

wordpressのテーマは親がexcellentでその子テーマであるexcellent-childを編集しています。
また、その子テーマにbbpressというプラグインを入れその中にあるcontent-single-topic.phpに画像を出力させたいです。

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

image.php側でも受け取った$pdoにエラーモードを設定し
try-catchで処理してください

PHP

1<?PHP 2require_once 'functions.php'; 3 4$pdo = connectDB(); 5try{ 6 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 7 8 $sql = 'SELECT * FROM images WHERE image_id = :image_id LIMIT 1'; 9 $stmt = $pdo->prepare($sql); 10 $stmt->bindValue(':image_id',(int)$_GET['id'],PDO::PARAM_INT); 11 $stmt->execute(); 12 $image = $stmt->fetch(); 13 14 header('Content-type: '. $image['image_type']); 15 echo $image['image_content']; 16 17 unset($pdo); 18 exit(); 19}catch(PDOException $e){ 20 die($e->getMessage()); 21}

存在しなかったときにnoimage的なものを表示したりする処理が必要です

投稿2020/06/07 03:38

yambejp

総合スコア116724

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

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

yambejp

2020/06/07 03:41

あとはエラー状況によります。 画像を出力させる場合はBOMなども気にしてください
cafe1111

2020/06/07 07:30

コード変えてみましたが表示されず写真のように削除だけがループして表示されます。 エラーについてですがボタンをクリックした時データベースに画像は保存されますが、お探しのページはありませんというページに飛ばされます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問