php - 更改错误处理方式后,php用户登录不再起作用

标签 php error-handling

我试图在我的网站上实现用户登录服务,注册用户填写登录表单,然后将他们转移到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/

相关文章:

php - 单个字段不会插入

PHPExcel 旋转柱状图标签

android - 如何隐藏 WebView 错误页面。可能吗?

error-handling - 如何更改 'An unexpected error has occurred.' NetSuite消息的电子邮件地址

PHP strtotime 总是在午夜返回

PHPMyAdmin上传错误 'file that is too large'

php - NULL 作为 codeignitier 事件记录选择中的列?

codeigniter - 重定向Codeigniter中的错误

batch-file - 将当前文件名从循环传递到批处理脚本中的标签

error-handling - Biztalk业务流程管理BRE故障