Php 我的Codeigniter使用ajax自动完成

Php 我的Codeigniter使用ajax自动完成,php,mysql,ajax,json,codeigniter,Php,Mysql,Ajax,Json,Codeigniter,我正在向我的站点添加私人消息。在我表单中的收件人文本字段中,我希望在有人开始键入时建议有效的用户名。在阅读了教程并研究了一些脚本之后,我编写了以下代码,用于从数据库表namedusers中建议用户名。它可以工作,但我不确定它是否正确和安全 Jquery(使用Jquery UI自动完成插件): 控制器(为了简单起见,我没有使用模型,尽管我计划使用) Codeigniter活动记录数据库应该使您的代码清除任何SQL注入。如果你没有发布任何东西,你不需要担心XSS 使用此功能,某人可以获得所有可能用户

我正在向我的站点添加私人消息。在我表单中的收件人文本字段中,我希望在有人开始键入时建议有效的用户名。在阅读了教程并研究了一些脚本之后,我编写了以下代码,用于从数据库表namedusers中建议用户名。它可以工作,但我不确定它是否正确和安全

Jquery(使用Jquery UI自动完成插件):

控制器(为了简单起见,我没有使用模型,尽管我计划使用)


Codeigniter活动记录数据库应该使您的代码清除任何SQL注入。如果你没有发布任何东西,你不需要担心XSS

使用此功能,某人可以获得所有可能用户名的列表。。但除此之外,我会说它是“安全的”(它看起来非常类似于我在我的site=p中使用的东西)

编辑:

如果你没有发布任何东西,你不需要担心XSS


我应该澄清,如果您发布了任何内容(显示用户输入的任何内容),那么您应该使用XSS过滤器(我下面的johndavidjohn回答解释了这一点[只需将TRUE传递为第二个参数])。。我不太明白你解释“术语”是什么意思。。。如果您所做的只是搜索,那么您不需要XSS筛选,但是如果用户可以发送/编写消息(生成站点存储的内容[显示]),那么您应该在iput上进行XSS筛选。

我建议您进行一次编辑

我将通过将第二个参数
TRUE
传递给
get()


如果希望该函数仅适用于ajax调用,还可以添加更多异常:

if($this->input->is_ajax_request())
{
//... process the input
}
else
{
    show_404();
}

谢谢,我确实添加了
limit('5')
,因此有些人无法检索整个db表。哦,是的,这肯定会造成很大的障碍,但有些人可以尝试使用脚本的不同字母组合。。。。。我只是说你把整个用户库都打开了。。这可能就是你想要的!,但是如果你只希望“朋友”或其他东西能够自动完成,那么你应该修改代码。是的,用户也通过post发送消息,但我会单独处理。也许最好的办法是检查用户提交时是否有效(没有ajax),而不是建议用户提交。谢谢!我一定要补充一点。
function search_username()
{
        $username = trim($this->input->get('term')); //get term parameter sent via text field. Not sure how secure get() is

        $this->db->select('id, username'); 
        $this->db->from('users');
        $this->db->like('username', $username);
        $this->db->limit('5');
        $query = $this->db->get();

        if ($query->num_rows() > 0) 
        {
            $data['response'] = 'true'; //If username exists set true
            $data['message'] = array(); 

            foreach ($query->result() as $row)
            {
                $data['message'][] = array(  
                    'label' => $row->username,
                    'value' => $row->username,
                    'user_id'  => $row->id
                );
            }    
        } 
        else
        {
            $data['response'] = 'false'; //Set false if user not valid
        }

        echo json_encode($data);
} 
    $username = trim($this->input->get('term', TRUE));
if($this->input->is_ajax_request())
{
//... process the input
}
else
{
    show_404();
}