2015-11-09 178 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'是一個函數,所以你需要'global $ 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; 
} 

?> 

注意如何我也換成你囉嗦了短return conditionif(condition) return true; else return false;

另外,我看到你在if語句來用於驗證您的電子郵件拼寫錯誤的變量名:

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