2013-02-11 91 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