【问题标题】:Trying to print onto an html page via PHP尝试通过 PHP 打印到 html 页面
【发布时间】: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


【解决方案1】:

您可以使用 AJAX 请求与服务器通信,发送数据并接收响应。那里有很多很好的教程,但是因为我是在 W3Schools 网站上第一次学习的,所以我会在那里推荐你。

【讨论】:

    【解决方案2】:

    您可以使用这样编写的 AJAX 请求:

    <script>
        $(document).ready(function(){
            $.ajax({                        //start an AJAX call
                type: 'GET',                      //Action: GET or POST
                data: {VariableName: 'GETvalue'},    //Separate each line with a comma
                url: 'Destination.php',           //save.php in your case
                    success: function(data)){         //if values send do this 
    
                        //do whatever
    
                    } 
                }); //end ajax request
            });
        </script>
    

    这允许您将信息发送到您的 php 页面而无需刷新 因此,在我的示例中,您可以在 PHP 端执行此操作

    <?php 
    
    echo $_GET['VariableName'];
    
    ?>
    

    将回显“Ajax 调用的数据部分中指定的 GET 值”

    编辑************

    在 AJAX 调用中,如果需要 json,可以添加 dataType

    $.ajax({                        
        type: 'GET',                      
        data: {VariableName: 'GETvalue'},   
        dataType: 'json'                   // Allows Json values or you can change it to whatever you want
        url: 'Destination.php',   
    

    【讨论】:

    • 请注意,该问题未使用 jQuery 进行标记。纯 JS AJAX 查询不是“这样制作的”。
    • @naderbesada 数据有什么作用?我知道数据类型和其他所有内容,但数据到底是做什么的?
    • @Mike 你真的没有帮助试图找出问题的人。如果 Jquery 是一个解决方案,我很乐意使用它。我知道你是一个非常有声望的社区成员,但别说了。
    • @verdeletg 也许我的语气走错了路,但我的意思是,正如答案所暗示的,这不是发出 AJAX 请求的唯一方式。也可以使用纯 JS。
    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 2011-11-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多