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

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

ただいまの
回答率

90.48%

  • PHP

    20782questions

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

  • phpMyAdmin

    666questions

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

[PHP]アップロードされた画像のフルパスを他ファイルでも参照する場合

解決済

回答 1

投稿 編集

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

newyee

score 115

アップロードされた画像のファイルパス+ファイル名を他のファイルでも参照したいのですが、画像のファイル名に取得した拡張子を代入した変数を使っていて、その変数を使っているファイルを参照しようと思い読み込んだのですが、エラーが出てしまい読み込めず、拡張子を代入した変数も参照できずにいます...
以下が拡張子を代入した変数($ext)を定義したファイル(tool.php)になります。

<?php 
// 設定ファイル読み込み
require_once '../include/conf/const.php';
// 関数ファイル読み込み
require_once './function.php';

$drink_info_list = array();
$err_msg = array();
$success_msg = array();
$drink_name = '';
$price = 0;
$stock = 0;
$status = 0;
$file_name ='';
$drink_id = 0;
$check_ext = '';
$check_err_msg = '';
$ext = '';

$link = get_db_connect();

if($_SERVER['REQUEST_METHOD'] === 'POST'){

    $submit_type = $_POST['submit_type'];
    //var_dump($submit_type);exit();

    switch ($submit_type) {
        case 'add_item':

        $drink_name = $_POST['drink_name'];
        $price = $_POST['price'];

        $stock = $_POST['stock'];

        $status = $_POST['public_status'];


        //登録値チェック
        $err_msg[] = entry_name_check($drink_name);
        $err_msg[] = entry_check_price($price);
        $err_msg[] = entry_check_stock($stock);
        //var_dump($err_msg);exit();

        //アップロードファイル名を変数に代入
        $temp_file = $_FILES['new_img']['tmp_name'];
        $file_name = '../img/' . $_FILES['new_img']['name'];

        //拡張子取得
        $check_ext = get_ext($file_name);




        //拡張子チェック
        $err_msg[] = extention_check($check_ext);
        //var_dump($check_ext);exit();



        //var_dump($err_msg);exit();

        //エラーメッセージの空もしくはNULLを排除
        $check_err_msg = array_filter($err_msg);

        //var_dump($check_err_msg);exit();

        //エラーメッセージの要素数が0の場合
        if(count($check_err_msg) === 0){

            //トランザクション開始
            mysqli_autocommit($link, $false);

            $sql = 'INSERT INTO drink_info_table(drink_name,price,status)VALUES(\'' . $drink_name . '\',' . $price . ',' . $status . ')';

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

                $drink_id = mysqli_insert_id($link);

                //drink_stock_tableにinsert
                $err_msg[] = insert_drink_stock_table($link,$drink_id,$stock);


            }else{
                $err_msg[] = 'drink_info_table:insertエラー' . $sql;
            }


            $ext = ext($file_name);

            //ファイルパス+ファイル名
            $upload_path = '../img/' . $drink_id . $ext;

            //アップロード処理
            $err_msg[] = upload_img($temp_file,$upload_path); 
            //var_dump($err_msg);





            //空もしくはnullを削除
            $check_err_msg = array_filter($err_msg);
            //var_dump($check_err_msg);exit();       

           //トランザクション成否判定
           if(count($check_err_msg) === 0){

               $success_msg[] = '商品追加成功';

               mysqli_commit($link);

            }else{

               $err_msg[] = '商品追加失敗';
               mysqli_rollback($link);
            }
        }else{
            $err_msg[] = 'countエラー';
        }

        break;

        case'change_value':

            $drink_id = (int)$_POST['drink_id'];

                if(isset($_POST['update_stock'])){
                    $update_stock = (int)$_POST['update_stock'];

                    $sql = 'UPDATE drink_stock_table SET stock_number = ' . $update_stock . ' WHERE drink_id = ' . $drink_id; 

                    if(mysqli_query($link,$sql) === TRUE){
                        $success_msg [] = '在庫変更成功'; 
                    }else{
                        $err_msg[] = 'UPDATE drink_stock_table:updateエラー:' . $sql;
                    }
                }else{
                    $err_msg[] = '在庫変更失敗';   
                }

            break;

        case 'change_status':


            $status = (int)$_POST['status'];
            $drink_id = (int)$_POST['drink_id'];

            if(($status) === 1){

                $sql = 'UPDATE drink_info_table SET status = 0 WHERE drink_id = ' . $drink_id; 

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

                    $err_msg[] = 'drink_info_table:UPDATEエラー' . $sql;    


                }else{

                    $success_msg[] = 'ステータス変更成功';
                }

            }else{
                $sql = 'UPDATE drink_info_table SET status = 1 WHERE drink_id = ' . $drink_id; 

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

                    $err_msg[] = 'drink_info_table:UPDATEエラー' .$sql;    

                }else{

                    $success_msg[] = 'ステータス変更成功';
                }

            }

            break;    

    }

}

