0

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

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

好的,所以我查看了“Login Tools.php”,并且已经对其进行了一些更正。该函数似乎定义正确。我正在从一本 PHP 新手书中复制这段代码 - 简单步骤。我还查看了其他脚本 Login Action.php,但也看不到任何错误。

我将首先向您展示“登录 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 ) ;  }

}

?> 

我希望我不会在这里犯一些简单的错误,但我只会在我使用代码检查器并从我正在使用的书中一次又一次地手动检查代码时在这里发布内容。有人知道我在做什么错吗?

4

2 回答 2

1

您缺少一个右花括号:

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


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

{

应该:

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

}


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

{

没有它,您的validate功能范围仅限于load功能,这显然不是您想要的。

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

于 2013-10-20T18:07:08.450 回答
0

}在结束load和开始之间有一个缺失validate

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

} // <--

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

{
// (...)
于 2013-10-20T18:07:26.953 回答