• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セッションを利用したファイルの受け渡し)

セッションを利用したファイルの受け渡し

このQ&Aのポイント
  • セッションを利用してデータベースにデータを登録するプログラムを作成しており、画像のアップロード部分の処理で困っています。
  • 問題点として、画像がある場合は画像URLを登録し、ない場合は空にしたいのですが、パターン1ではどちらの場合でも「写真のアップロードはありません」となりデータベースへの登録も空となります。
  • 一方、パターン2では、画像がある場合は正常に表示されデータベースに登録できますが、画像がない場合は表示される部分の文字列がデータベースに登録されてしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#244856
noname#244856
回答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-upload.errors.php それを含め、既存のコードではあまりにもエラーチェック処理が甘すぎます。 下記の処理を理想にコーディングしてください。 (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

time606024
質問者

お礼

ご回答ありがとうございます! $_FILESに['error']要素があったのですね。 無事に解決しました。 その他、色々とご教示いただきましてありがとうございます! とても参考になりました。

その他の回答 (1)

回答No.2

もしかして、formタグに、「enctype="multipart/form-data"」属性を入れ忘れてませんか?

time606024
質問者

お礼

enctypeは何とか入れておりました。 無事に解決しました。 ご回答ありがとうございました!

関連するQ&A