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

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

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

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

phpMyAdmin

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

PHP

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

Q&A

解決済

5回答

29683閲覧

mysqlを利用しDBに画像パスを保存するには?

beginner_39

総合スコア77

MySQL

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

phpMyAdmin

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

PHP

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

0グッド

2クリップ

投稿2017/06/23 04:41

アドバイスをください。。

php、mysql、phpMyadmin開発の新参者です。

商品登録システムを開発しております。
mysqlを利用して(phpMyadmin)、DBに画像パスを保存しようと思っております。

構築方法としましては、
①画像パスを格納するテーブルを作成する
②ftpサーバーに、実際に登録(表示させたい画像)する画像ファイルを保存する
③商品登録ページより画像パスを入力し、(絶対パス?)商品登録を行う

上記のような流れで構築しようと思っております。
ただ、画像のバイト数や命令規則、 正規表現?などなど、
注意が必要とのgoogleページにも書いてありました。
上記方法で構築は可能になるのでしょうか?
もしくは別でテーブルを作る必要があるのでしょうか?

経験豊富な開発者様より厳しいお言葉を受けるかもしれませんが、
DBを使用することが今回が初めてで、試行錯誤勉強させていただいております。

お力をお貸しいただけますと大変嬉しいです。
宜しくお願い致します。

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

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

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

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

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

beginner_39

2017/12/04 23:42

mts10806さん、こんにちは。実際にはまだ解決はできていないところですが、このまま質問を掲載し続けるのは。と感じ、ベストアンサーをつけさせていただきました。皆様からいただいた貴重なご回答を元に今再度一から勉強し直しているところです。ご回答が遅くなり申し訳ございません。
m.ts10806

2017/12/04 23:56

質問者的に未解決なのに「解決済み」となっている方が良くないと思います。回答する側としては解決するまでフォローはするつもりですので、もし分からない点が出てきた場合は気兼ねなく質問してくださいね。
beginner_39

2017/12/05 03:10

mts10806さん、心強いお言葉大変ありがとうございます。もしわからないことがあれば、ツールを利用してご質問させていただきます。追記で大変申し訳ございませんが、この場をお借りして感謝申し上げます。よろしくお願いいたします。
guest

回答5

0

ただ、画像のバイト数や命令規則、 正規表現?などなど、
注意が必要とのgoogleページにも書いてありました。

このへんがちょっとよくわからないのですが、
DBに画像パスを保存することはもちろん可能です。
varcharでパスの長さを考慮して文字列の長さを決めてテーブル定義すれば問題ありません。

テーブルに関しましてはデータベース設計によると思います。
例えば、1商品に複数の画像がある場合
①商品テーブルに画像のパスを格納するカラムが複数ある
②商品テーブルのユニークキーと画像パステーブルの商品識別が紐づく形で画像パステーブルを作成する
などの方法があります。

Aという商品のid(ユニークキー)が00001の場合で、Aという商品の画像の登録が3枚必要な場合

商品テーブル
productId | productName | pathA | pathB | pathC
00001 | A | ./imgA | ./imgB | ./imgC


商品テーブル
productId | productName
00001 | A

画像パステーブル
productId | path
00001 | ./imgA
00001 | ./imgB
00001 | ./imgC

のような感じでしょうか。

投稿2017/06/23 04:51

s.t.

総合スコア2021

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

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

beginner_39

2017/06/23 06:46

アドバイス、誠にありがとうございます! テーブルまで記載いただき大変わかりやすいです! 構築する上である程度イメージがつかめました! 参考にさせていただきます!
guest

0

「画像パス」とはいえ単なる文字列なので、プログラム側で適切に名前を払い出してあげて、そのまま置き場所を保存すればいいかなと。
また、画像の置き場や画像の命名規則などをカテゴリーやIDなどできちんとつけてあげれば問題ないかと思います。
画像ファイル名をローカルファイルの名前のまま保存することはオススメできません。
あくまでプログラム側で適切に(重複しないようにとか文字数気をつけるとか)命名してあげましょう。
画像のアップロードはformからの送信がベターですね。

最近どこかでも書きましたが、下記、参考にしてください。

一定のルールを設ける:

  • アップロードした画像の置き場は決めておく(1ディレクトリに集中しすぎないように分散)
  • アップロード時に画像をリネームして命名規則(例えばレコードのIDやカテゴリ名など)に則る

こうすると、①拡張子文字列だけを保存しておくというやり方になります。
また、②拡張子まで限定した場合はそれすら不要にできたりします。

商品に対する画像の保管を例に解説します。

