致命错误:在非对象(P4A,MySQL)上调用成员函数getPk()

时间:2012-10-23 11:19:59

标签: php mysql

我不太确定这个错误是什么,从环顾四周看,它必须与数据库声明有关。我正在尝试在我的Widget上创建一个下拉框,通过选择数据库的不同字段,将选择不同的掩码,并允许在以后的页面上创建不同的小部件。

我认为错误的代码部分是:

$this->build("p4a_db_source", "login")
        ->setTable("meetingrooms")
        ->addJoin("login.meetingrooms",
                  "login.meetingrooms.MeetingRoom = login.meetingrooms.MeetingRoom",
                  array('position'=>'Ident'))
        ->addOrder("position")
        ->load();

    $this->setSource($this->login);
    $this->firstRow();
    $this->build('p4a_field','location')
    ->setSource('login')
    ->setLabel('location')
    ->setValue('Please Select...')
    ->setType('select')     
    ->setWidth(60);
    $this->weight->label->setWidth(60);

我知道它与我之前的一个类似的问题,但它完全不同的代码,但这个应该更容易修复。 谢谢你的帮助。

Stacktrace(致命错误:在第468行的C:\ xampp \ htdocs \ p4a \ p4a \ objects \ widgets \ field.php中的非对象上调用成员函数getPk())未指示发生错误的行,所以我不确定问题的确切来源,

其余代码(包括之前的代码)是:

class main_dashboard_mask extends P4A_Base_Mask
{
public function __construct()
{
    parent::__construct();
    $this->setTitle("Dashboard");

    $this->build('p4a_field','MeetingRooms');
    $this->MeetingRooms->setLabel("This is the meeting room label");
    $this->build('p4a_button', 'continue')
    ->setLabel('Continue?')
    ->implement("onclick", $this, "change");
   $this->build('p4a_field','booking')
    ->setlabel('Viewing?')
    ->setType('checkbox')
    ->setValue(true);
    $this->booking->label->setTooltip('If you are booking a meeting room, check this box');

    $this->build("p4a_db_source", "login")
        ->setTable("meetingrooms")
        ->addJoin("login.meetingrooms",
                  "login.meetingrooms.MeetingRoom = login.meetingrooms.MeetingRoom",
                  array('position'=>'Ident'))
        ->addOrder("position")
        ->load();

    $this->setSource($this->login);
    $this->firstRow();
    $this->build('p4a_field','location')
    ->setSource('login')
    ->setLabel('location')
    ->setValue('Please Select...')
    ->setType('select')     
    ->setWidth(60);
    $this->weight->label->setWidth(60);
    $this->Meetingrooms();
}

private function Meetingrooms()
{
    $this->build('P4A_fieldset', 'widgetframe')
    ->anchor($this->location)
    ->anchorLeft($this->booking)
    ->anchorLeft($this->continue)
    ->setLabel('Meeting Room Bookings');
}

}

3 个答案:

答案 0 :(得分:1)

我认为你没有得到这个对象。这就是它给出非对象错误的原因。 只需打印调用方法getPk()的对象即可。如果它是有效的对象那么 只调用那种方法。

答案 1 :(得分:1)

我明白了,对不起,我正在寻找合适的地方,但没有看到我错在哪里......

代码之前的地方 - >

 $this->setSource($this->login);
$this->firstRow();
$this->build('p4a_field','location')
->setSource('login') // <- this is the error(the Pk variable hasn't been set here)
->setLabel('location')
->setValue('Please Select...')
->setType('select')     
->setWidth(60);
$this->weight->label->setWidth(60);
$this->Meetingrooms();

修复是 - &gt;

 ->setSource($this->login)

感谢您的帮助=]

答案 2 :(得分:0)

你有完整的堆栈跟踪吗?什么代码行准确地生成了这个错误?

无论如何,您必须找到调用$object->getPk()的代码。该错误表示您尝试在->getPk() $object上使用null函数。