没有从数据库中获取所有行

时间:2016-05-18 12:56:00

标签: php jquery mysql ajax codeigniter

我在codeigniter中开发了一个自动完成功能,但问题是如果我们输入两个字母,它匹配2个或超过2个字符,但它只显示1个记录我不知道为什么会发生这种情况。任何人都可以帮助我。

我有3条匹配标准的记录:

  • 车辆
  • 重型公路车辆
  • 小型车辆

当我输入 Ve 时,它会显示 Design&开发,当我输入 Beh 时,它只显示 Vehicle ,因为它应该显示所有三个。所有3条记录包含名称​​ vehicles ,任何人都可以让我知道我在哪里犯错误

这是我的 php 模型 Get_data.php

public function result($keyword) {
        $get_data = $this->db->like('cat_name', $keyword);
        $get_data = $this->db->order_by("cat_id", "ASC"); 
        $get_data = $this->db->get('categories');

        foreach($get_data->result() as $data):
            $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
            $html  = '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
            $html .= $sport;
            $html .= "</li>";
            return $html;
        endforeach;
    }

我的php控制器

public function getData() {
        $keyword = $this->input->post('keyword');
        $html = $this->get_data->result($keyword);
        echo $html;
    }

以下是我使用的 ajax 查询

function autocomp() {
var min_length = 0;
var keyword    = $("#skills").val();

if(keyword.length > min_length) {
    $.ajax({
        type     :  "POST",
        data     :  {keyword: keyword},
        dataType :  'text',
        url      :  "http://localhost:90/tufuturo/home/getData",
        success  :  function(data) {
                        $("#resultkeyword").show();
                        if(data == false) {
                            $("#resultkeyword").html("<li>No Results Found</li>");
                        } else {
                            $("#resultkeyword").html(data);
                        }
                    }
    });
} else {
    $("#resultkeyword").hide();
}
}

function set_item(item) {
    $("#skills").val(item);
    $("#resultkeyword").html("<li><b>"+item+"</b></li>");
    $("#resultkeyword").hide();
}

3 个答案:

答案 0 :(得分:4)

仅更新foreach循环

$html = '';
foreach($get_data->result() as $data):
            $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
            $html  .= '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
            $html .= $sport;
            $html .= "</li>";
            
        endforeach;
return $html;

答案 1 :(得分:2)

返回后,一切都会消失。你在foreach循环中写回归。循环只迭代一次并返回。

需要将li的开始标记与$html

连接起来

也会在foreach循环之外返回

foreach($get_data->result() as $data):
            $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
            $html  .= '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
            $html .= $sport;
            $html .= "</li>";

        endforeach;

return $html;// return here

使用num_rows();检查查询返回结果是否为

$num = $get_data->num_rows();

if($num>0)
{

 foreach($get_data->result() as $data):
                $sport = str_replace($keyword, "<b>" . $keyword . "</b>" , $data->cat_name);
                $html  .= '<li onclick="set_item(\''.str_replace("'", "\'", $data->cat_name).'\')">';
                $html .= $sport;
                $html .= "</li>";

            endforeach;
}else{
     $html="<li>NO result found</li>";
}

    return $html;// return here

答案 2 :(得分:0)

尝试给LIKE命令第三个参数,它允许你将wildcard%放在你想要的位置。我建议在第三个参数中使用'after' 改变这一行 $ get_data = $ this-&gt; db-&gt; like('cat_name',$ keyword); 到

$get_data = $this->db->like('cat_name', $keyword,'after');