我有一个页面,其中包含用户可以使用的WYSIWYG编辑器。编辑后,他们可以按一个按钮,javascript应该将当前页面POST到save.php文件,并使用新信息刷新页面。
有两个问题。首先,最初页面不会加载更新的文件。用户必须刷新页面才能看到它更新(也许只需要额外的一秒钟来编写文件?)。第二个问题是,在第一次创建临时文件之后,它无法被覆盖,因此页面在第一次刷新后永远不会更新。以下是我与之合作的片段:
WYSIWYG编辑器页面上的Javascript函数(editor.php):
function refresh(html,username,info)
{
$.post("save.php", { html: html, username: username } );
window.location = 'editor.php?info=' + info;
}
save.php文件
$html = $_POST['html'];
$username = $_POST['username'];
file_put_contents('temp/' . $username . '.txt', $html);
答案 0 :(得分:1)
由于浏览器在导航到下一页之前可能尚未发出POST请求,请使用帖子中的成功回调来进行重定位:
function refresh(html,username,info) {
$.post("save.php", { html: html, username: username }, function() {
window.location = 'editor.php?info=' + info;
});
}
正如其他人已经评论过的那样,直接使用表单帖子中的数据而不进行消毒是一个非常糟糕的计划,并且会使您的服务器受到各种恶意攻击。看看其中一些问题:https://stackoverflow.com/search?q=sanitize+php
如果数据到达您的服务器,请确保目录'temp'上的访问权限允许来自Web服务器用户的写访问权限(如果您有权访问服务器的SSH,请运行chmod go+w /path/to/temp
,否则大多数FTP程序也允许你设置文件权限。
答案 1 :(得分:0)
为什么不使用fopen
和fwrite
?
只需使用:
$html = $_POST['html'];
$username = $_POST['username'];
$file = "temp/" . $username . ".txt";
if (!file_exists($file)) {
$files = fopen($file, "x+");
} else {
$files = fopen($file, "w+");
}
if(fwrite($files, $html)) {
echo "Success!";
} else {
echo "Failure!";
}
对于php并使刷新工作在js中,尝试将语句放在成功函数中,如下所示:
function refresh(html,username,info) {
$.post("save.php", { html: html, username: username },
function (response) {
window.location = 'editor.php?info=' + info;
console.log(response);// for debugging :)
});
}
答案 2 :(得分:0)
ajax请求是异步的,因此在重定向开始时可以进行写入操作。你必须听完$ .post动作的完成exent来进行重定向。