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

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

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

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

PHP

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

Q&A

解決済

1回答

3054閲覧

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

newyee

総合スコア213

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2017/09/20 12:00

編集2017/09/20 12:04

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

PHP

1<?php 2// 設定ファイル読み込み 3require_once '../include/conf/const.php'; 4// 関数ファイル読み込み 5require_once './function.php'; 6 7$drink_info_list = array(); 8$err_msg = array(); 9$success_msg = array(); 10$drink_name = ''; 11$price = 0; 12$stock = 0; 13$status = 0; 14$file_name =''; 15$drink_id = 0; 16$check_ext = ''; 17$check_err_msg = ''; 18$ext = ''; 19 20$link = get_db_connect(); 21 22if($_SERVER['REQUEST_METHOD'] === 'POST'){ 23 24 $submit_type = $_POST['submit_type']; 25 //var_dump($submit_type);exit(); 26 27 switch ($submit_type) { 28 case 'add_item': 29 30 $drink_name = $_POST['drink_name']; 31 $price = $_POST['price']; 32 33 $stock = $_POST['stock']; 34 35 $status = $_POST['public_status']; 36 37 38 //登録値チェック 39 $err_msg[] = entry_name_check($drink_name); 40 $err_msg[] = entry_check_price($price); 41 $err_msg[] = entry_check_stock($stock); 42 //var_dump($err_msg);exit(); 43 44 //アップロードファイル名を変数に代入 45 $temp_file = $_FILES['new_img']['tmp_name']; 46 $file_name = '../img/' . $_FILES['new_img']['name']; 47 48 //拡張子取得 49 $check_ext = get_ext($file_name); 50 51 52 53 54 //拡張子チェック 55 $err_msg[] = extention_check($check_ext); 56 //var_dump($check_ext);exit(); 57 58 59 60 //var_dump($err_msg);exit(); 61 62 //エラーメッセージの空もしくはNULLを排除 63 $check_err_msg = array_filter($err_msg); 64 65 //var_dump($check_err_msg);exit(); 66 67 //エラーメッセージの要素数が0の場合 68 if(count($check_err_msg) === 0){ 69 70 //トランザクション開始 71 mysqli_autocommit($link, $false); 72 73 $sql = 'INSERT INTO drink_info_table(drink_name,price,status)VALUES(\'' . $drink_name . '\',' . $price . ',' . $status . ')'; 74 75 if(mysqli_query($link,$sql) === TRUE){ 76 77 $drink_id = mysqli_insert_id($link); 78 79 //drink_stock_tableにinsert 80 $err_msg[] = insert_drink_stock_table($link,$drink_id,$stock); 81 82 83 }else{ 84 $err_msg[] = 'drink_info_table:insertエラー' . $sql; 85 } 86 87 88 $ext = ext($file_name); 89 90 //ファイルパス+ファイル名 91 $upload_path = '../img/' . $drink_id . $ext; 92 93 //アップロード処理 94 $err_msg[] = upload_img($temp_file,$upload_path); 95 //var_dump($err_msg); 96 97 98 99 100 101 //空もしくはnullを削除 102 $check_err_msg = array_filter($err_msg); 103 //var_dump($check_err_msg);exit(); 104 105 //トランザクション成否判定 106 if(count($check_err_msg) === 0){ 107 108 $success_msg[] = '商品追加成功'; 109 110 mysqli_commit($link); 111 112 }else{ 113 114 $err_msg[] = '商品追加失敗'; 115 mysqli_rollback($link); 116 } 117 }else{ 118 $err_msg[] = 'countエラー'; 119 } 120 121 break; 122 123 case'change_value': 124 125 $drink_id = (int)$_POST['drink_id']; 126 127 if(isset($_POST['update_stock'])){ 128 $update_stock = (int)$_POST['update_stock']; 129 130 $sql = 'UPDATE drink_stock_table SET stock_number = ' . $update_stock . ' WHERE drink_id = ' . $drink_id; 131 132 if(mysqli_query($link,$sql) === TRUE){ 133 $success_msg [] = '在庫変更成功'; 134 }else{ 135 $err_msg[] = 'UPDATE drink_stock_table:updateエラー:' . $sql; 136 } 137 }else{ 138 $err_msg[] = '在庫変更失敗'; 139 } 140 141 break; 142 143 case 'change_status': 144 145 146 $status = (int)$_POST['status']; 147 $drink_id = (int)$_POST['drink_id']; 148 149 if(($status) === 1){ 150 151 $sql = 'UPDATE drink_info_table SET status = 0 WHERE drink_id = ' . $drink_id; 152 153 if(mysqli_query($link,$sql) === FALSE){ 154 155 $err_msg[] = 'drink_info_table:UPDATEエラー' . $sql; 156 157 158 }else{ 159 160 $success_msg[] = 'ステータス変更成功'; 161 } 162 163 }else{ 164 $sql = 'UPDATE drink_info_table SET status = 1 WHERE drink_id = ' . $drink_id; 165 166 if(mysqli_query($link,$sql) === FALSE){ 167 168 $err_msg[] = 'drink_info_table:UPDATEエラー' .$sql; 169 170 }else{ 171 172 $success_msg[] = 'ステータス変更成功'; 173 } 174 175 } 176 177 break; 178 179 } 180 181} 182 183//drink_info_table取得 184$drink_info_list = get_drink_table($link); 185 186 187//特殊文字をHTMLエンティティに変換 188$drink_info_list = entity_as_array($drink_info_list); 189//var_dump($drink_info_list);exit(); 190 191 192include_once './view.php'; 193 194?>

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

PHP

1<?php 2require_once '../include/conf/const.php'; 3require_once '../tool/tool.php'; 4require_once './model.php'; 5$drink_list = array(); 6$err_msg = array(); 7$link = get_db_connect(); 8 9 10$drink_list = get_drink_table($link); 11$drink_list = entity_as_array($drink_list); 12 13include_once './view.php'; 14 15?> 16 17

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

view.php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 6</head> 7<body> 8 <h1> 9 <p>自動販売機</p> 10 </h1> 11 <form action="../result/Controller.php" method="post"> 12 <p>金額<input type="text" name="money"></p> 13 <?php foreach($drink_list as $value){ ?> 14 <img src="lesson23/img/<?php echo $value['drink_id'] . $ext; ?>"> 15 <?php echo $value['drink_name']; ?> 16 <?php echo $value['price']; ?> 17 <input type="radio"name="<?php $value['drink_id'] ?>"> 18 <input type="hidden" name="<?php $value['price'] ?>"> 19 <input type="hidden" name="<?php $value['stock'] ?>"> 20 21 <?php } ?> 22 23 <div><input type="submit" value="購入"></div> 24 </form> 25</body> 26 27</html>

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

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

特定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/20 15:48

編集2017/09/20 15:53
Tak1016

総合スコア1408

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

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

newyee

2017/09/21 12:41

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問