【问题标题】:Issues writing HTML form fields to text file将 HTML 表单字段写入文本文件的问题
【发布时间】:2013-02-11 08:40:07
【问题描述】:

我正在尝试将 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>

日志记录工作和不工作的唯一区别是这个表格还允许通过&lt;input type="file" name="images" id="images" multiple /&gt;上传图片

究竟是什么导致该名称不被记录?

编辑:更新 - 事实证明,Internet Explorer 中不存在错误,但 Chrome 和 Firefox 中仍然存在。真是奇怪。

【问题讨论】:

  • 当您将每个 fputs 调用替换为类似的打印调用时,您会看到什么输出?
  • 当你 print_r($_POST); 时你会看到什么
  • @turiyag 在页面上,当我用 print 交换 fputs 时,我打印了以下内容; February 11, 2013, 3:50 am 24.168.247.250 Name, Time, Date, and IP Address have been recorded.都在同一行,同一字体等
  • @turiyag 当我添加 print_r($_POST);在“记录”之后是Array ( )
  • 如果有帮助,这里是原始教程的LINK

标签: php html file text output


【解决方案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

【讨论】:

  • 我们有一个赢家!就是这样!非常感谢!
  • 忽略我在这里的评论。在 Firefox 中运行良好。缓存还在。再次感谢!
【解决方案2】:

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

编辑:

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

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

【讨论】:

  • 正如我在 cmets 中所说的,我把这条线拿出来试图修复它。但是,如果没有它,图像上传也可以正常工作。文本字段也是如此 - 无论有没有它都不起作用。
  • 找到我(在日志文件中)undefined February 11, 2013, 4:21 am MYIP
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2023-04-09
  • 2016-08-15
  • 2015-02-16
相关资源
最近更新 更多