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

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

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

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

PHP

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

Q&A

解決済

1回答

2512閲覧

[PHP]アップロードされ保存された画像を表示させることができません

newyee

総合スコア213

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2017/10/22 07:01

編集2017/10/22 07:05

アップロードされ、保存された画像のパスを指定しても画像を表示させることができないです...
以下が自分が作成したコードとなるのですが、全てを載せると長くなってしまうので、画像の処理に関する部分だけ載せさせていただこうと思います。
ファイルに関しましては、control.php,model.php,view.phpの3つのファイルに分けて作成しております。
以下はcontrol.phpのファイルになります。

php

1<?php 2 3// 設定ファイル読み込み 4require_once '../include/config/const.php'; 5// 関数ファイル読み込み 6require_once '../include/model/index.php'; 7 8date_default_timezone_set('Asia/Tokyo'); 9$item_info_list = array(); 10$err_msg = array(); 11$success_msg = array(); 12$product_name = ''; 13$price = 0; 14$stock = 0; 15$status = 0; 16$file_name =''; 17$save_file_name = ''; 18$product_id = 0; 19$ext = ''; 20$check_ext = ''; 21$check_filter = array(); 22$date = date("Y/m/d H:i:s"); 23 24 25 26$link = get_db_connect(); 27 28if($_SERVER['REQUEST_METHOD'] === 'POST'){ 29 30 $submit_type = $_POST['submit_type']; 31 //die(var_dump($submit_type)); 32 33 switch ($submit_type) { 34 case 'add_item': 35 36 $product_name = $_POST['product_name']; 37 //var_dump($product_name);exit(); 38 $price = $_POST['price']; 39 $stock = $_POST['stock']; 40 $status = $_POST['public_status']; 41 42 //登録値チェック 43 $err_msg[] = entry_name_check($product_name); 44 $err_msg[] = entry_check_price($price); 45 $err_msg[] = entry_check_stock($stock); 46 //var_dump($price);exit(); 47 //die(var_dump($stock)); 48 49 //アップロードファイル名を変数に代入 50 $temp_file = $_FILES['new_img']['tmp_name']; 51 //var_dump($temp_file);exit(); 52 $file_name = $_FILES['new_img']['name']; 53 54 55 //拡張子取得 56 $check_ext = get_ext($file_name); 57 58 //拡張子チェック 59 //$err_msg[] = extention_check($check_ext); 60 61 62 //拡張子を取得(保存) 63 $ext = ext($file_name); 64 65 //var_dump($product_id);exit(); 66 67 68 //var_dump($upload_file);exit(); 69 70 71 //var_dump($err_msg);exit(); 72 $check_err = array_filter($err_msg); 73 74 if(count($check_err) === 0){ 75 76 //トランザクション開始 77 mysqli_autocommit($link, $false); 78 79 $sql = 'INSERT INTO item_table(product_name,price,created_date,status) 80 VALUES(\'' . $product_name . '\',' . $price . ',\'' . $date . '\',' . $status . ')'; 81 82 if(mysqli_query($link,$sql) === TRUE){ 83 84 $product_id = mysqli_insert_id($link); 85 86 //ファイルパス+ファイル名 87 $upload_file = '../include/img/' . $product_id . $ext; 88 89 $sql = 'UPDATE item_table SET img = (\'' . $upload_file . '\') WHERE product_id = ' . $product_id; 90 91 if(mysqli_query($link,$sql) === FALSE){ 92 $err_msg[] = 'item_table:insertエラー' . $sql; 93 } 94 95 //var_dump($product_id);exit(); 96 97 98 //item_stock_tableにinsert 99 $err_msg[] = insert_item_stock_table($link,$product_id,$stock,$date); 100 101 }else{ 102 $err_msg[] = 'item_table:insertエラー' . $sql; 103 } 104 105 106 107 //アップロード処理 108 $err_msg[] = upload_img($temp_file,$upload_file,$check_ext); 109 110 111 112 113 //トランザクション成否判定 114 $check_err = array_filter($err_msg); 115 116 117 if(count($check_err) === 0){ 118 119 $success_msg[] = '商品追加成功'; 120 121 mysqli_commit($link); 122 123 }else{ 124 $err_msg[] = '商品追加失敗'; 125 mysqli_rollback($link); 126 } 127 } 128

以下はmodel.phpになります

php

1//アップロード処理 2function upload_img($temp_file,$upload_file,$check_ext){ 3 4 $err_msg = ''; 5 6 if (is_uploaded_file($temp_file)){ 7 8 9 $err_msg = extention_check($check_ext); 10 11 if(empty($err_msg)){ 12 13 if (move_uploaded_file($temp_file,$upload_file) === FALSE) { 14 15 $err_msg = 'ファイルをアップロードできません。'; 16 17 18 } 19 20 }else{ 21 $err_msg = 'エラーメーッセージが空ではありません'; 22 } 23 } else { 24 $err_msg = 'ファイルが選択されていません。'; 25 } 26 27 return $err_msg; 28} 29 30 31//拡張牛取得 32function get_ext($file_name){ 33 return substr($file_name,strrpos($file_name,'.') +1); 34} 35 36//拡張子チェック 37function extention_check($check_ext){ 38 39 $err_msg = ''; 40 41 if(!($check_ext === 'jpeg' || $check_ext === 'jpg' || $check_ext === 'png')){ 42 $err_msg = 'ファイル形式が異なります。画像ファイルはjpegまたはpngのみ利用可能です'; 43 } 44 45 return $err_msg; 46} 47 48//拡張子取得(拡張子を含む) 49function ext($file_name){ 50 51 return substr($file_name,strrpos($file_name,'.')); 52 //var_dump($ext);exit(); 53} 54 55function get_item_table($link){ 56 57 $sql = 'SELECT item_table.product_id,product_name,price,img,status,stock 58 FROM item_table 59 JOIN item_stock_table 60 ON item_table.product_id = item_stock_table.product_id'; 61 62 return get_as_array($link,$sql); 63 64} 65function get_as_array($link, $sql) { 66 67 // 返却用配列 68 $data = array(); 69 70 // クエリを実行する 71 if ($result = mysqli_query($link, $sql)) { 72 73 if (mysqli_num_rows($result) > 0) { 74 75 // 1件ずつ取り出す 76 while ($row = mysqli_fetch_assoc($result)) { 77 $data[] = $row; 78 } 79 80 } 81 82 // 結果セットを開放 83 mysqli_free_result($result); 84 85 } 86 87 return $data; 88 89}

