使用PHP保存textarea内容为TXT文件,文件生成但无内容写入如何解决
问题原因
- 核心错误:你通过
<a>标签的href跳转触发保存逻辑,<a>跳转属于GET请求,不会携带表单的POST提交数据,因此$_POST['content']始终为空,写入文件自然没有内容。 - 语法错误:表单HTML结构存在冗余的
</a>闭合标签,会导致浏览器解析表单结构异常。 - 安全漏洞:未对
$_POST['content']做存在性校验和安全过滤,直接拼接进JS代码和写入文件,存在XSS注入风险。
修复方案
推荐用原生表单submit按钮提交,无需额外JS代码,兼容性最好,修正后的完整代码如下:
<form method="POST" action="?SubmitFile=true"> <div data-label="Index.php" class="demo-code-preview" contentEditable="true"> <pre><code class="language-html"> <textarea name="content"> <?php $file = "index.php"; echo htmlspecialchars(file_get_contents($file)); ?> </textarea> </code></pre> </div> <button type="submit" class="bar-anchor" name="SaveFile"> <span>Save</span> <div class="transition-bar"></div> </button> </form> <?php if (isset($_GET['SubmitFile']) && isset($_POST['content'])) { $content = $_POST['content']; // 输出到控制台前转义特殊字符避免JS报错 echo "<script>console.log('" . addslashes($content) . "' );</script>"; $file = "myfile.txt"; $Saved_File = fopen($file, 'a+'); fwrite($Saved_File, $content); fclose($Saved_File); } ?>
如果要保留原有的<a>标签样式,需要给a标签添加点击触发表单提交的JS逻辑,修改a标签部分代码为:
<a href="javascript:;" class="bar-anchor" name="SaveFile" onclick="this.parentElement.submit()"> <span>Save</span> <div class="transition-bar"></div> </a>
注意要把action="?SubmitFile=true"加到form标签的属性里,才能正常触发后续的保存逻辑。
内容的提问来源于stack exchange,提问作者Gowri Lakshmi
相关产品推荐
相关产品推荐

