2012-10-07 89 views
1

我正在嘗試爲我的網站製作一個文本文件存儲系統。如何使用PHP從HTML textarea保存TXT文件?

這是我到目前爲止。

我已經得到了一些部分的工作,但做了一些改變後我得到更多的錯誤,我認爲會有所幫助。

我正在嘗試完成此任務而不更改頁面或網址。

<!DOCTYPE HTML> 
<html> 
    <body> 
     <?php 
    if (isset($_POST)){ 
     //Save File 
     $file = fopen($_POST['filename'] & ".txt","r+"); 
     $text = $_POST["textdata"]; 
     file_put_contents($file, $text); 
     fclose($file); 
     //Open File 
     $file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file."); 
     while(!feof($file)){ 
      echo fgets($file). "<br />"; 
     } 
     fclose($file); 
    } 

    echo ' 
    <form name="savefile" method="post" action="' . $_SERVER['PHP_SELF'] . '"> 
     File Name: <input type="text" name="filename" value=""><br/> 
     <textarea rows="20" cols="100" name="textdata"></textarea><br/> 
     <input type="submit" name="submit" value="Save Text to Server"> 
</form> 
    <br/><hr style="width: 100%; height: 4px;"><br/> 
    <form name="openfile" method="post" action="' . $_SERVER['PHP_SELF'] . '"> 
     Open File: <input type="text" name="filename" value=""> 
     <input type="submit" name="submit" value="Submit File Request"> 
</form>'; 
    ?> 
    </body> 
<html> 

如果唯一的辦法就是把它重定向到一個PHP頁面,然後將其發送回,這是沒有問題的,但我不知道該怎麼做,(即使它可能是一個簡單得多)

感謝您提供任何幫助或建議!

-Jake

+0

它工作嗎?你得到的錯誤是什麼? – Lior

+0

如果您不想更改尋找AJAX解決方案的頁面。許多方法來做到這一點,許多圖書館來支持你。看看PrototypeJS和JQuery。 –

回答

3

首先,非常感謝sooo的幫助!

我真的很感激那些更有經驗的人可以偶爾幫助新手。

花了一些時間與我的代碼修改你的一些建議後,我終於得到它的工作! :D

我會在這裏留下最後的代碼,以防其他人在類似問題上碰到這個話題。


<!DOCTYPE HTML> 
<html> 
<body style="background-color: rgb(225,225,225)"> 
    <form name="savefile" method="post" action=""> 
     File Name: <input type="text" name="filename" value=""><br/> 
     <textarea rows="16" cols="100" name="textdata"></textarea><br/> 
     <input type="submit" name="submitsave" value="Save Text to Server"> 
</form> 
    <br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/> 
    <form name="openfile" method="post" action=""> 
     Open File: <input type="text" name="filename" value=""> 
     <input type="submit" name="submitopen" value="Submit File Request"> 
</form> 
    <br/><hr style="background-color: rgb(150,150,150); color: rgb(150,150,150); width: 100%; height: 4px;"><br/> 
    File Contents:<br/> 
    <?php 
    if (isset($_POST)){ 
     if ($_POST['submitsave'] == "Save Text to Server" && !empty($_POST['filename'])) { 
      if(!file_exists($_POST['filename'] . ".txt")){ 
       $file = tmpfile(); 
      } 
      $file = fopen($_POST['filename'] . ".txt","a+"); 
      while(!feof($file)){ 
       $old = $old . fgets($file). "<br />"; 
      } 
      $text = $_POST["textdata"]; 
      file_put_contents($_POST['filename'] . ".txt", $old . $text); 
      fclose($file); 
     } 

     if ($_POST['submitopen'] == "Submit File Request") { 
      if(!file_exists($_POST['filename'] . ".txt")){ 
       exit("Error: File does not exist."); 
      } 
      $file = fopen($_POST['filename'] . ".txt", "r"); 
      while(!feof($file)){ 
       echo fgets($file). "<br />"; 
      } 
      fclose($file); 
     } 
    } 
    ?> 
</body> 
</html> 

希望這有助於!

-Jake

0

像野人民88說,使用AJAX(甚至WebSockets的)會阻止重新加載頁面。但是你已經差不多有這個代碼了。 file_put_contents第一個參數應該是一個指向文件路徑的字符串。你現在給它的是一個打開文件的資源。

所以,只要刪除fopen命令,並將文件名分配給$文件。

小提示:讀取文件就像使用等效的file_get_contents一樣簡單。儘管如此,我確實看到了一些安全問題。所以總是過濾輸入和轉義輸出。但這是另一個主題。

快樂編碼!

0

寫入部分只需要執行,如果提交是從第一種形式。如果從第一個表單提交,下面的代碼將寫入文件,如果從第二個表單提交,則會讀取該文件。

if (isset($_POST)){ 

    if ($_POST['submit'] == "Save Text to Server" && !empty($_POST['filename'])) { 
     //Save File 
     $file = fopen($_POST['filename'] & ".txt","r+"); 
     $text = $_POST["textdata"]; 
     file_put_contents($file, $text); 
     fclose($file); 
    } 

    if ($_POST['submit'] == "Submit File Request") { 
     //Open File 
     $file = fopen($_POST['filename'] & ".txt", "r") or exit("Unable to open file."); 
     while(!feof($file)){ 
      echo fgets($file). "<br />"; 
      } 
     fclose($file); 
    } 
} 

如果您需要在不重新加載頁面的情況下執行此操作,則需要在表單中使用上述代碼的Ajax帖子。

0

$file = fopen($_POST['filename'] & ".txt","r+");

PHP中的連接字符是。 (點)而不是&。文件名是由用戶定義的,所以你應該用模式'w'調用fopen,它會在不存在的情況下嘗試創建文件。

測試isset($_POST)總是返回true,而是測試isset($_POST['filename'])