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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

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

PHP

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

解決済

PHPで既存の画像を新しい画像に変更するSQLの書き方

emi_ono
emi_ono

総合スコア77

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

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

PHP

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

1回答

0リアクション

1クリップ

195閲覧

投稿2022/09/15 11:54

前提

PHPとSQLでスタッフの名前と画像を管理するページを作っています。
登録した画像を別の画像に差し替えする方法を教えていただきたいです。

新しくファイルを選択した場合、sqlのUPDATE文を使ってデータのアップデートをしようと思ったのですが、SQL文を実行すると画像が表示されません。
sqlのUPDATE文が間違えているのでしょうか?
画像の登録、削除、表示はできました。

教えていただきたいです。よろしくおねがいします。

実現したいこと

  • 既存の画像を新しい画像に変更する

発生している問題・エラーメッセージ

ブラウザでは

filename = IMG_3217.JPG
tmp_path = /tmp/phpSM2nUn
error = 0
filesize = 103226
save_path = ../../../img/staff/20220915151849IMG_3217.JPG
staffname = name4
shop_id = 1
image_id = 8
old_file_name = IMG_3218.JPG
old_file_path =
スタッフ名OK
新しいファイルあり。
ファイルサイズOK。
ファイルエラーなし。
IMG_3217.JPGを../../../img/staff/20220915151849IMG_3217.JPGにアップしました。
データベースに保存しました。

と表示されるのですが、データベースでは
" file_name"と"staff_name"は更新されているのですが、"file_path"は空白になってしまいます。

該当のソースコード

test-edit_file_upload.php

PHP

<?php session_start(); require_once "./dbc.php"; if ( !isset( $_SESSION[ "shop_name" ] ) ) { $no_login_url = "login_form.php"; header( "Location: {$no_login_url}" ); exit; } //セッションの値を受け取る $shop_id = $_SESSION[ 'shop_id' ]; //ファイル関連の取得 $file = $_FILES[ 'img' ]; $filename = basename( $file[ 'name' ] ); $tmp_path = $file[ 'tmp_name' ]; $file_err = $file[ 'error' ]; $filesize = $file[ 'size' ]; $upload_dir = '../../../img/staff/'; $save_filename = date( 'YmdHis' ) . $filename; $err_msgs = array(); $file_err_msgs = array(); $save_path = $upload_dir . $save_filename; $old_file_name = htmlspecialchars( $_POST[ "old_file_name" ] ); $old_file_path = htmlspecialchars( $_POST[ "old_file_path" ] ); //スタッフ関連の取得 $staffname = htmlspecialchars( $_POST[ "staffname" ] ); $image_id = htmlspecialchars( $_POST[ "image_id" ] ); //確認用表示 echo 'filename = ' . $filename . '<br>'; echo 'tmp_path = ' . $tmp_path . '<br>'; echo 'error = ' . $file_err . '<br>'; echo 'filesize = ' . $filesize . '<br>'; echo 'save_path = ' . $save_path . '<br>'; echo 'staffname = ' . $staffname . '<br>'; echo 'shop_id = ' . $shop_id . '<br>'; echo 'image_id = ' . $image_id . '<br>'; echo 'old_file_name = ' . $old_file_name . '<br>'; echo 'old_file_path = ' . $old_file_path . '<br>'; //スタッフ名のバリデーション //未入力 if ( empty( $staffname ) ) { //echo 'スタッフ名を入力してください。'; array_push( $err_msgs, 'スタッフ名を入力してください。' ); } //10文字以内か if ( mb_strlen( $staffname, 'utf8' ) > 10 ) { //echo 'スタッフ名は10文字以内で入力してください。'; array_push( $err_msgs, 'スタッフ名は10文字以内で入力してください。' ); } if ( count( $err_msgs ) === 0 ) { echo 'スタッフ名OK<br>'; //ファイルはあるかどうか? if ( is_uploaded_file( $tmp_path ) ) { echo '新しいファイルあり。<br>'; //ファイルのバリデーション //ファイルサイズが5MB未満か if ( $filesize > 5242880 || $file_err == 2 ) { array_push($err_msgs, 'ファイルサイズは5MB未満にしてください。'); } else { echo 'ファイルサイズOK。<br>'; } //拡張は画像形式か $allow_ext = array( 'jpg', 'jpeg', 'png' ); $file_ext = pathinfo( $filename, PATHINFO_EXTENSION ); if ( !in_array( strtolower( $file_ext ), $allow_ext ) ) { array_push( $err_msgs, '「jpg」「jpeg」「png」の画像を添付してください。' ); } if ( count( $err_msgs ) === 0 ){ echo 'ファイルエラーなし。<br>'; }else{ foreach ( $err_msgs as $msg ) { echo '<p class="errmsg">' . $msg . '</p>'; } } if(move_uploaded_file($tmp_path, $save_path )){ echo $filename.'を'.$save_path.'にアップしました。'; //DBに保存(ファイル名、ファイルパス、スタッフ名、店舗ID) $result = fileEdit($filename, $save_path, $staffname, $shop_id, $image_id); if($result){ echo '<p>データベースに保存しました。</p>'; }else{ echo '<p class="errmsg">データベースへの保存が失敗しました。</p>'; } }else{ echo '<p class="errmsg">ファイルが保存できませんでした。</p>'; } } else { echo '新しいファイルなし。<br>'; } } else { foreach ( $err_msgs as $msg ) { echo '<p class="errmsg">' . $msg . '</p>'; } }

dbc.php(DB接続部分は省略)

PHP

/** * ファイルデータを編集保存 * @param string $filename ファイル名 * @param string $save_path 保存先のパス * @param string $staffname スタッフ名 * @param int $shop_id 店舗ID * @param int $image_id スタッフID * @return bool $result */ function fileEdit($filename, $save_path, $staffname, $shop_id, $image_id) { $result = False; $sql = "UPDATE staff SET file_name = :file_name, file_path = :file_path, staff_name = :staff_name, shop_id = :shop_id WHERE shop_id = :shop_id AND image_id = :image_id "; try{ $stmt = dbc()->prepare($sql); $stmt->bindValue(':file_name',$filename); $stmt->bindValue(':file_path',$file_path); $stmt->bindValue(':staff_name',$staffname); $stmt->bindValue(':shop_id',$shop_id); $stmt->bindValue(':image_id',$image_id); $result = $stmt->execute(); return $result; }catch(Exception $e){ echo '捕捉した例外: ', $e->getMessage(), "\n"; return $result; } }

データベース構造

MySQL

-- -- テーブルの構造 `staff` -- CREATE TABLE IF NOT EXISTS `staff` ( `image_id` int(11) NOT NULL COMMENT 'データのID', `file_name` varchar(255) NOT NULL COMMENT '画像の名前', `file_path` varchar(255) NOT NULL, `staff_name` varchar(140) NOT NULL COMMENT 'スタッフ名', `shop_id` int(11) NOT NULL COMMENT '店舗ID', `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '作成日時' ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

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

PHP

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