2014-12-10 2 views
-1

Я пытаюсь запустить цикл foreach, чтобы проверить, пустое ли одно из обязательных полей в форме, и вывести недостающие поля через массив ошибок. Каждая переменная присваивается переменной $ _POST.PHP foreach в функции запускается только один раз

Однако, когда я вызываю функцию:

fields_empty($requiredFields, $fieldErrors); 

Он работает только один раз, а не пробегаем по ошибке. Вот полный исходный код:

$requiredFields = array(
    "First Name"=>$fname, 
    "Last Name"=>$lname, 
    "Email"=>$email, 
    "Password"=>$pass1, 
    "Confirm Password"=>$pass2, 
    "Country"=>$country, 
    "Address 1"=>$addr1, 
    "City"=>$city, 
    "State"=>$state, 
    "Postal Code"=>$pcode, 
    "Phone Number"=>$phone 
); 

$fieldErrors = array(); 

function fields_empty($requiredFields, $fieldErrors) { 
    global $fieldErrors; 
    foreach($requiredFields as $name => $field) { 
     if (empty($field)) { 
      array_push($fieldErrors, "$name is required.<br>"); 
      return true; 
     } 
    } 
} 

fields_empty($requiredFields, $fieldErrors); 
print_r($fieldErrors); 

Выход в браузере:

Array (
    [0] => First Name is required. 
) 

Кроме того, это происходит только тогда, когда она находится в функции. Если я выполняю его без функции, он показывает все недостающие поля.

+0

Почему вы передаете '$ fieldErrors' как аргумент ___ и___, обращаясь к нему как к« глобальному »? Просто передайте его как аргумент 'by reference'. Но 'return' в середине цикла будет« завершать »этот цикл –

ответ

8

Удалить с вашей функции. Что return is is terminate the function и возвращает все, что передается с return, здесь его значение true. Удаление return будет поддерживать цикл.

function fields_empty($requiredFields, $fieldErrors) { 
    global $fieldErrors; 
    foreach($requiredFields as $name => $field) { 
     if (empty($field)) { 
     array_push($fieldErrors, "$name is required.<br>"); 
     } 
    } 
} 
+0

Спасибо! Это сработало :) –

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