[英]How can I save TXT Files from a HTML textarea, using PHP?
我正在尝试为我的网站制作一个文本文件存储系统。
这是我到目前为止所拥有的。
我已经让一些部分工作了,但是在进行了一些我认为会有所帮助的更改后,我遇到了更多错误。
我正在尝试在不更改页面或 url 的情况下完成此任务。
<!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 页面,然后将其发回,那很好,但我不知道如何做到这一点,(即使它可能更简单)
感谢您为我提供的任何帮助或建议!
-杰克
首先,非常感谢你的帮助!
当那些经验丰富的人可以偶尔帮助一个新手时,我真的很感激。
花了一些时间来修改我的代码与你的一些建议,我终于得到了它的工作! :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
就像Geek Num 88所说,使用AJAX(甚至Websockets)将阻止重新加载页面。 但是你已经差不多用这个代码了。 file_put_contents第一个参数应该是指向文件路径的字符串。 你现在给它的是打开文件的资源。
所以只需删除fopen命令,只需将文件名分配给$ file即可。
小提示:使用等效的file_get_contents读取文件同样简单。 我确实看到了这个实现的一些安全隐患。 所以总是过滤输入和转义输出。 但这是另一个主题。
快乐的编码!
如果提交来自第一个表单,则只需要执行写入部分。 如果从第一个表单提交,下面的代码将写入文件,如果从第二个表单提交,将读取该文件。
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帖子到上面的代码。
$file = fopen($_POST['filename'] & ".txt","r+");
PHP中的连接字符是。 (点)代替&。 文件名由用户定义,因此您应该使用模式'w'调用fopen,如果文件不存在,将尝试创建该文件。
测试isset($_POST)
总是返回true,而不是test isset($_POST['filename'])
。
Olijake 的 PHP 有很多错误,而是制作了简单的自我保存页面,可能存在安全问题,并且 PHP 部分也在单独的文件中,因为默认情况下它在客户端中不可见,但它有效(在移动 Chrome 中创建和测试) ..
<!DOCTYPE HTML>
<html>
<body onload="document.forms[0].textdata.value=document.body.parentElement.outerHTML">
<form name="savefile" method="post" action="">
<textarea rows="16" cols="100" name="textdata"></textarea><br/>
<input type="submit" name="submitsave" value="Save Text to Server">
</form>
</body>
</html>
<?php
if (!empty($_POST["textdata"])) {
$old="";
$file = fopen("saver.php" ,"a+");
while(!feof($file)){
$old = $old . fgets($file);
}
if ($_POST['submitsave'] == "Save Text to Server") {
$file = fopen("index.php" ,"a+");
$text = $_POST["textdata"];
file_put_contents("index.php", $text . $old);
fclose($file);
}
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.