2013-02-21 282 views
11

我在這個網站搜索了一個答案,但沒有找到任何。PHP從輸入文件到txt文件

我有一個表單,我想獲取輸入的內容寫入一個txt文件。爲了簡單起見,我寫了一個簡單的表單和一個腳本,但它讓我一直處於空白頁面。下面是我得到

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form> 
     <form action="myprocessingscript.php" method="post"> 
     <input name="field1" type="text" /> 
     <input name="field2" type="text" /> 
     <input type="submit" name="submit" value="Save Data"> 
    </form> 
    <a href='data.txt'>Text file</a> 
</body> 

,這裏是我的PHP文件

<?php 
$txt = "data.txt"; 
$fh = fopen($txt, 'w+'); 
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set 
    $txt=$_POST['field1'].' - '.$_POST['field2']; 
    file_put_contents('data.txt',$txt."\n",FILE_APPEND); // log to data.txt 
    exit(); 
} 
    fwrite($fh,$txt); // Write information to the file 
    fclose($fh); // Close the file 
    ?> 
+1

不'myprocessingscript.php'產生任何進一步的輸出?如果你的第二個代碼片段是整個PHP腳本,那麼你應該得到一個空白頁面,因爲你沒有生成任何輸出。 – acme 2013-02-21 09:46:28

+0

另外,你得到一個空白頁面是正常的,你不是'echo()'任何東西到客戶端。 – Floby 2013-02-21 10:13:23

回答

33

你的形式應該是這樣的:

<form action="myprocessingscript.php" method="POST"> 
    <input name="field1" type="text" /> 
    <input name="field2" type="text" /> 
    <input type="submit" name="submit" value="Save Data"> 
</form> 

和PHP

<?php 
if(isset($_POST['field1']) && isset($_POST['field2'])) { 
    $data = $_POST['field1'] . '-' . $_POST['field2'] . "\n"; 
    $ret = file_put_contents('/tmp/mydata.txt', $data, FILE_APPEND | LOCK_EX); 
    if($ret === false) { 
     die('There was an error writing this file'); 
    } 
    else { 
     echo "$ret bytes written to file"; 
    } 
} 
else { 
    die('no post data to process'); 
} 

我寫信給/tmp/mydata.txt因爲這樣,我現在正好在哪兒。使用data.txt寫入當前工作目錄下的那個文件,在我的例子中我什麼都不知道。

file_put_contents爲您打開,寫入和關閉文件。不要惹它。

延伸閱讀: file_put_contents

+0

我把它改回'data.txt',但其餘部分是完美的 – user2094841 2013-02-21 10:14:29

+0

在共享主機上,你無權訪問/ tmp,你會在哪裏放置mydata.txt?我的目錄結構是〜/ www-root/ – cryptic0 2016-03-20 16:16:08

+0

真的很感謝你在這裏度過的時間,Floby。這是非常優雅的解決方案,並允許我放棄第三方表單處理器所需的大量腳本,例如WordPress插件提供的腳本。 :) – Nathan 2017-03-03 20:06:10

5

你是因爲你有額外的<form>的問題,你的數據放進去GET方法,並且您正在使用POST訪問PHP中的數據。

<body> 
<!--<form>--> 
    <form action="myprocessingscript.php" method="POST"> 
+1

爲你的鷹眼+1:D – acme 2013-02-21 09:56:34

+0

@acme歡迎。 :) – 2013-02-21 09:58:15

0

一個可能的解決方案:

<?php 
$txt = "data.txt"; 
if (isset($_POST['field1']) && isset($_POST['field2'])) { // check if both fields are set 
    $fh = fopen($txt, 'a'); 
    $txt=$_POST['field1'].' - '.$_POST['field2']; 
    fwrite($fh,$txt); // Write information to the file 
    fclose($fh); // Close the file 
} 
?> 

以前您一直密切德文件關閉腳本。

0

如果使用file_put_contents,您不需要執行fopen - > fwrite - > fclose,那麼file_put_contents會爲您執行所有操作。您還應該檢查Web服務器是否在您嘗試寫入「data.txt」文件的目錄中有寫權限。

根據您的PHP版本(如果它是舊的),您可能沒有file_get/put_contents函數。檢查您的Web服務器日誌,以查看執行腳本時是否出現任何錯誤。

+0

我注意到它的工作原理,如果我與服務器上的管理員運行它,我如何改變權利? – user2094841 2013-02-21 10:01:46

+0

如果你的網絡服務器是apache,例如:'chown -R apache:apache dir_where_you_create_the_file' – Naryl 2013-02-21 11:38:43

0

使用fwrite()代替file_put_contents()