2013-02-11 92 views
0

我试图将HTML表单域的内容写入到我的Web服务器上的文本文件中。将HTML表单域写入文本文件的问题

我能够得到我在一个例子中找到的代码,以便在普通的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> 

记录工作的形式和没有记录的形式之间唯一的区别在于,这个形式也允许图像上传g via <input type="file" name="images" id="images" multiple />

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

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

+0

你看到了什么作为输出,当你替换每个的fputs具有类似打印通话打电话? – turiyag 2013-02-11 08:45:26

+0

当你print_r($ _ POST)时你会看到什么; – turiyag 2013-02-11 08:47:11

+0

@turiyag在页面上,当我用印刷品交换了fputs时,我得到了以下印刷品; '2013年2月11日,上午3点50分\t 24.168.247.250名称,时间,日期和IP地址已被记录.'全部在相同的字体中,同一字体等。 – Ross 2013-02-11 08:51:33

回答

1

你需要添加formdata.append( “人”,$(“输入[名称=人]')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

+0

而且我们赢了!就是这样!非常感谢! – Ross 2013-02-11 09:23:49

+0

无视我在这里的评论。在Firefox中正常工作。缓存还在那里。再次感谢! – Ross 2013-02-11 09:36:46

1

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

编辑:

尝试增加这javascript代码(if (formdata) {后也许):

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

正如我在评论中所说的那样,我尝试着解决这个问题。不过,如果没有它,图片上传工作正常。文本字段也一样 - 它不适用于它或没有它。 – Ross 2013-02-11 09:11:18

+0

看我的编辑.... – Stefan 2013-02-11 09:20:39

+0

让我(在日志文件中)'undefined \t 2013年2月11日,4:21 am \t MYIP' – Ross 2013-02-11 09:22:31