![](/img/trans.png)
[英]Use jquery to load xml file, edit it, then save to server again with php
[英]Load a file, edit it and the save it (server side) PHP
我得到了一个页面,可将html代码从文本文件加载到textarea中,我需要能够使用脚本保存其内容。
我正在使用PHP脚本从文件加载代码并将其回显到textarea,但是如何将内容发送回脚本并保存到同一文件或新名称的文件中?
我在想getElementById是否会帮助我,但我不确定如何。
加载脚本(它也可以删除文件)
// The file hierarchy:
//
//Web root - admin - This file
// - pages - in here are the page text files
// The variable pagesList is the filename chosen in a dropdown list earlier
$page = $_GET["pagesList"];
$action = $_GET["action"];
//get the path to the page( all pages are in a folder named 'pages')
$filename = dirname(dirname(__FILE__))."/pages/".$page;
if(file_exists($filename) and is_file($filename)){
//If I want to load a file
if($action == "open"){
$f = fopen($filename,"rt");
$content = fread($f, filesize($filename));
echo $content;
@fclose($f);
//If I want to delete a file
}elseif($action == "delete" && is_file($filename)){
//move the working directory to where the file is
$old = getcwd();
chdir(dirname(dirname(__FILE__))."/pages/");
//----
if(unlink($filename))
echo "File deleted,".$filename;
else
echo "Error deleting file!";
//change back the working directory to where it was
chdir($old);
//If I want to save a file
}elseif($action == "save"){
if(file_exists($filename)){
//Unknown script, need help!
}else{
}
}
}
textarea只有一行,其中包含:
<textarea id="html_content" style="width:600;height:200;"><?php include("loader.php") ?></textarea>
总结一下:我需要帮助将文本区域的内容保存到脚本中以供以后保存。
编辑:感谢davidkonrad,我只需要在脚本中添加一些POST接收,并使用发送给它的内容添加file_put_content。
出现的问题是jQuery显然将\\放在每个“或'之前。这弄乱了所有应该是干净有效的html代码。我必须以某种方式替换\\”,str_replace不会删减它。有任何想法吗?
EDIT2:再次感谢davidkonrad通过使用encodeURIComponent(jQuery)客户端和urldecode(PHP)服务器端对其进行了修复。
更新,确定,如果您不确定如何将textarea提交到loader.php:
<form method="post" action="loader.php">
<input type="hidden" name="filename" value="test.html">
<input type="hidden" name="action" value="save">
<textarea name="html_content"></textarea>
<input type="submit" value="save">
</form>
loader.php,现在您有了
$filename=$_POST['filename'];
$action=$_POST['action'];
$html_content=$_POST['html_content'];
这是“ test.html”,“保存”以及键入文本区域的任何文本。 在您的if
.. else
循环中使用上述变量,例如
} elseif($action == "save"){
if(file_exists($filename)){
//Unknown script, need help!
file_put_contents($filename, $html_content); //or how you want to do it
}
}
缺点是
<textarea>
.. </textarea>
之间再次插入所插入的内容(据我所知,HTML是loader.php的一部分) 注意:除非有特殊原因,否则在写入文件之前不必检查文件是否已存在。 而且仍然认为在目录中四处走动只会使它变得复杂:) /pages/
不仅仅是相对路径吗?
它不需要那么复杂。 我将使用一种更简单和结构化的方法,包括
file_put_contents
, file_get_contents
和unlink
来执行每个任务,包括一些小的错误处理 $.ajax
调用(jQuery)的系统,调用上述PHP类 以下工作示例将HTML文件保存,加载和删除到Directoty /files
,您必须授予RW权限。
file.php
class File {
private $filename;
private $dir = 'files/';
public function __construct() {
$action = isset($_POST['action']) ? $_POST['action'] : false;
$this->filename = isset($_POST['filename']) ? $_POST['filename'] : false;
if ((!$action) || (!$this->filename)) return;
switch ($action) {
case 'save' :
$this->save(); break;
case 'load' :
$this->load(); break;
case 'delete' :
$this->delete(); break;
default :
return;
break;
}
}
private function save() {
$content = isset($_POST['content']) ? $_POST['content'] : '';
file_put_contents($this->dir.$this->filename, urldecode($content));
}
private function load() {
$content = @file_get_contents($this->dir.$this->filename);
echo $content;
}
private function delete() {
unlink($this->dir.$this->filename);
}
}
$file = new File();
file.html,标记
<input type="text" id="filename" value="test.txt"><br>
<textarea id="html_content" style="width:600;height:200;"></textarea>
<br>
<button id="save">save</button>
<button id="load">load</button>
<button id="delete">delete</button>
file.html,脚本:
var url = 'file.php';
$("#save").click(function() {
$.ajax({
url : url,
type: 'post',
data : {
filename : $("#filename").val(),
action : 'save',
content : encodeURIComponent($('#html_content').val())
}
});
});
$("#delete").click(function() {
$.ajax({
url : url,
type: 'post',
data : {
filename : $("#filename").val(),
action : 'delete'
}
});
});
$("#load").click( function() {
$.ajax({
url : url,
type: 'post',
data : {
filename : $("#filename").val(),
action : 'load'
},
success : function(html) {
$("#html_content").val(html);
}
});
});
HTML内容(标记,HTML实体)在保存时通过使用encodeURIComponent
和urldecode
维护。 自己尝试一下,并将其作为更复杂系统的基础。 如果要创建一个新文件,只需在文件名框中输入一个新文件名。 如果要加载文件,请在文件名框中输入该文件名。 我认为file_put_contents等比处理文件句柄chdir(dirname(dirname(__FILE__))."/pages/");
更加健壮chdir(dirname(dirname(__FILE__))."/pages/");
(??) 等等。
尝试使用php fputs函数保存文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.