①の例
画像名は画像ID、商品コードでディレクトリをわける
./images/0001/1.jpg
./images/0001/2.png
./images/0002/3.gif

「images」「商品コード」に保管すると決めているので保管しなくてOK。
また「画像ID」でファイル名を命名しているのでこれも保管しなくてOK。
画像マスタに画像IDと拡張子だけ保存しておき、商品マスタには画像IDを保管しておきます。
この場合、画像が複数あるので1カラムに何か区切り文字列で区切ってもいいですし、枚数に制限があるならimage1,image2などのカラムにそれぞれ対応する画像IDを入れておけば、
商品マスタから画像マスタを探して適切な拡張子を取得できます。
(画像マスタに商品コードを入れて商品マスタには画像関係の情報を持たないのでもいいですね)

また②の例では「jpgに限る」というようなルールを設けておくと拡張子は全て同じなので
拡張子すら保存は不要という意味となります。

要は、どこまでルールを作るか、どのような画像を保管するか、どのようなサイトか、、、ですね。
画像名は任意でつけるような仕組みの場合は当然画像名の保管も必要ですし、適宜対応が必要です。

あと、ファイルアップロードについての記事も参考にしてください。

投稿2017/06/23 05:08

編集2017/06/23 05:14
m.ts10806

総合スコア80854

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

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

beginner_39

2017/06/23 06:54

アドバイス、誠にありがとうございます! 名前の統一性、アップロード場所、拡張子の統一、 不規則にならないよう、しっかりとルールを設けたいと思います。 また別で参照URLまで教えていただき、誠にありがとうございます! 勉強させていただきます!
guest

0

画像メディア用のテーブルを作るのが常套手段ですが、
シンプルなものでしたら、商品IDをそのままファイル名にしてしまう手もあります。
商品IDが1なら1.jpg、2なら2.jpgですね。
画像が複数ある場合は、商品IDをフォルダにして、その中に画像を格納する手もあります。

投稿2017/06/23 05:04

naga3

総合スコア1293

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

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

beginner_39

2017/06/23 06:52

アドバイス誠にありがとうございます! 参考にさせていただきます!
guest

0

ベストアンサー

FTPを併用するよりは、ブラウザから画像の登録が出来た方が登録作業としては楽かなと思います。
なので、流れとしてはこんな感じが良いのではないでしょうか。

①画像パスを格納するテーブルを作成する
②商品登録ページより画像を選択し、商品登録を行う
③サーバ側で送信された画像ファイルを然るべき場所に保存し、ファイル名をDBに登録する

ここで敢えてファイル名と書きましたが、パス付で登録する必要はないです。
格納場所はわかっているので、使う場所でパス名を付けて加工すればよいです。
ただ格納場所が1つではなく複数ある場合は、あるフォルダからの相対パスで書いた方が良いでしょう。

以下のようなフォルダ構成ならxxxx1.jpgを登録する。
~/image/xxxx1.jpg
~/image/xxxx2.jpg
~/image/xxxx3.jpg

以下のようなフォルダ構成なら1/xxxx1.jpgを登録する。
~/image/1/xxxx1-1.jpg
~/image/1/xxxx1-2.jpg
~/image/2/xxxx2-1.jpg
~/image/3/xxxx3-1.jpg

ただ、画像のバイト数や命令規則、 正規表現?などなど、

具体的にどのようなことを言っているのかわかりませんが、ファイル名を登録するだけなのでそこまで気にする必要はないと思います。
ファイル名が登録できるだけの長さがあれば良いでしょう。

投稿2017/06/23 05:03

ttyp03

総合スコア16998

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

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

beginner_39

2017/06/23 06:50

アドバイス、誠にありがとうございます! 管理する上で、画像ファイルの統一性は必須と感じました! 図で表していただきありがとうございます! また、 >>〜画像のバイト数や命令規則、 正規表現?〜 については特にきにすることではないとのことですので、 まずはパス保存ができるようにがんばってみます!
guest

0

私も初心者ながら画像アップロードは経験ありますので気づいた点を。

プレビュー表示する・しないも考慮されてますでしょうか?
この辺が面倒くさいです。
例えばプレビュー表示後、やっぱり登録しない→画像はftpサーバに残ってますけど!

あと絶対パスはやめときましょう。変更に弱いです。

他の方がまたアドバイスくださると思います。

頑張って下さい。

投稿2017/06/23 04:51

pecchan

総合スコア568

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

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

beginner_39

2017/06/23 06:47

アドバイス、誠にありがとうございます! プレビューの件については全く考えていませんでした。。 もしプレビューも必要になれば、構築の仕方もだいぶ変わってきますね。 参考にさせていただきます!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問