dragon
dragon

Reputation: 1274

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. 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

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.

Upvotes: 0

Views: 953

Answers (2)

buzkall
buzkall

Reputation: 967

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.

Also, $_SESSION should have the parameter with quotation marks and also should be checked before printing!

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;
}

Upvotes: 1

Mindexperiment
Mindexperiment

Reputation: 137

You set $event = NULL; and you probably pass an empty $id

Upvotes: 0

Related Questions