- ベストアンサー
画面遷移せずに選択画像ファイルを渡す方法
- PHPスクリプトで選択したファイルをbbs.phpで受け取る方法について教えてください。
- GET渡し以外の方法も教えていただきたいです。
- ファイルのアップロードに失敗した場合も処理方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ご提示のプログラムに、肝心のjavascriptによるアップロード部分がか書かれていませんが、 AJaxによるファイルアップロードは予想以上に大変です。 HTML5対応ブラウザであれば、FormDataオブジェクトが使えるので比較的簡単に送信できます。 http://molaovo.hatenablog.jp/entry/20130111/1357913239 しかしIE8以下のような「旧タイプ」ブラウザは内部でiFrameなどを生成して送信する仕組みを作り込まなければいけません。Flashを使う場合もあります。 クロスブラウザ判定などもあるので、普通はjQueryによるファイルアップロード用プラグインを使います。サーバサイドはそのまま使用できますし、アップロード後の画像表示も自由です。 ttp://webchoko-tips.com/2014/01/jquery-fileupload-summary/
その他の回答 (2)
- mpro-gram
- ベストアンサー率74% (170/228)
とりあえず、$filenameに送信されてきたファイル名をそのまま使うのは危ない。とくにバイナリー文字やディレクトリー区切り文字が混入してないかのチェックは重要 file_upload.php 側で、 $filename に何が入ってるかの確認するのが先のような気がします。 ブラウザによっては、送信してこないかも?
お礼
ご回答いただき、ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
ちょっと特殊な処理なので実際には試していませんが 遷移なしで画像を送るならajaxですよね? で、DBと連携しているので戻り値にIDを返してもらえば <img src="loadimage.php?id=xxx">的な呼び出しをすればいいでしょう またサーバー上においておくファイル名も文字コードに依存しない 英数文字のみのものに付け替えることをお勧めします。 (面倒ならidとなる数値と同値でもいいでしょう) ファイル名でマッチングする処理は、インターネット経由では 通用しない場合も多々あるのでやめたほうがいいと思います
お礼
ご指導、ありがとうございました。
補足
【file_upload.php】 <?php $upload_dir = './files/'; $filename = $_FILES['sendfile']['name']; if(move_uploaded_file($_FILES['sendfile']['tmp_name'], $upload_dir.$filename)){ echo '<img src="bbs_test.php?photo=$filename">'; ← 利用させていただきました。 } ?> <script type="text/javascript"><!-- var container = parent.document.getElementById('container'); image = parent.document.createElement('img'); image.src = './<?php print($filename);?>'; container.appendChild(image); //--></script> 【bbs_test.php】 function regist_database(){ ~中略~ $photo = $_GET['photo']; // 添付画像ファイル名 var_dump($photo); ←ここで、ダンプ値がNULL return $photo; } --------------------------------------------------- 上記のように、yambe.jpさんがおっしゃってるように、 イメージタグにクエリーをくっつけて、GET渡ししたのですが、やはり、bbs_test.php側で、$photoの値がNULLなのですが、どうしてなのでしょうか。ご指導お願いできますか?
お礼
詳しいご指導、どうもありがとうございました。 AJAXにつきましては、これから勉強しようと思っております。