• ベストアンサー

ファイルアップロードについて

ファイルアップロードについて質問させて下さい。 ID、ファイルアップロードの機能の2つがあります。 ファイルを指定し、submitボタンを押下すると「b.php」に遷移します。 ファイルをアップロードした場合には遷移をせず ID、画像パスが入力されている場合のみ「b.php」に遷移したいのです。 入力チェックはjavascriptで行っていますが、その場合には「action=""」として javascript側で遷移するしか方法は無いのでしょうか? ---a.php---- <form enctype="multipart/form-data" action="b.php" method="post" name="a"> <input type="hidden" name="MAX_FILE_SIZE" value="50000000" /> <table> <tr> <th>ID</th> <td><input type="text" name="ID" value=""></td> </tr> <tr> <th>画像</th> <td><input type="file" name="img" value=""> <input type="submit" name="upload" value="upload"> </td> </tr> </table> <a href="#" onClick="javascript:check('a');"><img src="button.jpg"></a> </form> お手数ですが、ご教授よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

ANo.1です 蛇足ですが「onsubmitでチェックしている」というのは、b.phpで入力チェックを省いていいことにはなりません。キチンとチェックして不備があればa.phpに戻してください。

その他の回答 (2)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.3

>IDを入力する前に画像をアップロード >しようとするとID、fileの入力チェックを行ってしまうため、 >アップロード(うまく出来たと記憶しています。)と同時に >エラーメッセージも表示されてしまうため、 もし本当にそういう動作になっていたとしたら、JavaScriptのチェックが間違っています。return falseすればsubmitしませんので、アップロードされません(phpに引き渡すPOST自体が発生しない)。submitしているのであれば、JavaScriptがおかしいです。 もちろん(前述のとおり)JavaScriptが動作しなくても「キチンとしたエラー処理を行う」ようにphpを作成するのが基本です。

NeilMania
質問者

お礼

ご回答ありがとうございます。 「return falseすればsubmitしませんので、アップロードされません」 確かに戻り値がfalseなので、submitはされないですね。 うまくアップロードした時には、javascriptのチェックを外していたのかもしれません。 色々試行錯誤しすぎて記憶があやふやで申し訳ないです…。 色々サイト見たり本屋で調べたりはしましたが、自分が想定していた画面UIは あまり存在しないようなので諦める事にします。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

form要素のonsubmitでチェックすればいいのでは? <form enctype="multipart/form-data" action="b.php" method="post" onsubmit="return check();"> check()でreturn falseすればsubmitはキャンセルされます。

NeilMania
質問者

お礼

ご回答ありがとうございます。 <form enctype="multipart/form-data" action="b.php" method="post" onsubmit="return check();"> ここに書き込む前に上記のパターンも試してみたのですが、IDを入力する前に画像をアップロード しようとするとID、fileの入力チェックを行ってしまうため、アップロード(うまく出来たと記憶しています。)と同時にエラーメッセージも表示されてしまうため、他に方法があるのか質問させていただいた次第でございます。 アップロードせずにDB側で持つ事も考えましたが、あまりセキュリティ上好ましくないようなので 何が一番良いのやら…と言った感じで迷っています。

