下記のようなPHPスクリプトにおいて、ファイル選択ダイアログで選択したファイルを
bbs.php で、$photo変数をGETで受け取るにはどうすればいいのでしょうか?ちなみに今のところ、受け取った
$photo変数の中身はNULLです。
GET渡し以外にも方法があれば教えていただきたいです。(たとえば、$_SESSION['']変数を利用するなど)
【bbs.php】
<td><b>画像を添付</b></td>
<!-- インラインフレーム -->
<td><iframe src="test.html" width="460" height="40" frameborder="no" scrolling="no">
フレームを表示できないブラウザへのメッセージ
</iframe>
</td>
~
<?php
$photo = $_GET['photo']; // 添付画像ファイル名
?>
---------------------------------------------------------------
【test.html】
<html>
<head><title>ファイルのアップロード</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="white">
<table rows="1" cols="3" height="30" border="0">
<tr>
<td valign="top">画像選択(10MB以下)</td>
<form action="./file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame">
<!-- upload_frame : ダミーフレーム -->
<input type="hidden" name="max_file_size" value="10240000">
<td valign="top"><input type="file" name="sendfile" /></td>
<td valign="top"><input type="submit" value="送信" /></td>
</form>
</tr>
</table>
<div id="container"></div>
<iframe name="upload_frame" sytle="display:none;"></iframe>
</tr>
</form>
</table>
</body>
</html>
----------------------------------------------------------
【file_upload.php】
<?php
$upload_dir = './files/';
$filename = $_FILES['sendfile']['name'];
if(move_uploaded_file($_FILES['sendfile']['tmp_name'], $upload_dir.$filename)){
echo "画像".$filename."をアップロードしました。<br><br>";
// データベースの画像カラムを挿入する
$con = mysql_connect("~", "~", "~"); // ローカルのMySQLデータベースサーバーに接続する
mysql_select_db("~"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する
// ラストレコードの画像ファイルカラムを更新する
$sql = "UPDATE bbstbl SET(photo=$_FILES['sendfile']['name']) WHERE ORDER BY sid limit 1;";
$result = mysql_query($sql, $con);
$rowco = mysql_affected_rows($con); // テーブルの行数
mysql_close($con); // データベースとの接続を解除する
//header("Location: bbs.php?photo=$filename");
}else{
echo "画像のアップロードに失敗しました。<br><br>";
}
?>
<script type="text/javascript"><!--
var container = parent.document.getElementById('container');
image = parent.document.createElement('img');
image.src = './<?php print($filename);?>';
container.appendChild(image);
//--></script>
-------------------------------------------------------------
No.1
- 回答日時:
ちょっと特殊な処理なので実際には試していませんが
遷移なしで画像を送るなら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なのですが、どうしてなのでしょうか。ご指導お願いできますか?
No.2
- 回答日時:
とりあえず、$filenameに送信されてきたファイル名をそのまま使うのは危ない。
とくにバイナリー文字やディレクトリー区切り文字が混入してないかのチェックは重要file_upload.php 側で、 $filename に何が入ってるかの確認するのが先のような気がします。
ブラウザによっては、送信してこないかも?
No.3ベストアンサー
- 回答日時:
ご提示のプログラムに、肝心のjavascriptによるアップロード部分がか書かれていませんが、
AJaxによるファイルアップロードは予想以上に大変です。
HTML5対応ブラウザであれば、FormDataオブジェクトが使えるので比較的簡単に送信できます。
http://molaovo.hatenablog.jp/entry/20130111/1357 …
しかしIE8以下のような「旧タイプ」ブラウザは内部でiFrameなどを生成して送信する仕組みを作り込まなければいけません。Flashを使う場合もあります。
クロスブラウザ判定などもあるので、普通はjQueryによるファイルアップロード用プラグインを使います。サーバサイドはそのまま使用できますし、アップロード後の画像表示も自由です。
ttp://webchoko-tips.com/2014/01/jquery-fileupload-summary/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
Struts2 ファイルアップロード
-
FTPClientで転送結果(OKかFAIL)
-
サーバーにアップロードしたい
-
ファイルのアップロードに関して
-
ファイルのアップロードがどう...
-
ファイルアップロードの上限を...
-
ftpでアップロードが出来ない
-
unlinkでどうしてもファイルが...
-
VS2005ASPでファイルのドラッグ...
-
CGI::Liteでファイルのアップロ...
-
PHPで音楽ファイルのアップ...
-
one drive のアップロード失敗...
-
ファイルのアップロード処理を...
-
ファイルアップロードしたもの...
-
PHP8を使うと、大量のWarningが...
-
phpでget_headers()が使えない?
-
PHPのif文でその処理を途中で抜...
-
Apacheでhttp://localhost/が表...
-
バッチを用いたフォルダの自動移動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onedrive にexcelファイルをア...
-
ファイルアップロードの上限を...
-
youtubeに音声のみのmp4ファイ...
-
one drive のアップロード失敗...
-
FTPClientで転送結果(OKかFAIL)
-
VBでクラウドストレージにア...
-
ftpでアップロードが出来ない
-
アップロードできるファイルサ...
-
ファイルをGET送信でアップロー...
-
FTP接続の例外処理
-
「クラウドにアップロード」」...
-
PHP 画像アップロード 重複防止
-
aws cloud9というものを使って...
-
ファイルサイズがpost_max_size...
-
ファイルアップロードしたもの...
-
csvファイルをMySQLにインポー...
-
全角ファイル名をアップロード...
-
ファイルのアップロードで、フ...
-
携帯からファイルアップロード...
-
SmartyでHTMLソースの変更が反...
おすすめ情報