2012-10-07 87 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'])