関連するQ&A

  • Yes/No型を使ってアップロード

    はじめまして。 下記にhtmlを書かせていただいてますが、このhtmlの『アップロード』のボタンを押すと 1. データベース『mdb』のYes/No型にチェックが入る 2. Yes/No型にチェックが入ったものはアップロードされる ようにすることはできるでしょうか?また、何か参考になるサイト様などがあれば 教えていただきたいのです。 おわかりになる方、よろしくお願いします。 下記のような↓フォームです。 ---------------------- <table> <TR> <TD> <INPUT type='hidden' NAME='UPDATE_ID' VALUE='1'> <center><INPUT TYPE='submit' VALUE=' アップロード '><br><center> <p></p> </TD> <TD>登録ファイル1</TD></FORM> <FORM ACTION='' METHOD='POST'> <TR> <TD> <INPUT type='hidden' NAME='UPDATE_ID' VALUE='2'> <center><INPUT TYPE='submit' VALUE=' アップロード '><br><center> <p></p> </TD> <TD>登録ファイル2</TD></FORM> <FORM ACTION='' METHOD='POST'> <INPUT type='hidden' NAME='UPDATE_ID' VALUE='3'> <TR> <TR> </FORM> <TR> </table>

  • 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"]; のことです。 自分は、やり方が根本的に間違っているのでしょうか? ご教授の方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • form id、nameの番号振りなおし

    jqueryとphpにてフォームを作成しています。 フォームの追加、削除できるシステムを作っており、 フォームの追加はできたので、削除した際のinputのnameやidの番号を振り直しができず困っています。 商品1<br> <a href="javascript:void(0);" class="del" id="del_1">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][1][sir]" value="<?php echo $item[data][1][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][1][name]" value="<?php echo $item[data][1][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][1][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> <a href="javascript:void(0);" id="add">フォームの追加</a> としており、 「フォームの追加」をクリックすると 商品2<br> <a href="javascript:void(0);" class="del" id="del_2">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][2][sir]" value="<?php echo $item[data][2][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][2][name]" value="<?php echo $item[data][2][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> 商品3<br> <a href="javascript:void(0);" class="del" id="del_3">削除</a> <table> <tr> <th>商品番号</th> <td><input type="text" name="item[data][3][sir]" value="<?php echo $item[data][3][sir]; ?>"></td> </tr> <tr> <th>商品名</th> <td><input type="text" name="item[data][3][name]" value="<?php echo $item[data][3][name]; ?>"></td> </tr> <tr> <th>商品個数</th> <td> <select name="item[data][2][num]"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select> </td> </tr> </table> ができるようにPHPにてSESSION管理をおこなっています。 追加はできたのですが、 上記のフォーム4つほど出した後に商品2を削除した場合の商品1、商品3、商品4の各nameの番号(item[data][*][sir]、item[data][*][name]、item[data][*][num]の*部分) 振りなおしができず困っています。 いくらやってもできないため、どなたかソースを教えていただけないでしょうか。 宜しくお願いいたします。

  • ファイルのアップロードについて

    phpのmove_uploaded_fileを使用してアップロードをしようと思うのですがアップロードが出来ません。 状況は ローカル環境のwindowsでのアップロードは行えるがlinuxでは失敗してしまいます。 move_uploaded_fileからはエラーは出力されていません そもそもmove_uploaded_fileが成功しているのになんでアップロードされていないのか分かりません。 //■HTML <form name="form1" method="post" action="upload.php" ENCTYPE="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="10485760" /> <table class="frm" id="tbl"> <tr><th>ファイル1<div id="image"></div></th> <td> 画像<input id="img_1" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td></tr> <tr> <th>ファイル2<div id="image"></div></th> <td> 画像<input id="img_2" type="file" name="image[]" class="fname" onChange=imageChange(this); /><br /> </td> </tr> </table> </form> //■phpで以下のコードを実行すると oreach ($_FILES["image"]["error"] as $key => $error) { //複数のファイルをアプロード if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["image"]["tmp_name"][$key]; //テンポラリファイルパス $name = $_FILES["image"]["name"][$key]; //アップロードファイル名 $size = $_FILES["image"]["size"][$key]; //アップロードファイルサイズ $ermsg = $_FILES['image']['error'][$key]; //エラーメッセージ echo "アップロードファイル名".$name."\n" ; echo "アップロードファイルsize" .$size ."\n" ; echo "errmsg= .$ermsg."\n" ; // ファイルアップロード $cnt++; if ( move_uploaded_file($tmp_name, "../1/33/.$cnt."2upload.jpg ")){ //ファイルアップロード echo "アップロード成功 .$ermsg."\n" ; echo "  テンポラリファイル="$tmp_name."\n"; echo "  アップロードファイル="$dir_img."/".$cnt.UPLOAD_FILE_NAME."\n"; } else { echo 1; error_log("upload error! \n", 3, MATCHING_ERROR_LOG); exit; } } } exit; ■結果 アップロードファイル名thum6.jpg アップロードファイルsize=10104 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/phpMvCzgo   アップロードファイル=../1/33/1upload.jpg アップロードファイル名 thum3.jpg アップロードファイルsize=11528 errmsg= 0 アップロード成功   テンポラリファイル=/tmp/php5Q4kIL   アップロードファイル=../1/33/2upload.jpg テンポラリの/tmpは777のため権限に問題ないです php.iniの設定 upload_max_filesize=2m post_max_size=8m memory_limit=128m 今回のアップロードファイルのサイズから問題なし file_uploads=onなので問題ありませんでした これでなにかわかる方いらっしゃいましたら教えてください。

    • ベストアンサー
    • PHP
  • 【フォーム】PHPで確認画面をだした後にボタンを

    ほぼ初心者のものです 下記のようなフォームをつくりました <form action="regist.php" method="post"> <input type="radio" name="08241" value="A11"/> <input type="radio" name="08241" value="B11"/> <input type="radio" name="08241" value="C11"/> <input type="radio" name="08241" value="D11"/> <input type="radio" name="08241" value="E11"/> <input type="radio" name="08241" value="F11"/> <input type="submit" value="登録する" /> そしてこれらを確認するためにregist.phpを作成し <table width="250" border="1"> <tr> <td width="250">選択したもの</td> </tr> <tr> <td><?php echo $_POST["08241"] ?></td> </tr> <tr> <td>●●●</td> と記載し、選んだものを表示できるようにしました ここからが皆様にお力を借りたいところなのですが フォームから「A11」が選択されて確認画面に「A11」と表示されたとき ●●●のところに下記のような情報を含んだボタンを表示させたいんです <form name="a11" action="/products/detail.php" method="post" > <input type="hidden" name="mode" value="cart" /> <input type="hidden" name="product_id" value="137" /> <input type="hidden" name="product_class_id" value="634" /> <input type="hidden" name="quantity" value="1" /><br /> <input type="submit" value="決定する" onClick="alert('選択しました')" /> </form> このボタン情報はA11~F11まであって、product_idやproduct_class_idは それぞれ異なっています どこかに一覧を作成しておいて form nameで一致したものを表示させるといった やり方なのかなとは思うのですが、その方法がわかりません PHPを使えばいいのかJavascriptがよいのかもあわせ、記述方法などをご教授いただけませんでしょうか? どうかよろしくお願いいたします

    • 締切済み
    • PHP
  • POSTによるファイル・アップロード、ファイルが2回送信される。

    POSTによるファイル・アップロード、ファイルが2回送信される。 <form method="POST" action="file_up.cgi" enctype="multipart/form-data" target="_blank"><table width="650" border="0" cellspacing="3" cellpadding="3" bgcolor="#AAAAFF" align="center"> <tr align="center"><td colspan="2"><b>ファイル・アップロードのサンプル(実験中!)</b></td></tr> <tr><td align="right">ファイル名:</td><td align="left"><input type="file" name="NAME" style="background-color:aqua"></td></tr> <tr><td></td><td><input type="submit" value=" 送信 "><input type="reset" value="クリア"></td></tr></table></form></body></html> 参照ボタンでファイルを選択し、「送信」し、サーバー側でメッセージ・ボディーを見ると選択したファイルが2回送られてきています。 全く無駄な送信だと思うのですが、何か設定があるのでしょうか? それとも仕様でしょうか? 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • HTMLでテーブルの並び替え

    HTMLでテーブルの並び替えで質問です。 以下テーブルの1行目各項目名をクリックすると対象列の昇順、さらにクリックで降順、再度クリックで昇順が行いたいと思っております。 <form name="nForm"> <table> <thead> <tr><th>項目A</th><th>項目B</th><th>項目C</th></tr> </thead> <tbody> <tr><td>20</td><td>い</td><td><input type="text" id="TX[0]" name="TX[0]" value="20"></td></tr> <tr><td>30</td><td>あ</td><td><input type="text" id="TX[1]" name="TX[1]" value="50"></td></tr> <tr><td>10</td><td>お</td><td><input type="text" id="TX[2]" name="TX[2]" value="30"></td></tr> <tr><td>55</td><td>え</td><td><input type="text" id="TX[3]" name="TX[3]" value="10"></td></tr> <tr><td>90</td><td>う</td><td><input type="text" id="TX[4]" name="TX[4]" value="15"></td></tr> </tbody> </table> </form> いくつかの方法を試してみたのですが思った結果が出ない為お知恵をお借りできないでしょうか? http://jsajax.com/Articles/jQueryTableSorter/1120 の方法は試行してみましたがテキストフィールドの並び替えがnameの値で並び替えが掛ります。 value(変動値)での並び替えを行うことが必要です。

    • ベストアンサー
    • HTML
  • PHPでMySQLにデーターを追加するところで壁に当たってしまいました

    PHPでMySQLにデーターを追加するところで壁に当たってしまいました。 PHP5.3&MYSQL5.1 1.フォームへ入力 2.確認画面 3.MySQLへデーター追加 1.form <html> <head><title></title></head> <body> <form method="post" action="conf.php"> <table> <tr><th>番号</th><td><input type="text" name="id" /></td></tr> <tr><th>タイトル</th><td><input type="text" name="title" /></td></tr> <tr><th>テキスト</th><td><textarea name="cont" cols="40" rows="5" /></textarea></tr> <tr><th>日付け</th><td><input type="text" name="update" size="10" /></td></tr> </table> <input type="submit" value="送信" /><input type="reset" value="リセット" /> </form> </body> </html> 2.確認画面 <html> <head><title></title></head> <body> <table> <tr><th>番号</th><td><?php echo htmlspecialchars($_POST["id"]) ?></td></tr> <tr><th>タイトル</th><td><?php echo htmlspecialchars($_POST["title"]) ?></td></tr> <tr><th>テキスト</th><td><?php echo htmlspecialchars($_POST["cont"]) ?></td></tr> <tr><th>日付け</th><td><?php echo htmlspecialchars($_POST["update"]) ?></td></tr> </table> <form method="post" action="upld.php"> <input type="hidden" name="did" value="<?php echo htmlspecialchars($_POST["id"]) ?>" /> <input type="hidden" name="title" value="<?php echo htmlspecialchars($_POST["title"]) ?>" /> <input type="hidden" name="cont" value="<?php echo htmlspecialchars($_POST["cont"]) ?>" /> <input type="hidden" name="update" value="<?php echo htmlspecialchars($_POST["update"]) ?>" /> <input type="submit" value="登録" /> </form> </body> </html> 3.MySQLへデーター追加 <?php $Con = mysql_connect("localhost","root",""); if ($Con == false) {dir ("MySQLの接続に失敗。");} if (!mysql_select_db("phpdata",$Con)) {dir ("データーベース接続に失敗。");} $sql = "insert into daimoku(id,title,cont,update) values('".$_POST["id"]."','".$_POST["title"]."','".$_POST["cont"]."','".$_POST["update"]."')";//SQL文の作成 $res = mysql_query($sql) or die(mysql_error());//クエリの実行 mysql_close($Con);//切断 ?> <html> <head> <title></title> </head> <body> <p>ご登録ありがとうございました。</p> <a href="01.php">戻る</a> </body> 以上のコードでデーターの追加が出来ません。 どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • サブウィンドウから親ウィンドウのフォームへの書き込み

    よろしくお願いします。 やりたい事は サブウィンドウを開いて サブウィンドウのテキストボックスに入力した内容を 親ウィンドウのテキストボックスに書き込みたいのです。 以下親ウィンドウ(oya.html) <html> <head> <script type="text/javascript"> <!-- function search(){ window.open( 'sub.html' ,'childwin', "width=350,height=250,location=no,menubar=no,toolbar=no,resizable=yes,scrollbars=yes" ); } --> </script> </head> <body> <form name="mainform" method="POST" action="hoge.php"> <TABLE border="1"> <TR> <TD>A:<INPUT type="text" name="A" id="A"></TD> </TR> <TR> <TD>B:<INPUT type="text" name="B" id="B"></TD> </TR> <TR> <TD><input type="button" onclick="search();return false;" value="サブウィンドウ"></TD> </TR> <TR> <TD><center><input type="submit" name="exec" value="確認"></center></TD> </TR> </TABLE> </form> </body> </html> 以下サブウィンドウ(sub.html) <html> <head> <script type="text/javascript"> <!-- --> </script> </head> <body> <form name="subform"> <TABLE border="1"> <TR> <TD>A:<INPUT type="text" name="A" id="A"></TD> </TR> <TR> <TD>B:<INPUT type="text" name="B" id="B"></TD> </TR> <TR> <TD><input type="button" value="入力"></TD> </TR> </TABLE> </form> </body> </html> 以上です。親ウィンドウの中にformが入れ子状態になってしまうため javascriptで対応できないのかと思い質問させて頂きました。 ご教示お願いいたします。

  • <form>でアップロードする画像を表示させたい

    <form>でユーザーの名前や顔写真を入力してもらってサーバーに送るルーチンを作っています。ユーザーがアップロードしたい自分の写真を選んだときに、確認のためにその写真を表示させたくて、下のようなコードを書きましたが、写真が表示されません。 いろいろやっていて、<input type="file">を参照したときに戻される値は、写真のフルパスではなくて最後のファイル名だけだとわかりましたが、これをフルパスのURLで取得する方法はないでしょうか? <script type="text/javascript" language="javascript"> function dispGazo(){ document.getElementById("kao").src="'"+document.getElementById("userGazo").value+"'"; } function checkInput(){ if( document.forms[0].userName.value == ""){ alert("お名前は必ず入力してください。"); return; } } </script> . . . . <form enctype="multipart/form-data" accept-charset="UTF-8" method="post" action="QAtouroku.php" onsubmit="checkInput();"> <table border="1" width=80%> <tr><td>お名前:<input type="text" name="userName" size=30> </td></tr> <tr><td>お写真:<input type="file" name="userGazo" id="userGazo" size=80 value="右のボタンを押して、登録する画像ファイルを探します。" onchange="dispGazo();"></td> </tr> <tr><td><img id="kao" width=100 alt="写真" ></td></tr> . . . </table> </form> どうかよろしくお願いします。 papashiro

専門家に質問してみよう