アップロードされ、保存された画像のパスを指定しても画像を表示させることができないです...
以下が自分が作成したコードとなるのですが、全てを載せると長くなってしまうので、画像の処理に関する部分だけ載せさせていただこうと思います。
ファイルに関しましては、control.php,model.php,view.phpの3つのファイルに分けて作成しております。
以下はcontrol.phpのファイルになります。
php
1 2$link = get_db_connect(); 3 4if($_SERVER['REQUEST_METHOD'] === 'POST'){ 5 6 $submit_type = $_POST['submit_type']; 7 //die(var_dump($submit_type)); 8 9 switch ($submit_type) { 10 case 'add_item': 11 12 $product_name = $_POST['product_name']; 13 //var_dump($product_name);exit(); 14 $price = $_POST['price']; 15 $stock = $_POST['stock']; 16 $status = $_POST['public_status']; 17 18 //登録値チェック 19 $err_msg[] = entry_name_check($product_name); 20 $err_msg[] = entry_check_price($price); 21 $err_msg[] = entry_check_stock($stock); 22 //var_dump($price);exit(); 23 //die(var_dump($stock)); 24 25 //アップロードファイル名を変数に代入 26 $temp_file = $_FILES['new_img']['tmp_name']; 27 //var_dump($temp_file);exit(); 28 $file_name = $_FILES['new_img']['name']; 29 30 31 //拡張子取得 32 $check_ext = get_ext($file_name); 33 34 //拡張子チェック 35 //$err_msg[] = extention_check($check_ext); 36 37 38 //拡張子を取得(保存) 39 $ext = ext($file_name); 40 41 //var_dump($product_id);exit(); 42 43 44 //var_dump($upload_file);exit(); 45 46 47 //var_dump($err_msg);exit(); 48 $check_err = array_filter($err_msg); 49 50 if(count($check_err) === 0){ 51 52 //トランザクション開始 53 mysqli_autocommit($link, $false); 54 55 $sql = 'INSERT INTO item_table(product_name,price,img,created_date,status) 56 VALUES(\'' . $product_name . '\',' . $price . ',\'' . $file_name . '\',\'' . $date . '\',' . $status . ')'; 57 58 if(mysqli_query($link,$sql) === TRUE){ 59 60 $product_id = mysqli_insert_id($link); 61 62 //var_dump($product_id);exit(); 63 64 65 //item_stock_tableにinsert 66 $err_msg[] = insert_item_stock_table($link,$product_id,$stock,$date); 67 68 }else{ 69 $err_msg[] = 'item_table:insertエラー' . $sql; 70 } 71 72 //ファイルパス+ファイル名 73 $upload_file = '../include/img/' . $product_id . $ext; 74 75 //アップロード処理 76 $err_msg[] = upload_img($temp_file,$upload_file,$check_ext); 77 78 79 80 81 //トランザクション成否判定 82 $check_err = array_filter($err_msg); 83 84 85 if(count($check_err) === 0){ 86 87 $success_msg[] = '商品追加成功'; 88 89 mysqli_commit($link); 90 91 }else{ 92 $err_msg[] = '商品追加失敗'; 93 mysqli_rollback($link); 94 } 95 } 96 97 break; 98 99 100//item_table取得 101$item_info_list = get_item_table($link); 102 103 104//ファイル名の拡張子を取得 105$item_info_list = img_ext($item_info_list,$file_name); 106//var_dump($item_info_list);exit(); 107 108//特殊文字をHTMLエンティティに変換 109$item_info_list = entity_as_array($item_info_list); 110
以下はmodel.phpになります。
php
1 2//アップロード処理 3function upload_img($temp_file,$upload_file,$check_ext){ 4 5 $err_msg = ''; 6 7 if (is_uploaded_file($temp_file)){ 8 9 10 $err_msg = extention_check($check_ext); 11 12 if(empty($err_msg)){ 13 14 if (move_uploaded_file($temp_file,$upload_file) === FALSE) { 15 16 $err_msg = 'ファイルをアップロードできません。'; 17 18 19 } 20 21 }else{ 22 $err_msg = 'エラーメーッセージが空ではありません'; 23 } 24 } else { 25 $err_msg = 'ファイルが選択されていません。'; 26 } 27 28 return $err_msg; 29} 30 31 32//拡張牛取得 33function get_ext($file_name){ 34 return substr($file_name,strrpos($file_name,'.') +1); 35} 36 37//拡張子チェック 38function extention_check($check_ext){ 39 40 $err_msg = ''; 41 42 if(!($check_ext === 'jpeg' || $check_ext === 'jpg' || $check_ext === 'png')){ 43 $err_msg = 'ファイル形式が異なります。画像ファイルはjpegまたはpngのみ利用可能です'; 44 } 45 46 return $err_msg; 47} 48 49//拡張子取得(拡張子を含む) 50function ext($file_name){ 51 52 return substr($file_name,strrpos($file_name,'.')); 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} 65 66function img_ext($item_info_list,$file_name){ 67 foreach($item_info_list as $key => $value){ 68 foreach($value as $keys => $values){ 69 $item_info_list[$key]['img'] = ext($file_name); 70 } 71 } 72 73 return $item_info_list; 74} 75function get_db_connect(){ 76 77 // コネクション取得 78 if (!$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWD, DB_NAME)) { 79 die('error: ' . mysqli_connect_error()); 80 } 81 82 // 文字コードセット 83 mysqli_set_charset($link, DB_CHARACTER_SET); 84 85 return $link; 86} 87 88function get_as_array($link, $sql) { 89 90 // 返却用配列 91 $data = array(); 92 93 // クエリを実行する 94 if ($result = mysqli_query($link, $sql)) { 95 96 if (mysqli_num_rows($result) > 0) { 97 98 // 1件ずつ取り出す 99 while ($row = mysqli_fetch_assoc($result)) { 100 $data[] = $row; 101 } 102 103 } 104 105 // 結果セットを開放 106 mysqli_free_result($result); 107 108 } 109 110 return $data; 111 112} 113 114
以下はview.phpになります。
html
1 2 3<!DOCTYPE html> 4<html lang="ja"> 5<head> 6 <meta charset="UTF-8"> 7 <title>商品管理画面</title> 8 <style> 9 table,tr,th,td{ 10 11 border:solid 1px; 12 13 } 14 </style> 15</head> 16<body> 17 <h1>商品管理画面</h1> 18 19 <?php foreach($err_msg as $value){ ?> 20 21 <p><?php echo $value; ?></p> 22 23 <?php } ?> 24 <?php foreach($success_msg as $value){ ?> 25 26 <p><?php echo $value; ?></p> 27 28 <?php } ?> 29 30 <a href="item_list.php">購入画面</a> 31 32 <section> 33 <h2>新規商品追加</h2> 34 <form method="post" enctype="multipart/form-data"> 35 36 <div>名前<input type="text" name="product_name"></div> 37 <div>値段<input type="text" name="price"></div> 38 <div>個数<input type="text" name="stock"></div> 39 <div><input type="file" name="new_img"></div> 40 <div> 41 <select name="public_status"> 42 <option value="0">非公開</option> 43 <option value="1">公開</option> 44 </select> 45 </div> 46 <div><input type="submit"value="■□■□■商品追加■□■□■"></div> 47 <input type="hidden"name="submit_type" value="add_item"> 48 </form> 49 </section> 50 <section> 51 <h2>商品情報変更</h2> 52 <caption>商品一覧</caption> 53 <table> 54 <tr> 55 <th>商品画像</th> 56 <th>商品名</th> 57 <th>価格</th> 58 <th>在庫数</th> 59 <th>ステータス</th> 60 </tr> 61 <?php foreach($item_info_list as $value){ ?> 62 <tr><!-- アップロードされたファイル名をテーブルに保存する --> 63 <td><img src="../include/img/<?php echo $value['product_id'] . $value['img'] ;?>"></td> 64 <td><?php echo $value['product_name']; ?></td> 65 <td><?php echo $value['price']; ?></td> 66 67 <!-- 在庫数変更フォーム --> 68 <form method="post"> 69 <td> 70 <input type="text" name="update_stock" value="<?php echo $value['stock_number'];?>"> 71 <input type="submit" value="変更"> 72 <input type="hidden" name="submit_type" value="change_value"> 73 <input type="hidden" name="product_id" value="<?php echo $value['product_id']?>"> 74 </td> 75 </form> 76 77 <!-- ステータス変更フォーム --> 78 <form method="post"> 79 <td> 80 <?php if((int)($value['status']) === 0){ ?> 81 <input type="submit" name="change_status" value="非公開->公開"> 82 83 <?php }else{ ?> 84 85 <input type="submit" name="change_status" value="公開->非公開"> 86 <?php } ?> 87 <input type="hidden" name="status" value="<?php echo $value['status']; ?>"> 88 <input type="hidden" name="product_id" value="<?php echo $value['product_id']; ?>"> 89 <input type="hidden" name="submit_type" value="change_status"> 90 </td> 91 </form> 92 93 </tr> 94 <?php } ?> 95 </table> 96 </section> 97</body> 98</html> 99 100
表示されない原因に関しましては、「control.php」の「$item_info_list = img_ext($item_info_list,$file_name);」この部分、「model.php」のimg_ext関数だとの指摘を受けたことがあり、実際にこの関数を排除し、他の方法で一応の解決は出来たのですが、原因が分からないままでして。。。
php
1function img_ext($item_info_list,$file_name){ 2 foreach($item_info_list as $key => $value){ 3 foreach($value as $keys => $values){ 4 $item_info_list[$key]['img'] = ext($file_name); 5 } 6 } 7 8 return $item_info_list; 9}
どなたか教えてくださる方いましたら、ご教示いただければ幸いです。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/20 04:37
2017/10/20 04:39