Reputation: 1274
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
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