- ベストアンサー
POSTでファイルアップロード
fedora7、PHP5、Mysql5を使っています。 画像ファイルやコメント、タイトル等を<form method="POST" action="regchk.php">で、渡すreg.phpファイルと、それお受け取り画像ファイルサイズやコメント文字数等をチェックするregchk.phpファイルがあります。 reg.phpの<form >部分が、 <form method="POST" action="regchk.php" enctype="multipart/form-data"> <table > <tr> <th>写真のファイル</th><td><!-- MAX_FILE_SIZE must precede the file input field --> <input type="hidden" name="MAX_FILE_SIZE" value="100000" /> <input type="file" name="uploadfile" size="60"></td> </tr> <tr> <th>タイトル </th><td><input type="text" name="title" size="60" maxlength="50"></td> </tr> <tr> <th>コメント </th><td><textarea rows="7" cols="60" name="comment"></textarea></td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" name="reg" value=" 登録 "> <input type="reset" value=" クリア "> </td> </tr> </table> </form>です。 そして、regchk.php の$_POST['uploadfile'] で、画像ファイルがアップされているか、チェックしたいのです。以下のように。 $uploadfile = $_POST["uploadfile"]; echo $uploadfile."<br>"; ----→空白が表示される //エラーコード 検証用 echo $_FILES['uploadfile']['error']."<br>"; ---→ 0が表示される echo $_FILES['uploadfile']['tmp_name']."<br>"; --→ /usr/tmp/phpアルファベット echo $_FILES['uploadfile']['size']."<br>"; ----→9894 //入力データのチェック $errmsg = ""; if (strlen($uploadfile) == 0) { $errmsg .= "写真のファイルが指定されてません.<br />"; } ↑このif文でエラー文字列が、$errmsg に入る。 アパッチのerror_logを見ると、 Notice: Undefined index: uploadfile in /home/user1/public_html/regchk.php on line 5, と、出ており、5行目とは $uploadfile = $_POST["uploadfile"]; のことです。 自分は、やり方が根本的に間違っているのでしょうか? ご教授の方、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
$_POSTではなくて、$_FILESにすればいいんじゃないでしょうか? multipartで送られてくると思うので、$_FILESの方にファイルデータが入っていると思います。
その他の回答 (2)
- teala
- ベストアンサー率42% (6/14)
皆さんの回答ですでに問題は解決していると思いますが、 自分も同じ内容で悩んでいたときに参考にしたサイトを載せておきます。 全体的にポップな雰囲気なので、 見やすいですし、内容もわかりやすく解説されていて、 とてもおすすめです^^
お礼
ありがとうございます。 私も上記のサイトは拝見しましたが、いまいち理解してなかったようです。
- shimix
- ベストアンサー率54% (865/1590)
ANo.1の方も書かれていますが、アップロードされたファイルは$_FILES['userfile']['tmp_name']の名前でサーバに保存されています。それをmove_uploaded_file()で自分で保存したい場所に移動させます。マニュアルのサンプルコードを熟読してください。 http://www.php.net/manual/ja/features.file-upload.php (Example#2のコード)
お礼
ありがとうございます。 やはり、自分は根本的に間違ったやり方をしていたのですね。 上記のサンプルも読んだつもりでした。 もっとがんばります。
お礼
ありがとうございます。 自分は $_POSTも$_FILESも両方使おうとしていました。 まったく $_FILES の役割を理解していなかったようです。 がんばりたいと思います。