我正在尝试将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,"$whot");
fputs($out,"$whent");
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 />
上传图像
究竟是什么原因导致该名称没有被记录?
编辑:更新-事实证明,这个错误在IE浏览器中不存在,但在Chrome和Firefox中仍然存在。这真的很奇怪。
您需要添加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
您必须在html表单属性中设置enctype="multipart/form data"。如果您不这样做,我怀疑FormData.append()无法正常工作。
编辑:
尝试将其添加到javascript代码中(可能在if (formdata) {
之后):
var person = $('input[name=person]').val();
formdata.append('person', person);