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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

1回答

988閲覧

PHPでMySQLに保存されている画像データを表示したい

Gshehebnk

総合スコア3

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/12/24 10:00

前提・実現したいこと

ファイルアップロードボタンを押した後にdbに名前、ファイルパス、タイプを保存し
そこからimg srcに表示したいです。

該当のソースコード

<?php $dsn = 'mysql:dbname=photo;host=localhost';      $user = '*****'; $password = '****'; $PDO = new PDO($dsn, $user, $password); if ($_SERVER['REQUEST_METHOD'] != 'POST') { // 画像を取得 $sql = 'SELECT * FROM photo'; $stmt = $PDO->prepare($sql); $stmt->execute(); $images = $stmt->fetchAll(); } else { // 画像を保存 if (!empty($_FILES['image']['name'])) { $name = $_FILES['image']['name']; } } ?> <form class="forml" name="forml" id="forml" method="post" action="functions.php" enctype="multipart/form-data"> <div class="flex box1"> <p><img id= "preview" src="<?php echo $name;?>"></p> <P><img src="img/img002.jpg"></P> <P><img src="img/img003.jpg"></P> </div> <div class="flex box2"> <p><img src="img/img004.jpg" ></p> <p><img src="img/img005.jpg" ></p> <p><img src="img/img006.jpg" ></p> <p><img src="img/img007.jpg" ></p> <p><img src="img/img008.jpg" ></p> </div> <div class="foot"> <P><img src="img/img009.jpg" ></p> </div> <div class="foot-text"> CSSによる画像サイズの<br> 変更、画面レイアウトの<br> 調整を行うページ </div> <div> <input type="file" name="image" id="myImage" accept="image/*" onchange="setImage(this);" onclick="this.value = '';"> <input type="submit" name="go" value="送信" onclick="return check();"> </div> </form> </div> </div> <script> function setImage(target) { var reader = new FileReader(); reader.onload = function (e) { document.getElementById("preview").setAttribute('src', e.target.result); } reader.readAsDataURL(target.files[0]); }; </script> </body>
<?php header('Location: http://localhost/galleries.php'); $id = $_GET['id']; $dsn = 'mysql:dbname=photo;host=localhost'; $user = ''; $password = ''; $PDO = new PDO($dsn, $user, $password); if ($_SERVER['REQUEST_METHOD'] != 'POST') { } else { var_dump($_FILES); if (!empty($_FILES['image']['name'])) { $name = $_FILES['image']['name']; $file_pass = "C:/xampp/htdocs/img"; $type = $_FILES['image']['type']; $sql = "INSERT INTO photo (name, type, filepass, created) VALUES (:image_name, :image_type, :image_filepass, NOW())"; $stmt = $PDO->prepare($sql); var_dump($sql); //$params = array(':id' => '', ':name' => $name, 'type' => $type); $stmt->bindValue(':image_name', $name, PDO::PARAM_STR); $stmt->bindValue(':image_filepass', $file_pass, PDO::PARAM_STR); $stmt->bindValue(':image_type', $type, PDO::PARAM_STR); $stmt->execute(); } } unset($PDO); ?>

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

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

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

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

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

m.ts10806

2020/12/24 11:10

なぜデータ取得時に$_FILESを?
guest

回答1

0

見た感じ、ファイルアップロードしてサーバー上に設置しているわけでもなく、DBに画像の実体を保存しているわけでもないので、そもそも参照できる仕組みになってません。

大抵はこの2択です。
0. 画像をアップロードしてサーバー上に配置し、パスだけをDBに保存し、参照の際はパスからimgタグにリンクさせる
0. 画像の実体をDBに保存して、DBから取り出し出力

(「出力」についても色々なやり方があります)

いずれも「PHP ファイルアップロード」「PHP 画像アップロード 参照」調べて出てくる範囲ですが、脆弱性の的となりやすいのがファイルアップロードなので、下記確認してください。
※操作する言語が違うだけで、言語が違っても流れや考え方は変わりません

ファイルアップロードの例外処理はこれぐらいしないと気が済まない

見た感じ、フォーム送信含めた「リクエストとレスポンス」の考え方自体が身についていないようにも見えるので、PHPマニュアルなど参考に、地固めしてください。
プログラムはコピペ切り貼りで動かすのではなく、「書いたとおりに動く」ので。理解してない他人のコードをそのまま持ってきても何も出来上がりません。

投稿2020/12/24 21:38

編集2020/12/24 21:41
m.ts10806

総合スコア80875

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

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

Gshehebnk

2020/12/25 00:56

1をやりたいのですがどうしたらいいのか全くわかりません どこをどうすれば良いのでしょうか
m.ts10806

2020/12/25 01:36

記事は何一つ参考にならなかったのでしょうか。 回答に検索キーワードも書いています。ここで書かなくても優秀な記事はネット上にたくさんありますよ。 あと、最後の文もきちんと読んでください。ここはあくまで「取り組んだ結果起きている問題に対してアドバイスをもらう場」であって、「コードだけもらって終わる場」ではないです。 調べて出てくる内容であれば、そのキーワードだけでも十分アドバイスになりえるとは思いますが、どこまで自身が把握できているのか、やってみたのかは赤の他人である私達は書かれてないと認識できませんので、アドバイスを得た結果自身がどう動き何をしてどうなったのかを質問本文に記載してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問