//drink_info_table取得
$drink_info_list = get_drink_table($link);


//特殊文字をHTMLエンティティに変換
$drink_info_list = entity_as_array($drink_info_list);
//var_dump($drink_info_list);exit();


include_once './view.php';

?>


以下は、$extを参照したい側のファイル(index.php)になります。

<?php 
require_once '../include/conf/const.php';
require_once '../tool/tool.php';
require_once './model.php';
$drink_list = array();
$err_msg = array();
$link = get_db_connect();


$drink_list = get_drink_table($link);
$drink_list = entity_as_array($drink_list);

include_once './view.php';

?>

$extを使用したい場所と致しましては、
index.phpで読み込んでいますview.phpになります。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">

</head>
<body>
    <h1>
        <p>自動販売機</p>
    </h1>
    <form action="../result/Controller.php" method="post">
        <p>金額<input type="text" name="money"></p>
        <?php foreach($drink_list as $value){ ?>
            <img src="lesson23/img/<?php echo $value['drink_id'] . $ext; ?>">
            <?php echo $value['drink_name']; ?>
            <?php echo $value['price']; ?>
            <input type="radio"name="<?php $value['drink_id'] ?>">
            <input type="hidden" name="<?php $value['price'] ?>">
            <input type="hidden" name="<?php $value['stock'] ?>">

        <?php } ?>

        <div><input type="submit" value="購入"></div>
    </form>
</body>

</html>

どなたか教えて下さる方いらっしゃいましたら、ご教示よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

別のファイルで参照したいってなんのこっちゃと思ったら。

特定URLにてForm POSTで受け取ったパラメータを別のURLでも使いたいってことですかね。

1 Sessionに詰める。使いたいURLのスクリプトでSessionから取り出す。
2 Cookieに詰める。使いたいURLのスクリプトでCookieから取り出す。
3 DBなどの外部リソースに保存する。使いたいURLのスクリプトでDBから取り出す。
4 URLのQueryStringで引回す URLの末尾の?name=valueのこと。

お好きな方法を使うと良いですよ。

ただし画像のフルパスというくらいだからLinuxだったら/usr/local/なんちゃら とかって文字列のことになると思うので、そんなのは外部に公開しちゃまずいので4のQueryStringでは使わないほうがいいですね。
QueryStringで使うならファイル名だけにしておいて、ファイルのdirectoryのパスは定数で持っておくなどするとよいですね。

URLと仮装パスと物理パスがごっちゃになってるので
HTTPとはなにかURLとはなにか、サーバーサイドスクリプトとはなにか。それぞれどういう関係なのかをきちんと勉強するとよいですよ。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/21 21:41

    ご丁寧にありがとうございます!
    勉強してみます<(_ _)>

    キャンセル

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

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

関連した質問

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

  • PHP

    20782questions

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

  • phpMyAdmin

    666questions

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