Неверный Foreach при тестировании сообщений об ошибках в форме входа

0

Я снова вернулся. Я создал этот php-код для form-process.php;

    <?php
//prevent access if they haven't submitted the form.
if (!isset($_POST['submit'])) {
die(header("Location: form.php"));
}

session_start();

$_SESSION['formAttempt'] = true;

if (isset($_SESSION['error'])){
    unset($_SESSION['error']);
}

$required = array ("name", "email", "password1", "password2");

$_SESSION['error'] = array();

//Check required fields
foreach ($required as $requiredField) {
    if(!isset($_POST[$requiredField])  || $_POST[$requiredField] == "") {
        $_SESSION['error'] [] = $requiredField . "is required." ;
    }
}

//Validating Text in name
if (!preg_match('/^[/w.]+$/',$_POST['name'])) {
    $_SESSION['error'] [] = "Name must be letters and numbers only.";
}

//Validating Drop Down Selection
$validStates = array("Alabama","California", "Colorado", "Florida", "Illinois", "New York");
if (isset($_POST['state']) && $_POST['state'] != "") {
    if(!in_array($_POST['state'], $validStates)) {
        $_SESSION['error'] []="Please choose a valid state.";
    }
}

//Validating an Email
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
    $_SESSION['error'] = "Invalid email address";
}

//Ensure that the Passwords Match
if ($_POST['password1'] != $_POST['password2']) {
    $_SESSION['error'] [] = "Passwords do not match.";
}

//Final Disposition
if (isset($_SESSION['error']) && count ($_SESSION['error']) > 0) {
    die(header("Location: form.php")); 
} else {
    unset($_SESSION['formAttempt']);
    die(header("Location:success.php"));
}
?>

Форма входа в систему Div Error php code;

<?php 
       if (isset($_SESSION['error']) && isset($_SESSION['formAttempt'])) {
           unset ($_SESSION['formAttempt']);
           print "Errors encountered <br />\n";
           foreach ($_SESSION['error'] as $error) {
           print $error . "<br />\n"; } 
   } 
 ?>

Однако при проверке этого в действительной форме входа я получаю эту ошибку:

Предупреждение: неверный аргумент, предоставленный foreach() в E:\XAMPP\htdocs\form.php в строке 20

Я новичок в PhP, поэтому, возможно, что-то мне не хватает, но я не могу на это наложить свой палец... извините

  • 0
    выглядит хорошо для меня, уверен, что это код с ошибкой? удалите все остальное и посмотрите, если вы получите ту же проблему
  • 0
    @Dagon Hiya, что ты имеешь в виду под удалением всего?
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ
$_SESSION['error'] = "Invalid email address";

Это сделало бы это строкой, а не массивом, как было ранее инициализировано, вызывая ошибку с foreach. Пытаться:

$_SESSION['error'][] = "Invalid email address";

также

$_SESSION['error'] [] = "Passwords do not match.";

Между $ _SESSION ['error'] и [] не должно быть пробела, не уверен, что это вызовет проблему, есть несколько мест, где есть дополнительное пространство в вашей проверке.

  • 0
    Спасибо большое, что сделали это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню