0

HTML フォーム フィールドの内容を Web サーバー上のテキスト ファイルに書き込もうとしています。

サンプルで見つけたコードをプレーンな PHP ファイルで動作させることができましたが、目的のファイルでは動作しませんでした。

フォームを送信するたびに、PHP がエラーをスローします。PHP Notice: Undefined index: person in <snip>/upload.php on line 26, referer: <snip>/upload

ログに記録したいファイルのコードは次のとおりです。

<?php

//Delete Current Files
$dirfiles = glob('<snip>/uploads/*'); // get all file names
foreach($dirfiles as $dirfile){ // iterate files
  if(is_file($dirfile))
    unlink($dirfile); // delete file
}

//Upload New Files
foreach ($_FILES["images"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $name = $_FILES["images"]["name"][$key];
        move_uploaded_file( $_FILES["images"]["tmp_name"][$key], "uploads/" .     $_FILES['images']['name'][$key]);
    }
}

echo "<h2>Successfully Uploaded Images</h2>";

//Log
$when = date("F j, Y, g:i a");
$who = $_POST["person"];
$out = fopen("output.txt", "a");
if (!$out) {
print("Could not append to file");
exit;
}
fputs($out,"$who\t");
fputs($out,"$when\t");
fputs($out,"$_SERVER[REMOTE_ADDR]\n");
print("Name, Time, Date, and IP Address have been recorded.");

?>

ログ ファイルでは、日付と IP アドレスは正常に記録されますが、名前は記録されません。(このような)

February 11, 2013, 3:26 am IPADDR

名前は最初のようにする必要があります

JohnDoe February 11, 2013, 3:26 am IPADDR

元のフォーム ファイルでは、これは単なる典型的なフォームです。

<form method="post" action="upload.php">
<input type="text" name="person" /> Your Name<br />
snip...
</form>

ロギングが機能するフォームと機能しないフォームの唯一の違いは、このフォームでは画像のアップロードも許可されていることです。<input type="file" name="images" id="images" multiple />

一体何が原因で名前が記録されないのでしょうか?

編集: 更新 - Internet Explorer にはバグが存在しないことが判明しましたが、Chrome および Firefox にはまだ存在します。それは本当に奇妙です。

4

2 に答える 2

1

HTML フォーム属性に enctype="multipart/form-data" を設定する必要があります。そうしないと、 FormData.append() が正しく機能していないと思います。

編集:

これを JavaScript コードに追加してみてください (おそらく の後if (formdata) {):

var person = $('input[name=person]').val();
formdata.append('person', person);
于 2013-02-11T09:09:01.013 に答える
1

formdata.append("person", $('input[name=person]').val()); を追加する必要があります。あなたのjsファイルで

if (formdata) {
    formdata.append("person", $('input[name=person]').val());
    $.ajax({
        url: "upload.php",
        type: "POST",
        data: formdata,
        processData: false,
        contentType: false,
        success: function (res) {
            document.getElementById("response").innerHTML = res; 
        }
    });
}

参照[1] https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects

于 2013-02-11T09:19:58.020 に答える