试图获得非对象的属性

时间:2014-03-14 17:50:42

标签: php mysql codeigniter

在我的网站中,用户可以选择汽车品牌,该品牌的型号以及该型号的引擎。最终,在这些选择之后出现年份标签并且用户选择一年,以便他/她可以看到该车的规格。但是,当我点击其中一个年份标签"试图获得非对象的属性"出现错误。

它在car_model.php line 53(第53行是返回行),

function getEngineId($engine){

    $this->db->where("engine",$engine);
    $query = $this->db->get("car_engine");
    $eId = $query->row();
    return $eId->id;
}

这是填充标签和内容(规格)的方式。

public function populateTabs(){

    $this->load->model("car_model");
    $id = $this->input->post("id");
    $year = $this->input->post("year");
    $engine = $this->input->post("engine");

    if(isset($id, $year, $engine)){

        $eId = $this->car_model->getEngineId($engine);
        $years = $this->car_model->getYears($eId);
        $this->load->library("car");
        $car = new Car($id,$year);

        echo "<ul class='nav nav-tabs' id='yearTabs'>";

        foreach ($years->result() as $row){

            echo "<li class='first'><a href='#$id-$row->year' data-toggle='tab'>".$row->year."</a></li>";
        }

        echo "</ul>";

        echo "<div class='tab-content'>";

        foreach ($years->result() as $row){

            echo "<div class='tab-pane fade in first' id='$id-$row->year'>";

       ...Irrevelant echo part...
 }
}

更新:我eId检查了var_dump(),它回应了我想要的内容。如果它返回false(显然是),则不应该打印{#1}}&#34; false&#34;?

更新2 :点击年份标签之前没有错误。

这里打印选定的汽车名称(标题)及其年份javascript。

var_dump()

这是在选择一年javascript后

$(document).ready(function(){

var brand = "";
var model = "";
var engine = "";
var bc = 0;
var mc = 0;
var title = document.getElementById("title");

$(".brand a").live('click',function(){

    brand = $(this).text();
    bc++;
    if(bc > 1){
        $(".mtr").collapse("hide");
    }
});

$(".model a").live('click',function(){

    model = $(this).text();
    mc++;
    if(mc > 1){
        $(".mtr").not("#"+model+"Motors").collapse("hide");
    }
});

$(".engine a").live('click',function(){

        var id = $(this).attr("id");
        engine = $(this).text();

        $.ajax({
            type: "post",
            url: "populateTabs",
            data: "id=" + id + "&engine=" +engine,
            success: function(data){
                $("#tabs").html(data);
            }
        });

        if(brand == 'Bmw'){
            $(title).html(brand + " " + model + engine);
        }
        else{
            $(title).html(brand + " " + model+ " " + engine);
        }
 });
});

3 个答案:

答案 0 :(得分:2)

您没有正确处理错误。您希望$eId成为$query->row()返回的对象,但如果它失败了怎么办? $eIdNULL或布尔FALSE,您正在尝试从中读取属性。

答案 1 :(得分:0)

$eId可能是falsenull,因为$query->row();失败了。检查您的返回值。

答案 2 :(得分:0)

似乎您没有从查询中获得结果。

来自CI doc。

  

测试结果

     

如果您运行的查询可能不会产生结果,我们鼓励您   首先使用num_rows()函数测试结果:

尝试:

if ($query->num_rows() > 0)
{    
    $eId = $query->row();
    return $eId->id;
} else
{
  return false;//or something you can validate in your controller.
}