※社内専用

enctype属性

画像アップロードボタン

<input name="hoge" id="hoge"  type="file" size="30">

これこれ。
これを使って画像アップロードしたいけどできない!現象に
はまったことを備忘録。
htmlの常識っぽい、です。
(全然知らなかった…)

 

<form method="post" action=""> 
  <select name="<?= $value ?>"> 
    <option value="">---</option>  
    <option value="<?= $key_type  ?>" <?php selected(get_option($value), $key_type); ?>><?= $val_type ?></option> 
  </select> 
  <input name="<?= $value ?>" id="<?= $value ?>"  type="file" size="30"> 
  <?php submit_button(); ?> 
</form>

(だいぶ端折っているコードなのでご了承)

サブミットボタンを押すと
php側に$_POST、 $_FILES の値が帰ってくるのでそれをどうこうして保存できる、と
各サイトにあるので
画像アップロードに関して$_FILESが返ってくることを期待しました。

しかし $_POST は返ってくるが$_FILESが帰ってこない…
なぜだ。

inputタグのなにか要素が足りないのかなと思い調べてみるがそうでもなさそう。
php側でなにかエラーが起きているのかなと思いデバックしてみるがそうでもなさそう。

上記のコードを見て原因がわかる方は挙手をお願いします




…。



答えはタイトルにあるとおり
enctype='multipart/form-data'
です。

<form method="post" action="" enctype="multipart/form-data"> 

をした瞬間に$_FILES が返ってきました。

 

enctype属性

form要素のenctype属性は、送信データのエンコード・タイプを指定する属性。form要素のmethod属性がpostのときだけ使う。
http://html5.cyberlab.info/elements/forms/form-enctype.html

 

エンコード・タイプ

application/x-www-form-urlencoded:
全ての文字をURLエンコードする。初期設定値。

multipart/form-data
フォームにファイルを送信する機能がある場合に指定する。

text/plain:
スペースだけ「+」記号に変換する。その他の特殊文字はエンコードしない。

 

 

なぜenctype=’multipart/form-data’が必要なのか

以下のサイトがすごく丁寧にわかりやすく書かれているので興味ある方は。

http://mugenup-tech.hatenadiary.com/entry/2014/08/28/100910