将HTML表单字段写入文本文件的问题

时间:2013-02-11 08:40:07

标签: php html file text output

我正在尝试将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中仍然存在错误。那真的很奇怪。

2 个答案:

答案 0 :(得分:1)

您必须在html表单属性中设置enctype =“multipart / form-data”。我怀疑如果不这样做,FormData.append()就无法正常工作。

编辑:

尝试将此添加到javascript代码(可能在if (formdata) {之后):

var person = $('input[name=person]').val();
formdata.append('person', person);

答案 1 :(得分: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; 
        }
    });
}

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