2013-10-20 23 views
0

我正在做一個鏈接在一起的不同PHP腳本的登錄表單。我已經在這裏發佈了其中的一個腳本,並更正了其中的一些錯誤。我已經嘗試了幾個小時,以使這些工作,但它沒有發生。我得到的錯誤在PHP中未定義的函數錯誤,但不明白爲什麼?

Fatal error: Call to undefined function validate() in C:\Program Files\Abyss Web Server\htdocs\login_action.php on line 21

好了,我看着「登錄Tools.php」我已經做了一些修正它。該功能似乎被正確定義。我正在從PHP新手書中複製這段代碼 - 在Easy Steps中。我也查看了其他腳本Login Action.php,但是看不到任何錯誤。

我會先告訴你「Login action.php」。我知道你們中的一些人不會喜歡這本書使用的方法,但我只是從書中複製,所以我不會選擇腳本的輸入方式。

<?php 

if ($_SERVER[ 'REQUEST_METHOD' ] == 'POST') 
{ 
require ('../connect_db.php') ; 

require ('login_tools.php') ; 

list ($check , $data) = 
    validate ($dbc , $_POST[ 'email' ] , $_POST[ 'pass' ]) ; 

if ($check) 
    { 
    session_start() ; 

    $_SESSION[ 'user_id' ] = $data[ 'user_id' ] ; 
    $_SESSION[ 'first_name' ] = $data[ 'first_name' ] ; 
    $_SESSION[ 'last_name' ] = $data[ 'last_name' ] ; 

    load ('home.php') ; 

    } 
    else { $errors = $data ; } 

    mysqli_close($dbc) ; 

} 

?> 

所以上面的腳本使用了下面腳本中定義的函數。我已經通過這兩個,甚至糾正錯誤,但無法找到爲什麼函數是未定義的?

<?php 

function load($page = 'login.php') 

{ 

$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . 
       dirname($_SERVER[ 'PHP_SELF' ]) ; 

$url = rtrim($url , '^\\') ; 

$url .= '/' . $page ; 

header("Location: $url") ; 
return; 


function validate($dbc , $email = '' , $pwd = '') 

{ 

$errors = array() ; 

if (empty($email)) 
{ $errors[] = 'Enter your email address.' ; } 

else 

{ $e = mysqli_real_escape_string($dbc, trim($email)) ; } 

if (empty($pwd)) 
{ $errors[] = 'Enter your password.' ; } 

else 

{ $p = mysqli_real_escape_string($dbc, trim($pwd)) ; } 

if (empty($errors)) 
{ 
$q = "SELECT user_id, first_name, last_name, 
    FROM users 
    WHERE email = '$e' 
    AND pass = SHA1('$p') " ; 

$r = mysqli_query ($dbc , $q) ; 

if (mysqli_num_rows($r) == 1) 
{ 
    $row = mysqli_fetch_array ($r , MYSQLI_ASSOC) ; 
    return array(true , $row) ; 
} 

else 
{ $errors[] = 'Email address and password not found.' ; } 

} 

return array(false , $errors) ; } 

} 

?> 

我希望我不是在這裏做一些簡單的錯誤,但我只在這裏發表的東西時,我已經使用的碼檢查,並從我使用這本書再次手動和再次檢查代碼。任何人都知道我在做什麼錯了?

回答

1

你缺少一個右大括號:

header("Location: $url") ; 
return; 


function validate($dbc , $email = '' , $pwd = '') 

{ 

應該是:

header("Location: $url") ; 
return; 

} 


function validate($dbc , $email = '' , $pwd = '') 

{ 

沒有它,你validate函數的範圍僅限於load功能,這顯然不是你想要的。

另外一點,你可能想考慮縮進你的代碼。這樣,缺少的大括號會更明顯。

+0

嗨,你會這麼好心地解釋函數的load()在這個崗位是如何工作之間}?我遇到了同樣的腳本,但似乎並沒有讓我的頭腦發生什麼 – RickTicky

0

有一個失蹤的load結束和開始validate

// (...) 
header("Location: $url") ; 
return; 

} // <-- 

function validate($dbc , $email = '' , $pwd = '') 

{ 
// (...) 
相關問題