前提・実現したいこと
データベースに保存した画像を取得し表示させたい
発生している問題・エラーメッセージ
写真を自由に投稿できるサイトを作りたく下記のサイトを参考にコードを書きデータベースに画像を保存することはできたがそれを出力できない。
該当のソースコード
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に画像を出力させたいです。
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/07 03:41
2020/06/07 07:30