人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です!フォームから2つのファイルを同時にアップロードし、フォームデータをDBに追記をしたいのですが上手くいきません。アップロードの処理を繰り返す構文と配列になった変数の取出しができていないのが原因かと思われます。(それ以前の問題かもしれませんが…)素人がPHPのサンプルをつぎはぎにしてできたコードは以下の通りです。申し訳ありませんが、どなたかご教授を願えますか?よろしくお願いします!

コードはここからです>>>>http://www.impression.fm/code.html

●質問者: akeyto
●カテゴリ:コンピュータ
✍キーワード:dB PHP アップロード コード データ
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● ホーエンハイム
●100ポイント

$_FILES["image"]["tmp_name"]の扱いに問題があるかと思われます。

PHPの冒頭部分を下記のようにしてみてください。

if (is_uploaded_file(@$_FILES["image"]["tmp_name"][0])) {
 for ($i = 0; $i < 2; $i++) {
 $finfo = pathinfo($_FILES["image"]["name"][$i]);
 $ext = $finfo["extension"][$i];
 $imgae[$i] = $save_dir.$_FILES["image"]["name"][$i];  
 $det_enc = mb_detect_encoding($string, $enc_disp . ", " . $enc_file);
 if ($det_enc and $det_enc != $enc_file) 
 $image[$i] = mb_convert_encoding($image[$i], $enc_file, $det_enc);
 @copy($_FILES["image"]["tmp_name"][$i], $image[$i]);
 }

◎質問者からの返答

返信ありがとうございます!

早速コピーして再編集してみましたが、ページが表示されませんでした。$imageに格納された変数は$image、$image2と振り分ける構文はなくても動くのでしょうか?

申し訳ありませんが、もう一度、ご教授を願います。

再編集した構文は以下のとおりです。 http://www.impression.fm/code.html


2 ● ko8820
●30ポイント

まずは、ファイル1つアップロードするものをつくり

DBには格納しないで、サーバー側にファイルに出力するものを作成して

動作確認できてから

少しずつ拡張していく

http://q.hatena.ne.jp/answer

◎質問者からの返答

返信ありがとうございます!

ファイルを1つアップロードする方法は、なんとか可能になりましたが…

拡張方法がつかめず仕舞いです。。。何か方法をご存知でしたら、ご教授ください!よろしくお願いします。

再編集した構文は以下のとおりです。 http:/www.impression.fm/code.html


3 ● koriki-kozou
●30ポイント

動かさずに整形だけして確認してます


(1)動かない原因

if (is_uploaded_file(@$_FILES["image"]["tmp_name"])) {

に対する閉じ括弧が無いのが問題だと思うけど


(2)その他、今後問題となりそうな部分

(a)@ でエラーをスルーしてしまうと、どこが悪いか判らなくなる

エラーが起こる前提のプログラムは破綻する

issetで変数の存在を事前にチェックをする

or die

などにしたほうがいい

http://jp2.php.net/manual/ja/function.isset.php

(b)インデントは入れる

HTMLのソースを見てもインデント(字下げ)が無いように見えるのだけど、もしもインデント(字下げ)を入れていないならば面倒でも入れたほうがいい

先ほど見つけたのだけど、コピペするだけで整形してくれるオンラインサービスもあるみたい

http://codeassembly.com/examples/beautifier.php

(c)行が分かれる場合は面倒でもインデントと {かっこ}を使うほうが見やすくなる

if ($det_enc and $det_enc != $enc_file) {
 $image[$i] = mb_convert_encoding($image[$i], $enc_file, $det_enc);
}
◎質問者からの返答

返信ありがとうございます!整形&修正してみます!!


4 ●
●50ポイント

1の方の仰る$_FILES["image"]["tmp_name"]の扱いの問題です。

var_dump($_FILES)

などとしてみると、

渡されてきている中身をみることができます。

複数の指定なのでこういうことが起きるのですが、

地味に2つ目のボックスのみでファイルを指定すると、

["tmp_name"][0]

では動かなかったりします。

渡されているハッシュの構造と、渡ってきたものの中身をみて確認していくことが、

この先つまずいても解決できるようになると思います。

デバッガを使ったりしていくと、またレベルが上がりますので、

いろいろお試しください。

http://q.hatena.ne.jp/1276075267

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