PHP中未定义的函数错误,但可以';我不明白为什么?

PHP中未定义的函数错误,但可以';我不明白为什么?,php,Php,我正在做一个有不同PHP脚本链接在一起的登录表单。我已经在这里发布了其中一个脚本,并更正了其中的一些错误。我已经试了几个小时让这些工作,但它没有发生。我得到了错误 致命错误:在第21行的C:\Program Files\Abyss Web Server\htdocs\login\u action.php中调用未定义的函数validate() 好的,我看了一下“Login Tools.php”,我已经对它做了一些修改。该函数似乎定义正确。我从一本PHP新手书中复制了这段代码——步骤很简单。我还查看

我正在做一个有不同PHP脚本链接在一起的登录表单。我已经在这里发布了其中一个脚本,并更正了其中的一些错误。我已经试了几个小时让这些工作,但它没有发生。我得到了错误

致命错误:在第21行的C:\Program Files\Abyss Web Server\htdocs\login\u action.php中调用未定义的函数validate()

好的,我看了一下“Login Tools.php”,我已经对它做了一些修改。该函数似乎定义正确。我从一本PHP新手书中复制了这段代码——步骤很简单。我还查看了另一个脚本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 ) ;  }

}

?> 

您缺少一个右大括号:

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


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

{
应该是:

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

}


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

{
没有它,
validate
函数的作用域仅限于
load
函数,这显然不是您想要的


作为附加点,您可能需要考虑缩进代码。这样一来,缺少的花括号会更加明显。

load
的末尾和
validate
的开头之间缺少

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

} // <--

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

{
// (...)
/(…)
标题(“位置:$url”);
返回;

}//您好,请您在本文中解释一下load()函数是如何工作的,好吗?我遇到过同样的剧本,但似乎无法理解它的作用