0

我有一个用户可以使用的带有所见即所得编辑器的页面。编辑后,他们可以按一个按钮,javascript 应该将当前页面发布到 save.php 文件并用新信息刷新页面。

有两个问题。第一个是最初页面没有加载更新的文件。用户必须刷新页面才能看到它更新(也许只需要额外的一秒钟来写入文件?)。第二个问题,临时文件第一次创建后,不能被覆盖,所以第一次刷新后页面永远不会更新。以下是我正在使用的片段:

WYSIWYG 编辑器页面 (editor.php) 上的 Javascript 函数:

function refresh(html,username,info)
{
    $.post("save.php", { html: html, username: username } );
    window.location = 'editor.php?info=' + info;
}

保存.php 文件

$html = $_POST['html'];
$username = $_POST['username']; 
file_put_contents('temp/' . $username . '.txt', $html);
4

3 回答 3

1

由于浏览器在导航到下一页之前可能尚未发出 POST 请求,因此请使用 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

If the data is getting to your server ok, make sure that the access permissions on the directory 'temp' allow write access from the web server user (if you have access to SSH to your server, run chmod go+w /path/to/temp, otherwise most FTP programs allow you to set file permissions too).

于 2012-04-12T08:10:19.183 回答
0

为什么不使用fopenand 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 :) 
           });
}
于 2012-04-12T07:48:41.430 回答
0

ajax 请求是异步的,因此当重定向开始时,写入操作可能正在进行中。您必须收听 $.post 操作的完成情况才能进行重定向。

于 2012-04-12T07:58:25.960 回答