我试图在我的网站上实现用户登录服务,注册用户填写登录表单,然后将他们转移到member.php页面,过去我使用try and catch块并引发异常,并且运行良好:
member.php
<?php
require_once('repository_fns.php');
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if ($username && $password) {
try {
login($username, $password);
$_SESSION['valid_user'] = $username;
}
catch(Exception $e) {
do_html_header('Problem:');
echo 'You could not be logged in.
You must be logged in to view this page.';
do_html_url('login.php', 'Login');
do_html_footer();
exit;
}
}
$current_user=$_SESSION['valid_user'];
do_html_header_member();
do_page_content_member($current_user);
do_html_footer();
?>
登录功能就像:
function login($username, $password) {
$conn = db_connect();
$result = $conn->query("select * from user
where username='".$username."'
and password = sha1('".$password."')");
if (!$result) {
throw new Exception('Wrong password, could not log you in.');
}
if ($result->num_rows>0) {
return true;
} else {
throw new Exception('Exception: could not log you in.');
}
现在,我删除了那些try和catch块,member.php就像这样:
<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
require_once('repository_fns.php');
session_start();
if (($_POST['username']) && ($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if(login($username, $password){
$_SESSION['valid_user'] = $username;
}
else{
do_html_header_error_page();
do_error_message_cannot_login();
do_html_footer();
exit;
}
}
$current_user=$_SESSION['valid_user'];
do_html_header_member();
do_page_content_member($current_user);
do_html_footer();
?>
登录功能:
function login($username, $password) {
$conn = db_connect();
$result = $conn->query("select * from user
where username='".$username."'
and password = sha1('".$password."')");
if (!$result) {
return false;
}
if ($result->num_rows>0) {
return true;
} else {
return false;
}
}
我不知道为什么它不再起作用,member.php现在只给我一个空白页,没有任何错误消息。请帮忙!先感谢您。
最佳答案
我在评论中给了你答案,但是让我扩大一下。
您应该有一条错误日志,说明如下:
PHP解析错误:语法错误,第9行/member.php中出现意外的'{'
第9行是:
if(login($username, $password){
意外的“X”表示错误,未完成,不存在之前的内容。因为我们碰到了意想不到的事情。
在这种情况下,您将缺少右括号-已更正的代码::
if(login($username, $password)){
旁注-可能有助于:
如果您拥有良好的IDE或代码编辑器,它将为您重点突出。
我使用Vim,并粘贴了您的代码,问题立即显示出来。
另一个提示是,尽管您可以选择编码约定和标准,但在括号前留一个空格有助于更清楚地看到代码。
例如您添加了空格的损坏代码是:
if(login($username, $password) {
您可以更容易地看到缺少的
)
。
关于php - 更改错误处理方式后,php用户登录不再起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054936/