アップロードされ、保存された画像のパスを指定しても画像を表示させることができないです...
以下が自分が作成したコードとなるのですが、全てを載せると長くなってしまうので、画像の処理に関する部分だけ載せさせていただこうと思います。
ファイルに関しましては、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; }
どなたか教えてくださる方いましたら、ご教示いただければ幸いです。
まだ回答がついていません
会員登録して回答してみよう