2011-01-25 118 views
0

我正在读一本书,并通过示例,不幸的是,如果我在提交表单时将字段留空,我将不断收到错误。我查了勘误,没有任何东西,我尝试在论坛上发帖,但没有得到任何答复。菜鸟PHP,收到一个未定义的变量错误

我相信也许我必须首先声明变量,但这会从变量自动生成中消失。

任何帮助将不胜感激,我是一个试图学习PHP的新手。

每个请求,这里是$ required和$ expected。谢谢!

$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 = '[email protected]'; //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 "&#8212;{$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> 

enter image description here

+3

哪一行是第60行? – BoltClock 2011-01-25 19:09:35

+1

`$ required`和`$ expected`从哪里来? – Tomalak 2011-01-25 19:11:01

+0

确切的错误信息也会有帮助。 – 2011-01-25 19:11:48

回答

1

很简单,您的请求中的电子邮件地址为空,所以变量$ email永远不会被创建,因为您只在$ _REQUEST [$ key]不为空时才执行赋值操作。

此外,我强烈建议不要根据不可信的$ _REQUEST创建变量,因为这可能会造成严重的安全漏洞。一个简单的例子:打电话给你的表单url并附加类似的东西?subject =该死的

2

在下面的一行:

echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" '; 

您使用的是变量$电子邮件,但还没有实际创建该变量的任何地方。

尝试一个上文刚加入这一行:

$email = isset($_POST['email'])?$_POST['email']:''; 

这是一个if..else语句很短的手形。它检查$ _POST数组中是否存在电子邮件并使用该值,否则它只是将其设置为空字符串。无论哪种方式,变量现在“定义”。

1

某些浏览器不提交没有value属性且value属性为空的html字段,因此您必须先检查post变量是否存在。

if ($missing || $errors){ 
    if (isset($email)) 
     echo ' value="' . htmlentities($email, ENT_COMPAT, 'UTF-8') . '" '; 
} 

我会建议确保所有html输入字段在html代码中至少有value =“”属性,问题解决了。