繁体   English   中英

phpBB /网站集成-重定向有效,但如果用户输入错误密码则无效

[英]phpBB / website integration - redirect works, but not if user puts in the wrong password

我有一个网站( www.the289register.com/index-andy.html )和一个phpBB3论坛( www.the289register.com/phpBB3/ ),并且已经设法使用首页上的登录表格将两者整合在一起。 当用户登录首页时,将使用表单中的隐藏字段将其重定向回。 这一切都很好。

但是,如果用户输入了错误的密码,输入了错误的用户名或将任何一个字段留空,则重定向将不起作用。

由于该站点使用框架,因此这意味着该论坛的ucp.php页面将出现在左侧的窄条中,而menu.php以前是狭窄的。 这显然使非技术用户感到困惑。 我需要找到一种方法来使重定向在所有情况下均能正常工作,理想情况下,无需修改phpBB3代码,这样以后的任何论坛软件升级都不会影响我的自定义设置。

我对此并不陌生,因此对任何新手表示歉意。 这是我在侧栏menu.php中所做的(删除了一些内容以使其简短):

<?php include_once("phpbb-integrate.php"); ?>

<?php
$cp = request_var('cp', '');
if ($cp == "logout") {
$user->session_kill();
$user->session_begin();
echo "Logged out";
}
?>

<html>
<head>
</head>

<!--  ===== LOGIN BOX - DISPLAYS IF NOT SIGNED IN ====== -->

<?php
if ($user->data['user_id'] == ANONYMOUS) {
?>
<form method="POST" action="phpBB3/ucp.php?mode=login">
Forum Username:<br><input type="text" name="username" size="20"><br>
Password:<br><input type="password" name="password" size="20"><br>
Remember Me?: <input type="checkbox" name="autologin"><br>
<input type="submit" value="Login" name="login">
<input type="hidden" name="redirect" value="../menu.php">
</form>


<!--  ===== WELCOME THE USER IF SIGNED IN AND IS A CLUB MEMBER ====== -->
<?php
} elseif (in_array($user->data['group_id'], array(5,8,9))) {
?>
Welcome back, <?php echo $user->data['username_clean']; ?><br>You have <?php echo $user->data['user_unread_privmsg']; ?> new forum messages<br>

<form method="POST" action="menu.php?cp=logout">
<input type="submit" value="Logout" name="logout">
<input type="hidden" name="redirect" value="../menu.php">
</form>


<!--  ===== WELCOME THE USER IF NON-MEMBER ====== -->
<?php
} else {
?>
Hello <?php echo $user->data['username_clean']; ?>. You're not yet a T289R member
<?php } ?>


<!--  ===== PUBLIC MENU ITEMS GO BELOW ====== -->
<?php
if ($user->data['user_id'] == ANONYMOUS) {
?>
<!--  ===== PRESENT A 'JOIN' LINK IF NON-MEMBER OR NOT SIGNED IN ====== -->
<li><a href="the289register/membershipnew.html" target="default">Join T289R!</a>
<?php } ?>

<!--  ===== PRESENT REMAINING PUBLIC LINKS ====== -->
<a href="http://wiki.the289register.com" target="_blank">289 Register Wiki</a>
<a href="phpBB3/index.php" target="_blank">Forum</a>


<?php
// MEMBER MENU LIST
if (in_array($user->data['group_id'], array(5,8,9))) {
?>

<!--  ===== MEMBERS MENU ITEMS GO BELOW ====== -->
<h3>Members Menu</h3>
<!-- <div id="side-bar"> -->
<a href="http://www.the289register.com/" target="_blank">Test link for member</a>

<?php } ?>

</body>
</html>

这是phpbb-integrate.php的内容:

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './phpBB3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>

就像我说的那样,如果用户名和密码输入正确,重定向可以正常工作。 如果用户搞砸了,论坛登录页面将显示在侧边栏中。

任何有解释的建议都值得赞赏-我对PHP的了解还不是很好。

您正在使用PHP的ucp.php文件处理登录( <form method="POST" action="phpBB3/ucp.php?mode=login"> ),但是对于您要执行的操作,我建议您使用自己的文件处理登录。 这样,您可以准确选择登录失败时发生的情况。

用于登录的ucp.php文件的相关部分是这样的:

case 'login':
    if ($user->data['is_registered'])
    {
        redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
    }

    login_box(request_var('redirect', "index.$phpEx"));
break;

该代码的相关部分是来自functions.php文件中的login_box()函数。

因此,假设您的侧边栏菜单文件是menu.php。 我将从functions.php复制phpBB的整个login_box()函数,并将其粘贴到menu.php中,并将其重命名为my_login_box 然后,仍然在menu.php中,将表单操作更改为指向menu.php。 接下来,添加代码以检查是否有任何传入的登录信息,例如用户名或密码(例如$POST['username'] ),如果有,则执行my_login_box()。 最后,您需要修改my_login_box的内容,以执行登录失败或成功后想要执行的操作。

在这种情况下,您甚至不必担心重定向。 如果登录成功,则将其打印出欢迎消息或其他内容,而不打印出登录表单。 如果失败,请打印出错误消息并继续显示表格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM