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

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

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

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

解決済

[PHP]画像を表示させることができないです...

newyee
newyee

総合スコア213

PHP

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

1回答

0評価

0クリップ

11051閲覧

投稿2017/10/17 14:24

編集2017/10/22 07:07

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

php

$link = get_db_connect(); if($_SERVER['REQUEST_METHOD'] === 'POST'){ $submit_type = $_POST['submit_type']; //die(var_dump($submit_type)); switch ($submit_type) { case 'add_item': $product_name = $_POST['product_name']; //var_dump($product_name);exit(); $price = $_POST['price']; $stock = $_POST['stock']; $status = $_POST['public_status']; //登録値チェック $err_msg[] = entry_name_check($product_name); $err_msg[] = entry_check_price($price); $err_msg[] = entry_check_stock($stock); //var_dump($price);exit(); //die(var_dump($stock)); //アップロードファイル名を変数に代入 $temp_file = $_FILES['new_img']['tmp_name']; //var_dump($temp_file);exit(); $file_name = $_FILES['new_img']['name']; //拡張子取得 $check_ext = get_ext($file_name); //拡張子チェック //$err_msg[] = extention_check($check_ext); //拡張子を取得(保存) $ext = ext($file_name); //var_dump($product_id);exit(); //var_dump($upload_file);exit(); //var_dump($err_msg);exit(); $check_err = array_filter($err_msg); if(count($check_err) === 0){ //トランザクション開始 mysqli_autocommit($link, $false); $sql = 'INSERT INTO item_table(product_name,price,img,created_date,status) VALUES(\'' . $product_name . '\',' . $price . ',\'' . $file_name . '\',\'' . $date . '\',' . $status . ')'; if(mysqli_query($link,$sql) === TRUE){ $product_id = mysqli_insert_id($link); //var_dump($product_id);exit(); //item_stock_tableにinsert $err_msg[] = insert_item_stock_table($link,$product_id,$stock,$date); }else{ $err_msg[] = 'item_table:insertエラー' . $sql; } //ファイルパス+ファイル名 $upload_file = '../include/img/' . $product_id . $ext; //アップロード処理 $err_msg[] = upload_img($temp_file,$upload_file,$check_ext); //トランザクション成否判定 $check_err = array_filter($err_msg); if(count($check_err) === 0){ $success_msg[] = '商品追加成功'; mysqli_commit($link); }else{ $err_msg[] = '商品追加失敗'; mysqli_rollback($link); } } break; //item_table取得 $item_info_list = get_item_table($link); //ファイル名の拡張子を取得 $item_info_list = img_ext($item_info_list,$file_name); //var_dump($item_info_list);exit(); //特殊文字をHTMLエンティティに変換 $item_info_list = entity_as_array($item_info_list);

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

php

//アップロード処理 function upload_img($temp_file,$upload_file,$check_ext){ $err_msg = ''; if (is_uploaded_file($temp_file)){ $err_msg = extention_check($check_ext); if(empty($err_msg)){ if (move_uploaded_file($temp_file,$upload_file) === FALSE) { $err_msg = 'ファイルをアップロードできません。'; } }else{ $err_msg = 'エラーメーッセージが空ではありません'; } } else { $err_msg = 'ファイルが選択されていません。'; } return $err_msg; } //拡張牛取得 function get_ext($file_name){ return substr($file_name,strrpos($file_name,'.') +1); } //拡張子チェック function extention_check($check_ext){ $err_msg = ''; if(!($check_ext === 'jpeg' || $check_ext === 'jpg' || $check_ext === 'png')){ $err_msg = 'ファイル形式が異なります。画像ファイルはjpegまたはpngのみ利用可能です'; } return $err_msg; } //拡張子取得(拡張子を含む) function ext($file_name){ return substr($file_name,strrpos($file_name,'.')); } function get_item_table($link){ $sql = 'SELECT item_table.product_id,product_name,price,img,status,stock FROM item_table JOIN item_stock_table ON item_table.product_id = item_stock_table.product_id'; return get_as_array($link,$sql); } function img_ext($item_info_list,$file_name){ foreach($item_info_list as $key => $value){ foreach($value as $keys => $values){ $item_info_list[$key]['img'] = ext($file_name); } } return $item_info_list; } function get_db_connect(){ // コネクション取得 if (!$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWD, DB_NAME)) { die('error: ' . mysqli_connect_error()); } // 文字コードセット mysqli_set_charset($link, DB_CHARACTER_SET); return $link; } function get_as_array($link, $sql) { // 返却用配列 $data = array(); // クエリを実行する if ($result = mysqli_query($link, $sql)) { if (mysqli_num_rows($result) > 0) { // 1件ずつ取り出す while ($row = mysqli_fetch_assoc($result)) { $data[] = $row; } } // 結果セットを開放 mysqli_free_result($result); } return $data; }

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

html

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>商品管理画面</title> <style> table,tr,th,td{ border:solid 1px; } </style> </head> <body> <h1>商品管理画面</h1> <?php foreach($err_msg as $value){ ?> <p><?php echo $value; ?></p> <?php } ?> <?php foreach($success_msg as $value){ ?> <p><?php echo $value; ?></p> <?php } ?> <a href="item_list.php">購入画面</a> <section> <h2>新規商品追加</h2> <form method="post" enctype="multipart/form-data"> <div>名前<input type="text" name="product_name"></div> <div>値段<input type="text" name="price"></div> <div>個数<input type="text" name="stock"></div> <div><input type="file" name="new_img"></div> <div> <select name="public_status"> <option value="0">非公開</option> <option value="1">公開</option> </select> </div> <div><input type="submit"value="■□■□■商品追加■□■□■"></div> <input type="hidden"name="submit_type" value="add_item"> </form> </section> <section> <h2>商品情報変更</h2> <caption>商品一覧</caption> <table> <tr> <th>商品画像</th> <th>商品名</th> <th>価格</th> <th>在庫数</th> <th>ステータス</th> </tr> <?php foreach($item_info_list as $value){ ?> <tr><!-- アップロードされたファイル名をテーブルに保存する --> <td><img src="../include/img/<?php echo $value['product_id'] . $value['img'] ;?>"></td> <td><?php echo $value['product_name']; ?></td> <td><?php echo $value['price']; ?></td> <!-- 在庫数変更フォーム --> <form method="post"> <td> <input type="text" name="update_stock" value="<?php echo $value['stock_number'];?>"> <input type="submit" value="変更"> <input type="hidden" name="submit_type" value="change_value"> <input type="hidden" name="product_id" value="<?php echo $value['product_id']?>"> </td> </form> <!-- ステータス変更フォーム --> <form method="post"> <td> <?php if((int)($value['status']) === 0){ ?> <input type="submit" name="change_status" value="非公開->公開"> <?php }else{ ?> <input type="submit" name="change_status" value="公開->非公開"> <?php } ?> <input type="hidden" name="status" value="<?php echo $value['status']; ?>"> <input type="hidden" name="product_id" value="<?php echo $value['product_id']; ?>"> <input type="hidden" name="submit_type" value="change_status"> </td> </form> </tr> <?php } ?> </table> </section> </body> </html>

表示されない原因に関しましては、「control.php」の「$item_info_list = img_ext($item_info_list,$file_name);」この部分、「model.php」のimg_ext関数だとの指摘を受けたことがあり、実際にこの関数を排除し、他の方法で一応の解決は出来たのですが、原因が分からないままでして。。。

php

function img_ext($item_info_list,$file_name){ foreach($item_info_list as $key => $value){ foreach($value as $keys => $values){ $item_info_list[$key]['img'] = ext($file_name); } } return $item_info_list; }

どなたか教えてくださる方いましたら、ご教示いただければ幸いです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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