Rookie PHP, receiving an undefined variable error
I am reading a book and going through the examples, unfortunately i keep getting an error if i leave a field empty when i submit the form. I checked the errata and there was nothing, i tried posting on the books forums but I didn't get any responses.
I believe that maybe i have to declare the variables first but that would take away from the variables being automatically generat开发者_如何学Pythoned.
Any help would be greatly appreciated, i am a rookie trying to learn php.
per request, here is the $required and $expected. Thanks!
$expected = array('name', 'email', 'comments');
$required = array('name', 'email', 'comments');
<?php
foreach ($_POST as $key => $value){
//assign to temporary variable and strip whitespace if not an array
$temp = is_array($value) ? $value : trim($value);
//if empty and required, add to $missing array
if (empty($temp) && in_array($key, $required)){
$missing[] = $key;
} elseif(in_array($key, $expected)){
//otherwise, assign to a variable of the same name as $key
${$key} = $temp;
}
}
<?php
include('./includes/title.inc.php');
$errors = array();
$missing = array();
//Check to see if the form has been submitted
if (isset($_POST['send'])){
//email processing script
$to = 'drewdin1@hotmail.com'; //use your email address
$subject = 'Feedback from Japan Journey';
//list expecting fields
$expected = array('name', 'email', 'comments');
//set required fields
$required = array('name', 'email', 'comments');
include('./includes/processmail.inc.php');
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset=utf-8">
<title>Japan Journey<?php if (isset($title)){echo "—{$title}";} ?></title>
<link href="styles/journey.css" rel="stylesheet" type="text/css" media="screen">
</head>
<body>
<div id="header">
<h1>Japan Journey</h1>
</div>
<div id="wrapper">
<?php include('./includes/menu.inc.php'); ?>
<div id="maincontent">
<h2>Contact Us</h2>
<?php if ($missing || $errors){ ?>
<p class="warning">Please fix the item(s) indicated.</p>
<?php } ?>
<p>Ut enim ad minim veniam, quis nostrud exercitation consectetur adipisicing elit. Velit esse cillum dolore ullamco laboris nisi in reprehenderit in voluptate. Mollit anim id est laborum. Sunt in culpa duis aute irure dolor excepteur sint occaecat.</p>
<form id="feedback" method="POST" action="">
<p>
<label for="name">Name:
<?php if ($missing && in_array('name', $missing)){ ?>
<span class="warning">Please enter your name</span>
<?php } ?>
</label>
<input name="name" id="name" type="text" class="formbox"<?php
if ($missing || $errors){
echo ' value="' . htmlentities($name, ENT_COMPAT, 'UTF-8') . '" ';
} ?> />
</p>
<p>
<label for="email">Email:
<?php if ($missing && in_array('email', $missing)){ ?>
<span class="warning">Please enter your email address</span>
<?php } ?>
</label>
<input name="email" id="email" type="text" class="formbox"<?php
if ($missing || $errors){
echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" ';
} ?> />
</p>
<p>
<label for="comments">Comments:
<?php if ($missing && in_array('comments', $missing)){ ?>
<span class="warning">Please enter your comments</span>
<?php } ?>
</label>
<textarea name="comments" id="comments" cols="60" rows="8"><?php
if ($missing || $errors){
echo htmlentities($comments, ENT_COMPAT, 'UTF-8');
} ?></textarea>
</p>
<p>
<input name="send" id="send" type="submit" value="Send message">
</p>
</form>
<pre>
<?php if ($_POST && $missing) {print_r($_POST);} ?>
</pre>
</div>
<?php include('./includes/footer.inc.php'); ?>
</div>
</body>
</html>
In the below line:
echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" ';
You are using the variable $email but you haven't actually created that variable anywhere.
Try adding this line immediately above that one:
$email = isset($_POST['email'])?$_POST['email']:'';
This is a short hand form for an if..else statement. It checks if an email exists in the $_POST array and uses that value, otherwise it simply sets it to an empty string. Either way, the variable is now "defined".
Quite simple, the email is entry is empty in your Request, so the variable $email never gets created as you only perform the assignment if $_REQUEST[$key] is not empty.
Besides, i would strongly suggest not to create variables based on an untrusted $_REQUEST, as this could open up serious security holes. A simple example: call your form url and append something like ?subject=damn
Some browsers do not submit a html field which has no value attribute and the value attribute is empty, therefore you must first check if the post variable exists.
if ($missing || $errors){
if (isset($email))
echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" ';
}
I would recommend to make sure, all html input fields have at least value="" attribute in the html code, problem solved.
精彩评论