使用JQuery和CodeIgniter安全地将注释添加到数据库中? - php

所以我有一个用PHP和Jquery在Codeigniter中编写的注释脚本。

基本上,用户先写评论,然后点击提交。然后,我使用AJAX调用服务器端脚本以检查,验证并插入注释。

在JQuery端,我使用encodeURIComponent转义

$.ajax({
    url : 'http://domain.com/ajax/post_comment',
    type : 'post',
    data : encodeURIComponent( $(this).val() ),
    success : function(data){
                //more code here
            }
});

在PHP端,正如我所说的,我正在使用CodeIgniter,所以我使用CodeIgniter提供的Binding来转义注释,如下所示

$sql = "INSERT INTO video_comments VALUES(NULL, ?);
$this->db->query($sql,array($comment));

这个效果很好,可以转义并插入

!"£$%^&*()_+=-}{~@:?></.,#;][¬`|

现在的问题是,它不能插入'(单引号)或\(反斜杠)?我猜是因为没有正确地转义?

一个线索可能是它确实允许我插入\',我想它会转义单引号吗?但是我以为CodeIgniters绑定至少可以解决这个问题?

有任何想法吗?

参考方案

首先,不要使用encodeURIComponent。那根本不是它的预期用途。
编辑:这是一个讨论该呼叫实际用于的链接:When are you supposed to use escape instead of encodeURI / encodeURIComponent?

其次,我看不到您在PHP代码中转义的位置。 CodeIgniter内置了转义功能,例如escape_str:

$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

更多信息在这里:
http://codeigniter.com/user_guide/database/queries.html

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php Singleton类实例将在多个会话中保留吗? - php

举一个简单的例子,如果我想计算一个不使用磁盘存储的脚本的命中次数,我可以使用静态类成员来执行此操作吗?用户1:<?php $test = Example::singleton(); $test->visits++; ?> 用户2:<?php $test = Example::singleton(); $test->visits+…

CodeIgniter ODBC问题 - php

好吧,我已经构建了一个用于MSSQL的应用程序,最初以这种方式运行它,我购买了一台新计算机,出于某种奇怪的原因,它不允许我通过MSSQL连接。因此,我设置了ODBC。它连接良好,但似乎讨厌活动记录。我将不得不重写所有查询吗?还是我想念的东西。我收到这样的错误。A Database Error Occurred Error Number: 37000 [Mic…

PHP-服务器端验证-这是一个好方法吗? - php

我已经通过jQuery的帮助进行了广泛的客户端验证。现在进入服务器端验证,如果我发现某些字段无效,是否可以简单地将错误返回给客户端并且没有任何有用的消息?我的假设是用户必须启用JavaScript才能访问我的网页。如果Web浏览器禁用了JavaScript,则用户将看不到该表单。我可以简单地使用noscript来做到这一点。如果他们通过我设计的表单提交信息,…

AJAX实时电子邮件验证(PHP) - php

当用户在我的网站上创建帐户时,我希望对照我的数据库(MySQL)中的所有当前用户名检查输入的用户名,并确认是否可用。有谁知道我可以使用的任何好的库,或者是jQuery的插件? 参考方案 所需的确切信息以示例形式here给出。它使用jQuery作为JavaScript库