投稿日:2017/07/19
画像アップロードボタン
<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’が必要なのか
以下のサイトがすごく丁寧にわかりやすく書かれているので興味ある方は。