![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
セッションを利用してデータベースにデータを登録するプログラムを作成しており、
画像のアップロード部分の処理で困っております。
画像がある場合は画像URLを登録、ない場合は空にしたいのですが、
下記のソースの問題点や解決策がお分かりになる方、ぜひご教示ください。
■submit.php
・
・
if(empty($error)){
if(isset($_FILES)){
$image = date('YmdHis') . $_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], 'picture/' . $image);
//パターン1 $_SESSION['image'] = $image;
}
//パターン2 $_SESSION['image'] = $image;
header('Location: check.php');
}
・
・
<input type="file" id="image" name="image" />
<input type="submit" value="確認する" />
・
・
■check.php
if(isset($_SESSION['image'])){
echo '<img src="picture/' . $_SESSION['image'] . '" />';
} else {
echo '写真のアップロードはありません。';
}
・
・
<input type="submit" value="登録する" />
パターン1の場合
画像があっても無くても、「写真のアップロードはありません。」となりデータベースへの登録も空となります。
パターン2の場合
画像がある場合は、正常に「date('YmdHis')[imageの名前].jpg」が表示されデータベースに登録できます。
画像がない場合、check.php上では、<img src="picture/[date('YmdHis')の部分]のみ" />で表示され、date('YmdHis')の文字列がデータベースに登録されてしまいます。
No.1ベストアンサー
- 回答日時:
ファイルが選択されていなくてもフォームから
<input name="upfile" type="file" />
が送信されれば $_FILES['upfile'] は必ず存在しています。
選択されていないときは $_FILES['upfile']['error'] の値が
「UPLOAD_ERR_NO_FILE」(int 4) になるだけです。
http://www.php.net/manual/ja/features.file-uploa …
それを含め、既存のコードではあまりにもエラーチェック処理が甘すぎます。
下記の処理を理想にコーディングしてください。
(1) isset($_FILE['upfile']) でupfileが送信されているかどうかチェック。
フォームにupfileが含まれているかどうかを見るだけで、
ファイルが選択されているかどうかは関係ない。
(2) !is_array($_FILE['upfile']['error']) で配列で送信されていないかチェック。
<input name="upfile[]" type="file" />
のように改変されたフォームで送信されたときに配列になってしまい、
想定外の挙動を示す恐れがあるため。
(3) $_FILE['upfile']['error'] の値をチェック。
(上記URLで述べた定数が該当)
(4) getimagesize($_FILE['upfile']['tmp_name']) がFALSEでないか、
またそれが配列(正常時)である場合要素「mime」の値が
「image/png」「image/gif」「image/jpeg」のどれかに該当しているかチェック。
上記のフローはこちらで詳しく説明しています。
http://qiita.com/mpyw/items/939964377766a54d4682
http://qiita.com/mpyw/items/73ee77a9535cc65eff1e
【その他】
1.
header関数の後にexit命令を入れないとそのままコードが実行されてしまいます。
2.
「入力」「確認」「実行」
を3ファイルで分けてheader関数で飛ばしてコントロールしている場合、
バリデーション処理は
「確認」
だけでなく
「確認」「実行」
の両方で行う必要があります。
「実行」に直接リクエストを送られる可能性も想定してください。
個人的には、画像アップロードが絡んでくるのに
わざわざ「確認」ページを作るメリットがあるのか疑問に思いますね・・・
バリデーションを楽にしたいならばファイルをまとめちゃうという手法もあります。
http://bloggdgd.blog28.fc2.com/blog-entry-289.html
ご回答ありがとうございます!
$_FILESに['error']要素があったのですね。
無事に解決しました。
その他、色々とご教示いただきましてありがとうございます!
とても参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP 'member_picture/'に/がありますが 、「スラッシュ」は必要でしょうか? 1 2022/11/27 04:32
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- PHP 掲示板を資料を参考にして開発中ですが、画像がアップされません? 1 2022/11/21 06:44
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
透過PNGが透過されない!!
-
VBAでJPGサイズ変更
-
Illustratorで文字と画像を流し...
-
phpMyAdminに画像を保存できない
-
GDの画像変換でサーバーに負荷
-
PHP+PostgreSQLを使ってPDFファ...
-
C# Excelファイルへの画像挿入。
-
ビットマップ画像を読み込むプ...
-
GDI+を使ったビット数とDPIの扱い
-
Borland C++ Compilerで画像を...
-
C#とJavaで、MP3タグの画像を表...
-
ウィンドウサイズを取得して、p...
-
携帯サイトの画像アップロード[...
-
PHP echo バックスラッシュの使...
-
getimagesizeで画像がなかった...
-
curlで画像が表示されないので...
-
フォルダーに入った画像名の取...
-
PHPで画像コピーについて
-
ファイルアップローダー
-
openCVの超解像処理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
VBAでJPGサイズ変更
-
拡張子php画像をjpg画像等に変...
-
透過PNGが透過されない!!
-
SQLiteに画像を格納したい
-
アップロード画像数でCSSを分け...
-
PythonのTkinter詳しい方へ。画...
-
ビットマップ画像を読み込むプ...
-
Illustratorで文字と画像を流し...
-
C# Excelファイルへの画像挿入。
-
php,mysqlにて画像パス保存/表...
-
pictureboxに表示した画像のフ...
-
OpenGLで描いて画像ファイル出力
-
ListViewコントロールでサムネ...
-
BLOBデーターの画像の表示方法...
-
「imagejpeg」(GD)で作成した...
-
【PHP】画像が表示されず「×」...
-
PHP MySQLに画像を直接保存
-
GDを使って画像の背景を透過さ...
-
★PHP★画像アップロードの際に余...
おすすめ情報