简体   繁体   English

php注意:试图获取非对象的属性

[英]php Notice: Trying to get property of non-object in

I have to recognize that I'm new in php oop, but I want to learn. 我必须认识到我是php oop的新手,但我想学习。 I searched for the same title here but I didn't see any topic close to mine to get an idea. 我在这里搜索了相同的标题,但没有找到与我的想法相近的主题。 I have an function in a events calendar class, that display a form to add an event. 我在事件日历类中有一个函数,该函数显示一个表单以添加事件。 Where I have the form I get an error on each line, about the event variable: 在具有表单的地方,每行都会出现有关事件变量的错误:

Notice: Undefined variable: event in C:\\wamp\\www 注意:未定义的变量:C:\\ wamp \\ www中的事件

This is the function: 这是功能:

public function displayForm() {
    /*
    * Check if an ID was passed
    */ 
    if(isset($_POST['event_id'])) {
        $id = (int)$_POST['event_id'];
    }
    else {
        $id = NULL;
    }
    /*
    * Instantiate the headline/submit button text
    */
    $submit = "Create a New Event";

    /*
    * If an ID is passed, loads the associated event
    */
    $event = NULL;
    if(!empty($id)) {
        $event = $this->_loadEventById($id);


        /*
        * If no object is returned, return NULL
        */
        if(!is_object($event)) {
            return NULL;
        }

        $submit = "Edit This Event";
    }


    /*
    * Build the markup
    */
    return <<<FORM_MARKUP
    <form action="assets/inc/process.inc.php" method="post">
        <fieldset>
            <legend>$submit</legend>
            <label for="event_title">Event Title</label>
            <input type="text" name="event_title" id="event_title" value="$event->title" />
            <label for="event_start">Event Start</label>
            <input type="text" name="event_start" id="event_start" value="$event->start" />
            <label for="event_end">Event End</label>
            <input type="text" name="event_end" id="event_end" value="$event->end" />
            <label for="event_description">Event Description</label>
            <textarea name="event_description" id="event_description" >$event->description</textarea>
            <input type="hidden" name="event_id" value="$event->id" />
            <input type="hidden" name="token" value="$_SESSION[token]" />
            <input type="hidden" name="action" value="event_edit" />
            <input type="hidden" name="event_submit" value="$submit" />
            or <a href="./">cancel</a>
        </fieldset>
    </form>
FORM_MARKUP;
}

If anyone has an idea feel free to tell me. 如果有人有想法请告诉我。 Thank you. 谢谢。

You should make sure all the variables you use in your form markup are defined in all circumstances... So, $event should never be NULL... you should define default values in case no POST it's received or the id it's not found. 您应该确保在所有情况下都定义了在表单标记中使用的所有变量...因此,$ event绝不能为NULL ...您应该定义默认值,以防未收到POST或未找到ID的情况。

Also, $_SESSION should have the parameter with quotation marks and also should be checked before printing! 另外,$ _SESSION应该具有带引号的参数,并且在打印之前也应检查!

Here it's the code I propose you to use: 这是我建议您使用的代码:

public function displayForm() {

    // Initialize vars
    $id = NULL;
    $token = '';

    /*
    * Check if an ID was passed
    */
    if(isset($_POST['event_id'])) {
        $id = (int)$_POST['event_id'];
    }

    if (isset($_SESSION['token'])) {
        $token = $_SESSION['token'];
    }

    /*
    * Instantiate the headline/submit button text
    */
    $submit = "Create a New Event";

    /*
    * If an ID is passed, loads the associated event
    */
    if(!empty($id)) {
        //$event = $this->_loadEventById($id);
        $event = new stdClass();
        $event->title = 'title';
        $event->start = '1';
        $event->end = '1';
        $event->id = '1';
        $event->description = 'description';

        $submit = "Edit This Event";
    }

    if (empty($id) || !is_object($event)) {
        $event = new stdClass();
        $event->title = 'default title';
        $event->start = 'default start';
        $event->end = 'default end';
        $event->id = 'default id';
        $event->description = 'default description';
    }


    /*
    * Build the markup
    */
    return <<<FORM_MARKUP
    <form action="assets/inc/process.inc.php" method="post">
        <fieldset>
            <legend>$submit</legend>
            <label for="event_title">Event Title</label>
            <input type="text" name="event_title" id="event_title" value="$event->title" />
            <label for="event_start">Event Start</label>
            <input type="text" name="event_start" id="event_start" value="$event->start" />
            <label for="event_end">Event End</label>
            <input type="text" name="event_end" id="event_end" value="$event->end" />
            <label for="event_description">Event Description</label>
            <textarea name="event_description" id="event_description" >$event->description</textarea>
            <input type="hidden" name="event_id" value="$event->id" />
            <input type="hidden" name="token" value="$token" />
            <input type="hidden" name="action" value="event_edit" />
            <input type="hidden" name="event_submit" value="$submit" />
            or <a href="./">cancel</a>
        </fieldset>
    </form>
FORM_MARKUP;
}

You set $event = NULL; 您设置$ event = NULL; and you probably pass an empty $id 并且您可能会传递一个空的$ id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM