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

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

ただいまの
回答率

90.51%

  • PHP

    20408questions

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

  • phpMyAdmin

    652questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 295

newyee

score 103

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

<?php 

// 設定ファイル読み込み
require_once '../include/config/const.php';
// 関数ファイル読み込み
require_once '../include/model/index.php';

date_default_timezone_set('Asia/Tokyo');
$item_info_list = array();
$err_msg = array();
$success_msg = array();
$product_name = '';
$price = 0;
$stock = 0;
$status = 0;
$file_name ='';
$save_file_name = '';
$product_id = 0;
$ext = '';
$check_ext = '';
$check_filter = array();
$date = date("Y/m/d H:i:s");



$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,created_date,status)
                    VALUES(\'' . $product_name . '\',' . $price . ',\'' .  $date . '\',' . $status . ')';

            if(mysqli_query($link,$sql) === TRUE){

                $product_id = mysqli_insert_id($link);

                //ファイルパス+ファイル名
                $upload_file = '../include/img/' . $product_id . $ext;

                $sql = 'UPDATE item_table SET img =  (\'' . $upload_file .  '\') WHERE product_id = ' . $product_id;

                if(mysqli_query($link,$sql) === FALSE){
                    $err_msg[] = 'item_table:insertエラー' . $sql;
                }

                //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;
            }



            //アップロード処理
            $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);
            }
        }


以下はmodel.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,'.'));
    //var_dump($ext);exit();
}

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 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になります。

<!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="<?php echo $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>


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/23 07:49

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

    キャンセル

  • 2017/10/23 18:09

    解決済にするのは本当に問題が解決してからにしましょう。
    解決方法が分かったら、ぜひそれを書いて下さいね。
    同じような問題で困っている人の参考になります。

    そのプログラミングスクールはいろいろと問題ありそうですね。
    一度講義に参加してみたいものです(お金払いたくないけど)。

    キャンセル

  • 2017/10/25 12:10

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

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    php掲示板作成について。

    前提・実現したいこと php7.0.12にて、掲示板作成をしてる 出力先はcsvである。 コメントを未入力の場合のエラー表示が何故か出来ない。コメント入力してもec

  • 解決済

    画像をアップロードするときに画像ファイルを選択して送信したのに、画像が選択されていないと表示される。

    画像ファイルによってその結果がちがいます。 小さいデータでアップすると普通に送信完了とでますが、4Mまたは5Mのファイルであげると、私が書いたエラー文が出てきます。 書いた

  • 解決済

    画像をアップロードする時、画像のサイズをエコしたが0と表示。

    実は画像をアップロードして、小さいデータならうまく表示しますが、4Mや5M以上のデータですと、自分が書いたエラーチェックが出てきます。確認のためecho $_FILES['upfi

  • 解決済

    【PHP】ログイン機能の実装

    PHP初心者です。 PHPの勉強がてら、会員制のページを作成してます。 新規会員登録機能は実装できていますが、 ログイン機能の実装がうまくいきません。 やりたいことを実

  • 解決済

    [PHP]POSTに失敗してしまいます

    PHP勉強中の者です。現在自動販売機作成ツールの管理画面を作成しているのですが、POSTの処理につまずいてしまっています。 ご教授頂ければ幸いです。 現在作成しているコードは以下の

  • 受付中

    php mysql を使用したプログラミング

     前提・実現したいこと ここに質問の内容を詳しく書いてください。 PHPでデータベースを使ったシステムを作っていますがプログラムが苦手なもので苦戦しています。。。 Memberテー

  • 解決済

    PHP エスケープ処理

    前に投稿していたPHPのプログラムで一つだけうまく出力できないのがありました。 <!DOCTYPE html> <html lang="ja"> <head>

  • 解決済

    php ログインできなくなる

     前提・実現したいこと phpでログインシステムを実装中に以下のエラーが発生しました。  発生している問題・エラーメッセージ Warning: session_start():

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

  • PHP

    20408questions

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

  • phpMyAdmin

    652questions

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