【发布时间】:2016-07-08 00:01:28
【问题描述】:
我正在制作一个带有保存功能的自定义 WYSIWYG 编辑器,并通过保存功能运行了一些代码来获取某个 div 中的所有内容,将其保存到数据表中或覆盖它。但现在,我正在尝试重新加载页面。
过程如下:按下保存按钮,它会运行一个名为 save.php 的 PHP 脚本,如下所示。
我的问题是我希望它在原始 html 页面上的某个 div 中加载或回显内容。我该怎么做呢?基本上,我需要它像 Javascript 的 innerHTML 函数一样工作。
以下是我使用的文件,至少是相关部分。
test.html:
<form method="post" name="blog-post" id="blog-post">
<input type="hidden" name="postID" value="1"><!--Get the post's id-->
<div class="blog-editor-bar">
<a href="#" data-command='save'
onclick="submitForm('save.php');">
<i class='fa fa-save'></i>
</a>
</div>
<div id="blog-textarea" contenteditable>
</div>
<textarea style="display:none;" id="blog-post-cont" name="post-content"></textarea>
</form>
test.js:
function submitForm(action){
var theForm = document.getElementById("blog-post");
theForm.elements("post-content").value = document.getElementById("blog-textarea").innerHTML;
theForm.action = action;
theForm.submit();
}
保存.php:
$conn = mysqli_connect('localhost', 'root', '', '');
if (mysqli_connect_errno()){
echo "<p>Connection Failed:".mysqli_connect_error()."</p>\n";
}
//store stuff in database
//Get Variables
$postid = $_POST['postID'] ? $_POST['postID'] : null;
$post = $_POST['post-content'] ? $_POST['post-content'] : null;
//if exists, overwrite
if($postid != null || $postid != ""){
$sqlSave = "SELECT * FROM wysiwyg.post WHERE idpost = $postid";
$rSave = mysqli_query($conn, $sqlSave) or die(mysqli_error($conn));
if(mysqli_num_rows($rSave)){
$sqlOverwrite = "INSERT INTO wysiwyg.post(post) VALUES(?) WHERE idpost = ?";
$stmt = mysqli_prepare($conn, $sqlOverwrite);
mysqli_stmt_bind_param($stmt, "sd", $post, $postid);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($conn);
} else {
newSave();
}
loadSave();
}
function newSave(){
$sqlNewSave = "INSERT INTO wysiwyg.post(post) VALUES(?)";
$stmt = mysqli_prepare($conn, $sqlNewSave);
mysqli_stmt_bind_param($stmt, "s", $post);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
mysqli_close($conn);
}
function loadSave(){
$sqlLoad = "SELECT * FROM wysiwyg.post WHERE idpost = $postid";
$rLoad = mysqli_query($conn, $sqlLoad) or die(mysqli_error($conn));
//This is the part I'm stuck on
}
提前感谢大家帮助我!我已经坚持了至少几个小时!
编辑:在人们评论 SQL 注入之前,我已将其考虑在内。这是我让代码在我的本地主机上运行,然后通过我过去已经完成的大量反 sql 注入方法运行它。我提供的代码目前只对功能很重要。
编辑#2:反注入代码已经存在。我想我似乎忘记提供这些信息了。我再说一遍,我在这里提供的代码只是与功能相关的代码。我已经对字符串进行了转义、修剪等等等等,但是这些代码对于让人们了解我正在尝试做的事情并不是必需的。
【问题讨论】:
-
您需要使用 AJAX 来保存文本。您的
$sqlSave和$sqlLoad查询也容易受到 SQL 注入的攻击。您应该为所有用户提供的数据使用绑定参数。 -
有很多关于 AJAX 的教程,learn.jquery.com/ajax。您已经部分阻止了 SQL 注入。你应该在任何地方都这样做,以后再做是个坏主意。
-
感谢迈克的快速回复。请检查我的编辑。我知道 SQL,但目前我首先关注功能,所以让它工作。我将如何从 PHP 文件执行 Ajax,如在我的加载 php 函数中,我将如何调用 Ajax 调用将值存储在 json 文件中?
-
@chris85 如何在 php 文件中调用 ajax 请求?我想我需要做一个javascript文件。我该如何回应?
-
使用 AJAX 调用 PHP,然后在返回事件中根据需要更新 DOM。你不应该有
a ton of anti-sql injection methods,将输入与查询分开。
标签: javascript php html echo innerhtml