なぜかform要素で送信できない

この前、とある用でファイルのアップロード用にページを作っていたのですが、どうしても送信できないという事態が起こりました。

<form enctype="multipart/form-data" action="index.php" method="post">
  <input type="hidden" name="MAX_FILE_SIZE" value="10000000">
  <p>アップロードするファイル : <input type="file" name="upload"></p>
  <p>ファイル名 : <input type="text" name="name"></p>
  <p><input type="submit" value="送信"></p>
</form>

簡単に書けばこんなコードですね。

このファイルは”index.php”として保存し、最初は順調にコーディングしていたわけですが、”送信”をクリックしても、何も起きないのです。最初は2行目の”MAX_FILE_SIZE”がおかしいのかと疑い直してみたものの、変化なし。

次に、もしかして<input type=”file”>のname属性に”upload”は使えないのか??と変な疑問が浮かび、変えてみるもやはり変わりません。

試しにprint_r( $_POST );と書いて結果を見ると、NULLに。

とうとう困り果て、一番上の行に目をやると、<form>のaction属性が”index.php”になっていることに気づき、”/”に変えたところ、思い通りに動作しました。

なぜ動作したかというと、このサイトでは例えば”http://example.net/index.php”でアクセスすると、”index.php”が省略されたURLに転送される仕様になっており、実際に見ているのは”http://example.net/”になります。action属性にあった”index.php”とは別のものとして扱っているらしく、動作しなかったらしいのです。

アップロードするページに”index.php”と名付けることはあまりないですが…

コメント