如何使用PHP从HTML文本区域保存TXT文件?

时间:2012-10-07 23:49:19

标签: php html post textarea

我正在尝试为我的网站制作文本文件存储系统。

这是我到目前为止所拥有的。

我已经有一些部分可以使用了,但在做了一些我认为会有所帮助的修改之后会出现更多错误。

我正在尝试完成此任务而不更改页面或网址。

<!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

4 个答案:

答案 0 :(得分:4)

首先,非常感谢你的帮助!

当那些经验丰富的人可以偶尔帮助一个新手时,我真的很感激。

花了一些时间来修改我的代码和你的一些建议后,我终于开始工作了! :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

答案 1 :(得分:0)

像Geek Num 88所说,使用AJAX(甚至Websockets)将阻止重新加载页面。但是你已经差不多用这个代码了。 file_put_contents第一个参数应该是指向文件路径的字符串。你现在给它的是打开文件的资源。

所以只需删除fopen命令,只需将文件名分配给$ file。

小提示:使用等效的file_get_contents读取文件同样简单。我确实看到了这个实现的一些安全隐患。所以总是过滤输入和转义输出。但这是另一个主题。

快乐的编码!

答案 2 :(得分: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帖子。

答案 3 :(得分:0)

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

PHP中的连接字符是。 (点)而不是&amp ;.文件名由用户定义,因此您应该使用模式'w'调用fopen,如果文件不存在,将尝试创建该文件。

测试isset($_POST)始终返回true,而不是测试isset($_POST['filename'])