フォームで送信されたファイルをアップロードしようとしています。私はphpで試していますが、htmlとphpの間でJSとJqueryとajaxを使用しています(ページをリロードしたくないため)。そして、私は $_FILES に問題があります。
ここでは、javascript アクション (action="javascript: SendPresupMail();") を含むフォーム (ファイル入力を含む) を使用しています。
その JS 関数では、Jquery と ajax を少し使用します。その中に、php 関数への呼び出しがあります。
問題は、そのphp関数内で $_FILES が空であり、フォームで送信されたファイルをアップロードする必要があることです。
コードは次のとおりです。
HTML フォーム、JS の呼び出し:
<form action="javascript: sendPresupMail();" method="post" id="formId" enctype="multipart/form-data">
<input type="text" id="mail" name="mail" />
<input type="file" id="file_selected" name="file_selected" />
<input type="submit" value="Submit" />
JS 関数、および AJAX と JQUERY を使用した PHP の呼び出し:
function sendPresupMail() {
$.ajax({
url: 'remote.php',
type: 'post',
data: {
'w': 'sendPresupMail',
'mail': document.getElementById('mail').value
},
success: function(data) {
if(data != "ok" && data != ""){alert(data);}
if(data == "ok"){alert("mail send.");}
}
});
}
最後に、PHP コード:
private function sendPresupMail(){
$filename = ($_FILES['file_selected']['name']);
...
...
}
そこのコードは無関係です。問題は、 $_FILES が空であるため、 $filename が何も受信していないことです(var_dumpでチェックしたところ、空です)。ファイルをアップロードできません。どうすればよいですか?
解決した
解決策は次のとおりです。実際には、思ったよりもずっと簡単でした。まず、iframe を作成します。これで、すべてのフォーム、javascript、ajax などが iframe 内で発生します。そのため、iframe が更新しているため、ページが更新されていないようです。とにかく答えてくれてありがとう!