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中未定义的函数错误,但可以';我不明白为什么?,php,Php,我正在做一个有不同PHP脚本链接在一起的登录表单。我已经在这里发布了其中一个脚本,并更正了其中的一些错误。我已经试了几个小时让这些工作,但它没有发生。我得到了错误 致命错误:在第21行的C:\Program Files\Abyss Web Server\htdocs\login\u action.php中调用未定义的函数validate() 好的,我看了一下“Login Tools.php”,我已经对它做了一些修改。该函数似乎定义正确。我从一本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()函数是如何工作的,好吗?我遇到过同样的剧本,但似乎无法理解它的作用