以下はview.phpになります。

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>商品管理画面</title> 6 <style> 7 table,tr,th,td{ 8 9 border:solid 1px; 10 11 } 12 </style> 13</head> 14<body> 15 <h1>商品管理画面</h1> 16 17 <?php foreach($err_msg as $value){ ?> 18 19 <p><?php echo $value; ?></p> 20 21 <?php } ?> 22 <?php foreach($success_msg as $value){ ?> 23 24 <p><?php echo $value; ?></p> 25 26 <?php } ?> 27 28 <a href="item_list.php">購入画面</a> 29 30 <section> 31 <h2>新規商品追加</h2> 32 <form method="post" enctype="multipart/form-data"> 33 34 <div>名前<input type="text" name="product_name"></div> 35 <div>値段<input type="text" name="price"></div> 36 <div>個数<input type="text" name="stock"></div> 37 <div><input type="file" name="new_img"></div> 38 <div> 39 <select name="public_status"> 40 <option value="0">非公開</option> 41 <option value="1">公開</option> 42 </select> 43 </div> 44 <div><input type="submit"value="■□■□■商品追加■□■□■"></div> 45 <input type="hidden"name="submit_type" value="add_item"> 46 </form> 47 </section> 48 <section> 49 <h2>商品情報変更</h2> 50 <caption>商品一覧</caption> 51 <table> 52 <tr> 53 <th>商品画像</th> 54 <th>商品名</th> 55 <th>価格</th> 56 <th>在庫数</th> 57 <th>ステータス</th> 58 </tr> 59 <?php foreach($item_info_list as $value){ ?> 60 61 <tr><!-- アップロードされたファイル名をテーブルに保存する --> 62 <td><img src="<?php echo $value['img'] ;?>"></td> 63 <td><?php echo $value['product_name']; ?></td> 64 <td><?php echo $value['price']; ?></td> 65 66 <!-- 在庫数変更フォーム --> 67 <form method="post"> 68 <td> 69 <input type="text" name="update_stock" value="<?php echo $value['stock_number'];?>"> 70 <input type="submit" value="変更"> 71 <input type="hidden" name="submit_type" value="change_value"> 72 <input type="hidden" name="product_id" value="<?php echo $value['product_id']?>"> 73 </td> 74 </form> 75 76 <!-- ステータス変更フォーム --> 77 <form method="post"> 78 <td> 79 <?php if((int)($value['status']) === 0){ ?> 80 <input type="submit" name="change_status" value="非公開->公開"> 81 82 <?php }else{ ?> 83 84 <input type="submit" name="change_status" value="公開->非公開"> 85 <?php } ?> 86 <input type="hidden" name="status" value="<?php echo $value['status']; ?>"> 87 <input type="hidden" name="product_id" value="<?php echo $value['product_id']; ?>"> 88 <input type="hidden" name="submit_type" value="change_status"> 89 </td> 90 </form> 91 92 </tr> 93 <?php } ?> 94 </table> 95 </section> 96</body> 97</html> 98

DBの画像の名前を保存する場所に直接、imgタグで指定するパスを入れ、表示させようとしたのですが、失敗してしまいます...
DBへは画像のパスはきちんと保存されているので、原因が分かりません。。。
どなたか教えて下さる方いましたら、ご教示お願いします...

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

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

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

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

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

guest

回答1

0

ベストアンサー

だいたい以下の3つをチェックすれば問題は解決します。

  1. ディレクトリやファイルのパーミッションは正しいか
  2. ちゃんと画像が指定の場所に保存されているか
  3. 画像のURL(パス)は正しいか

ところで、最近別の人の同じような質問に回答したのですが、専門学校か何かの課題でしょうか?

投稿2017/10/22 14:04

ooeok

総合スコア469

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

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

newyee

2017/10/22 22:49

ご回答ありがとうございます。 ご指摘頂いた点を確認して見たいと思います。 専門学校の課題では無いのですが、プログラミングスクールの課題です!
ooeok

2017/10/23 09:09

解決済にするのは本当に問題が解決してからにしましょう。 解決方法が分かったら、ぜひそれを書いて下さいね。 同じような問題で困っている人の参考になります。 そのプログラミングスクールはいろいろと問題ありそうですね。 一度講義に参加してみたいものです(お金払いたくないけど)。
newyee

2017/10/25 03:10

問題、というのは具体的にどのような問題があるのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問