プロが教えるわが家の防犯対策術!

HTMLのフォーム文で、ファイルをアップロードしてもらい、それが.jpg, .jpeg , .pdf ファイルであった場合のみ、アップロードできるような仕組みをJavascriptを利用して作成中ですが、うまく行きません

(ソース: test.php)
--ここから--
<html></body>
<SCRIPT language="JavaScript">
function mailSubmit(){
if (document.form_mail.upfile.value == "" ) {
alert (" ファイルを選択してください。");
flag = 1;
return;
} else {
if (document.form_mail.upfile.value.match(/[jpg]$/i)||(/[pdf]$/i)){
alert ("添付ファイルはJPEG,PDFに限ります");
flag = 1;
// return;
}
}
if(flag){
return false;
} else {
document.form_mail.submit();
return true;
}
}
</script>

<table>
<!-- === FORMここから === -->
<!-- <FORM METHOD="post" action="<?php print $_SERVER['PHP_SELF']; ?>" NAME="form_mail" ENCTYPE=multipart/form-data> -->
<FORM METHOD="post" action="<?php print $_SERVER['PHP_SELF']; ?>" NAME="form_mail" ENCTYPE=multipart/form-data onSubmit="return mailSubmit()">
ファイル選択<INPUT TYPE=file NAME="upfile" SIZE=50 VALUE=\"$upfile\">
<br>
<INPUT TYPE="button" VALUE=" 送信 " onClick=" javascript:mailSubmit() ">
<INPUT TYPE="button" VALUE=" キャンセル " onClick="javascript:history.back()">
</FORM></body>
</html>
--ここまで--
JPG,JPEG,またはPDFファイルのみにアップロードの許可を与えるにはどうしたらいいでしょうか、(大文字・小文字は不問とします)ご回答いただければ幸いです。

A 回答 (3件)

おはようございます。


> /[jpg]$/i
[jpg]は文字クラスになるので、括弧内の文字の集合、すなわちjかpかgが最後についているか、という事になってしまいます。ですから、
/(jpe*g|pdf)$/i
というような方法である程度チェック可能かと思います。

当然、拡張子を偽装したファイルのアップロードも可能としてしまいますので、出来ればPHP側でファイルタイプ(MIME)のチェックもした方が良いかと思います。ファイルタイプは
$_FILES['upfile']['type']
で取得出来ます。通常、jpegはimage/jpeg、pdfはapplication/pdf、application/x-pdfあたりですね。

JavaScriptだけの判断ではとても危険です(いくらでも偽装出来る)ので、PHP側で再チェックをする事をお進めします。

参考まで。
    • good
    • 0
この回答へのお礼

お返事遅れて申し訳ありません

大変わかりやすいご回答ありがとうございます
さっそく試して、結果をご報告させていただきます

お礼日時:2007/07/24 12:48

/jpe*g|pdf/i


これでどうでしょうか。
    • good
    • 0
この回答へのお礼

ご回答どうもありがとうございました。参考にさせていただきます

お礼日時:2007/07/24 12:49

>document.form_mail.upfile.value


これが希望の値を取れてるのか確認した方が良いんじゃない?
中身が無い場合は "" (null) で良いかもしれないけど入ってる場合はobjectだったりして名前では持ってこれてないとかいうオチだったりしない?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます

これは盲点でした、参考にさせていただきます

お礼日時:2007/07/24 12:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!