2015-11-09 3 views
0

с PHP. Я пытаюсь проверить, являются ли поля ввода действительными или нет. При этом я помещаю свои коды в разные php-файлы и включаю их в основной файл php (registerFunction.php) , причина, по которой я делаю это, - это организовать все, что будет выполняться одним нажатием кнопки, но я получаю сообщение об ошибке, которую переменная, объявленная в registerFunction.php, не указана в файле regValidation.php. Ниже сообщение об ошибке я получаю: неопределенная переменная: regErrors вPHP содержит необъявленную переменную

мой код для registerFunction.php является:

<?php 

//Create Error array 
$regErrors = array(); 
//Add Date Functions 
include "includes/functions/dateFunction.php"; 

//Checks if Register Screen Inputs are valid or not and pushes the errors into an array. 
include "includes/functions/checkRegFields.php"; 


// 
include "includes/functions/registryValidation.php"; 


if(regDecision()){ 
    //register 
} 
else{ 
    foreach ($regErrors as $errrorMessage) { 
     ?> 
      <script> 
       $("#errors").append('<div class="alert alert-danger" role="alert"><?php echo $errrorMessage; ?></div>'); 
      </script> 
     <?php 
     } 
} 
    echo postDate(); 

?> 

checkRegFields.php:

<?php 


if(isset($_POST['registerButton'])){ 

if(($_POST['regEmail'])){ 
    $regEmail = $_POST['regEmail']; 
} 
else{ 
    array_push($regError,"Please Fill in the Email field"); 
} 

if(($_POST['regUsername'])){ 
    $regUsername = $_POST['regUsername']; 
} 
else{ 

    array_push($regErrors,"Please Fill in the Username field"); 
} 


if ((['regPassword']) and ($_POST['regPassword2'])) { 


    if(($_POST['regPassword']) == ($_POST['regPassword2'])){ 
     $regPassword = $_POST['regPassword']; 
    } 
    else{ 
     array_push($regErrors,"Passwords does not match!"); 
    } 
} 
else{ 
    array_push($regErrors,"Please Fill in the Password fields"); 
} 
} 

?> 

и, наконец у меня есть registryValidation.php (где у меня ошибка):

<?php 

function regDecision(){ 

if(sizeof($regErrors)==0){ 

    return true; 
} 
else{ 
    return false; 
} 
} 

?> 

checkRegFields.php нормально с $ regErr или переменная, но registryValidation.php сообщает мне, что $ regError не объявлен.

Почему это?

+0

Поскольку 'regDecision' является функцией, так что вам нужно' глобальный $ regErrors'? Также обратите внимание, что ваша проверка электронной почты нажимает на неопределенную переменную ('regError' вместо' regErrors'). – CompuChip

+0

спасибо! теперь, когда вы сказали мне это, все ясно, и я решил свою проблему =) – Licentia

ответ

1

По умолчанию при использовании переменной в функции она привязана только к этой функции. Если у вас есть глобальный (бесплатно) переменные, которую вы хотите сделать доступными в функции, вы должны сделать это global:

<?php 

function regDecision() { 
    // Use the globally defined version of the variable, use: 
    global $regErrors; 

    return sizeof($regErrors) == 0; 
} 

?> 

Обратите внимание, как я заменил вашу многословно if(condition) return true; else return false; с более коротким return condition.

Кроме того, я видел, что вы неправильно имя переменной в if -statement, которая проверяет электронную почту:

array_push($regError,"Please Fill in the Email field"); 

должен быть

array_push($regErrors,"Please Fill in the Email field"); 

Вы можете избежать таких ошибок, позволяя строгим которые предупреждают вас об использовании неопределенных переменных путем добавления

error_reporting(E_ALL | E_STRICT); 

к сценарию, или глобально в php.ini:

error_reporting = E_ALL | E_STRICT 
Смежные вопросы