首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >my,jquery注释系统不能按正确的顺序显示注释。

问my,jquery注释系统不能按正确的顺序显示注释。
EN

Stack Overflow用户
提问于 2013-08-06 11:46:16
回答 1查看 478关注 0票数 3

我试着用facebook创建一个这样的评论系统。我使用php和jquery。我的代码工作得很好。用户在textarea中写一些东西,comment_1并发布它。Comment_1直接出现在文本区域下面。如果我刷新页面,我可以看到comment_1在开始发布。如果我试图发布一个新的评论( comment_2 ),那么comment_2出现在comment_1下面,而comment_1又出现在comment_2下面。例如:

一开始:comment_1

刷新后发布新的注释: comment_1 / comment_2 comment_1 (如您所见),在刷新页面后,它会将comment_2和comment_1放在comment_1之下,但也会保持comment_1高于它们(比如将comment_1保存在“内存”中)。如果我刷新页面,我将得到comment_2 comment_1,这是我最后想要的,但是如果不刷新,我如何做到这一点呢?这是我的代码:

wall.php

代码语言:javascript
复制
<?php

<script> 
$(document).ready(function(){                           
$("#comment_process").click(function(){
    if($("#comment_text").val() != ""){ 
        $.post("comments.php?action=post", { comment: $("#comment_text").val() }, function(data) {
            $(".comments").html(data);
            $("#comment_text").val("");
        });
    } 
});   
});   
</script>


<div class="comment_container">
<div class="comment_form">

<textarea id="comment_text" ></textarea>
<input type="button" id="comment_process" value="Post"/>

</div>
</div>

<?php include_once("comments.php");?>

<div class="comments">   </div>

?>

这是comments.php

代码语言:javascript
复制
<?php
function getComments(){

$comments = "";
        // use desc order by date in order to display comments by date
        $sql = mysql_query("SELECT * FROM comments ORDER BY comment_date DESC ") or die (mysql_error());

        if(mysql_num_rows($sql) == 0){
                $comments = " <div class='each_comment'> There are no comments ...</div> ";
        }else{
            while ($row= mysql_fetch_assoc($sql)){          
                $comments .= "<fieldset> Stefanos Says : <div class='each_comment'>  <small><em> ".$row['comment_date']." </em></small><br />".$row['comment']."</div></fieldset>  </br>"; 
            }
        }

        return $comments;  

    }


function postComments($comment){

        $comment = mysql_real_escape_string(strip_tags($comment));
        $sql = mysql_query(" INSERT INTO `comments` (comment, comment_date) VALUES ('".$comment."', now()) ");
        return true;

    }



    if((isset($_GET['action'])) && ($_GET['action'] == "post")) {
        postComments($_POST['comment']);
    }

echo getComments();
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-06 11:57:27

注释显示错误的问题

这里的问题是,您没有清除原始评论。

将<?php include_once("comments.php");?>移动到这个div中:

<div class="comments"> </div>

这样,当您用javascript向该块写入注释时,加载页面时加载的原始注释将被替换。

MySQL注入和mysql扩展的明显问题

正确实践

如何为SELECT语句清除字符串:

代码语言:javascript
复制
$data = mysql_real_escape_string($_POST['some_data']);
$query = mysql_query("SELECT * FROM some_table WHERE some_value = '$data'");

如何为SELECT语句清除整数:

代码语言:javascript
复制
$data = (int) $_POST['some_data'];
$query = mysql_query("SELECT * FROM some_table WHERE some_value = $data");

注意,整数周围没有引号。

表观脆弱性

Mathew在评论中正确地指出,这个品牌的select语句(由ircmaxell演示)不能正确地防止SQL注入攻击:

代码语言:javascript
复制
$data = mysql_real_escape_string($_POST['some_data']);
$query = mysql_query("SELECT * FROM some_table WHERE some_value = $data");

然而,这不是一个漏洞,而是对函数的误用,通过在$data周围不加引号,我们建议我们正在搜索一个整数,但是我们已经将输入清理干净,就好像它是一个字符串。

如果是整数字段,则应该将输入值转换为整数。如果它是一个字符串字段,那么在查询中它周围应该有引号。这里所显示的只是一个函数可能被错误地使用。

由于您的SELECT语句不接受任何用户输入并且只选择所有注释,因此无论如何都没有机会进行这种注入。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18079291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档