【发布时间】:2015-07-22 18:52:32
【问题描述】:
我已经搜索了论坛,但无法理解 PHP 重定向页面循环问题。
我有一个简单的 PHP 页面:
<?php include('core/init.core.php');
$page_request="graph";
if (isset($_SESSION['account']['user_role']) &&
$_SESSION['account']['user_role'] =='coaching_manager' ||
$_SESSION['account']['user_role'] =='OEM'||
$_SESSION['account']['user_role'] =='GM'||
$_SESSION['account']['user_role'] =='director'||
$_SESSION['account']['user_role'] =='proactive_coaching_manager') {
$page_request="graph";
}
else
$page_request='request_form';
if (isset($_GET['page_request'])) {
$page_request=$_GET['page_request'];
}
$user = get_user_on_uin(strval($_SESSION['account']['ein']));
//var_dump(mysqli_num_rows($user));
//die();
if(mysqli_num_rows($user)>0){ //if user exists in the user table in sql
//get user data from user table in sql
$user=$user->fetch_assoc();
//update user details in db
update_user_on_uin($_SESSION['account']['firstname'],
$_SESSION['account']['lastname'],
$_SESSION['account']['email'],
$_SESSION['account']['phone'],
$_SESSION['account']['ein'],
$_SESSION['account']['managerein'],
$_SESSION['account']['ouc'],
$_SESSION['account']['user_role'],
$_SESSION['account']['som'],
$_SESSION['account']['gm']);
switch ($user['user_role']){
case 'engineer':
//check if user have changed their role/ouc if yes then resetup the user
if ($_SESSION['account']['ouc']==$user['ouc']) {
if ($page_request=='request_form') {
header('Location: request-form-engineer.php');
die();
}
elseif ($page_request=='view_requests') {
header('Location: view-requests-engineer.php');
die();
}
elseif ($page_request=='view_accepted_requests') {
header('Location: view-accepted-requests.php');
die();
}
elseif ($page_request=='view_rejected_requests') {
header('Location: view-rejected-requests.php');
die();
}
elseif ($page_request=='view_coach_assigned_requests') {
header('Location: view-coachassigned-requests.php');
die();
}
elseif ($page_request=='view_completed_requests') {
header('Location: view-completed-requests.php');
die();
}
}
else{
update_user_on_uin($_SESSION['account']['firstname'],
$_SESSION['account']['lastname'],
$_SESSION['account']['email'],
$_SESSION['account']['phone'],
$_SESSION['account']['ein'],
$_SESSION['account']['managerein'],
$_SESSION['account']['ouc'],
$_SESSION['account']['user_role'],
$_SESSION['account']['som'],
$_SESSION['account']['gm']);
//header('Location: setup-account.php?message=update');
header('Location: dashboard.php');
die();
}
case 'manager':
if ($_SESSION['account']['ouc']==$user['ouc']) {
if ($page_request=='request_form') {
header('Location: request-form-om.php');
die();
}
elseif ($page_request=='view_requests') {
header('Location: view-requests-om.php');
die();
}
elseif ($page_request=='view_accepted_requests') {
header('Location: view-accepted-requests.php');
die();
}
elseif ($page_request=='view_rejected_requests') {
header('Location: view-rejected-requests.php');
die();
}
elseif ($page_request=='view_coach_assigned_requests') {
header('Location: view-coachassigned-requests.php');
die();
}
elseif ($page_request=='view_completed_requests') {
header('Location: view-completed-requests.php');
die();
}
}
else{
update_user_on_uin($_SESSION['account']['firstname'],
$_SESSION['account']['lastname'],
$_SESSION['account']['email'],
$_SESSION['account']['phone'],
$_SESSION['account']['ein'],
$_SESSION['account']['managerein'],
$_SESSION['account']['ouc'],
$_SESSION['account']['user_role'],
$_SESSION['account']['som'],
$_SESSION['account']['gm']);
//header('Location: setup-account.php?message=update');
header('Location: dashboard.php');
// header('Location: setup-account.php?message=update');
die();
}
case 'coaching_manager':
if ($_SESSION['account']['ouc']==$user['ouc']) {
if ($page_request=='request_form') {
header('Location: request-form-coaching-manager.php');
die();
}
elseif ($page_request=='view_requests') {
header('Location: view-requests-coaching-manager.php');
die();
}
elseif ($page_request=='view_accepted_requests') {
header('Location: view-accepted-requests.php');
die();
}
elseif ($page_request=='view_rejected_requests') {
header('Location: view-rejected-requests.php');
die();
}
elseif ($page_request=='view_coach_assigned_requests') {
header('Location: view-coachassigned-requests.php');
die();
}
elseif ($page_request=='view_completed_requests') {
header('Location: view-completed-requests.php');
die();
}
elseif ($page_request=='graph') {
header('Location: graph.php');
die();
}
}
else{
update_user_on_uin($_SESSION['account']['firstname'],
$_SESSION['account']['lastname'],
$_SESSION['account']['email'],
$_SESSION['account']['phone'],
$_SESSION['account']['ein'],
$_SESSION['account']['managerein'],
$_SESSION['account']['ouc'],
$_SESSION['account']['user_role'],
$_SESSION['account']['som'],
$_SESSION['account']['gm']);
//header('Location: setup-account.php?message=update');
header('Location: dashboard.php');
//header('Location: setup-account.php?message=update');
die();
}
case 'coach':
if ($_SESSION['account']['ouc']==$user['ouc']) {
if ($page_request=='request_form') {
header('Location: request-form-coach.php');
die();
}
elseif ($page_request=='view_requests') {
header('Location: view-requests-coach.php');
die();
}
elseif ($page_request=='view_accepted_requests') {
header('Location: view-accepted-requests.php');
die();
}
elseif ($page_request=='view_rejected_requests') {
header('Location: view-rejected-requests.php');
die();
}
elseif ($page_request=='view_coach_assigned_requests') {
header('Location: view-coachassigned-requests.php');
die();
}
elseif ($page_request=='view_completed_requests') {
header('Location: view-completed-requests.php');
die();
}
}
else{
update_user_on_uin($_SESSION['account']['firstname'],
$_SESSION['account']['lastname'],
$_SESSION['account']['email'],
$_SESSION['account']['phone'],
$_SESSION['account']['ein'],
$_SESSION['account']['managerein'],
$_SESSION['account']['ouc'],
$_SESSION['account']['user_role'],
$_SESSION['account']['som'],
$_SESSION['account']['gm']);
//header('Location: setup-account.php?message=update');
header('Location: dashboard.php');
//header('Location: setup-account.php?message=update');
die();
}
default:
break;
}//end of switch
} //end of if block
else{
//header('Location: setup-account.php?message=new_user');
//var_dump("expression");
// die();
if( insert_user($_SESSION['account']['firstname'],
$_SESSION['account']['lastname'],
$_SESSION['account']['email'],
$_SESSION['account']['phone'],
$_SESSION['account']['ein'],
$_SESSION['account']['managerein'],
$_SESSION['account']['ouc'],
$_SESSION['account']['user_role'],
$_SESSION['account']['som'],
$_SESSION['account']['gm']) )
{
header("Location: dashboard.php");
die();
}
else
{
var_dump('Sorry we do not recognise you. bye!');
die();
}
// header("Location: dashboard.php");
// die(); */
}
//if no, redirect to role selection page
?>
此页面名称是dashboard.php
init.core.php 页面开始会话。
任务很简单。如果找到用户,则使用 $_Session 详细信息更新用户详细信息。如果没有,则添加新用户并重定向到此页面以显示相关信息。我可以看到它执行了 else 部分,即插入用户,但它在数据库中插入了很多记录,然后最终放弃声明 ERR_TOO_MANY_REDIRECTS
我哪里错了?
【问题讨论】:
-
这段代码所在的文件的名称是什么?
-
请使用
exit;,除非您明确想要中止带有die()的脚本 -
@RiggsFolly 手册明确指出:
die — Equivalent to exit。他们都中止了脚本。而在做header redirect的时候,其实是建议abort的。 -
@JonathanKuhn The Manual请统计
die()的使用量和exit;的使用量 -
@RiggsFolly 我的意思是
die与exit是一回事,甚至手册也指出它们是等价的。exit;将做与die;完全相同的事情。它们都是语言结构,并接受将输出给用户的可选状态代码或消息。die只是exit的别名。海莉沃森的评论并没有改变他们完全相同的事实。建议使用重定向来阻止页面的其余部分运行,请参见此处:stackoverflow.com/questions/2747791/…
标签: php redirect infinite-loop