2011-01-25 6 views
0

Я читаю книгу и просматриваю примеры, к сожалению, я продолжаю получать сообщение об ошибке, если оставить поле пустым, когда я отправлю форму. Я проверил ошибки, и ничего не было, я пробовал размещать на форумах книг, но у меня не было ответов.Rookie 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

+1

Откуда берутся '$ required' и' $ expected? – Tomalak

+0

Точное сообщение об ошибке также будет полезно. –

ответ

1

Достаточно просто, электронная почта в вашем запросе пуста, поэтому переменная $ email никогда не создается, поскольку вы выполняете только присвоение, если $ _REQUEST [$ key] не пуст.

Кроме того, я настоятельно рекомендую не создавать переменные на основе ненадежного $ _REQUEST, так как это может открыть серьезные дыры в безопасности. Простой пример: назовите свой URL-адрес формы и добавьте что-то вроде: subject = damn

+0

Спасибо, Роман, я этого не осознавал. Ваше решение с кодом Эндофажа заставило меня двигаться! – Drewdin

+0

добро пожаловать и +1 в Эндофаге – roman

2

В строке ниже:

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

Вы используете переменную $ электронной почте, но вы на самом деле не создали эту переменную в любом месте.

Попробуйте добавить эту строку непосредственно выше, что один:

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

Это короткая форма руки для if..else заявления. Он проверяет, существует ли почта в массиве $ _POST и использует это значение, иначе он просто устанавливает его в пустую строку. В любом случае переменная теперь «определена».

+0

переменная $ email создается в строке: $ {$ key} = $ temp; – thedev

+0

Да ... при условии, что «электронная почта» находится в ожидаемом ожидании. – Endophage

+0

нет, это не - см. Мой комментарий выше ... empty ('') == true – roman

1

Некоторые браузеры не представляют поле html, у которого нет атрибута значения, а атрибут value пуст, поэтому вы должны сначала проверить, существует ли переменная post.

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

Я бы рекомендовал, чтобы убедиться, что все поля ввода HTML, по крайней мере, значение = «» атрибут в HTML коде, проблема решена.

Смежные вопросы