【问题标题】:PHP redirect Loop error issuePHP重定向循环错误问题
【发布时间】: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 我的意思是dieexit 是一回事,甚至手册也指出它们是等价的。 exit; 将做与die; 完全相同的事情。它们都是语言结构,并接受将输出给用户的可选状态代码或消息。 die 只是 exit 的别名。海莉沃森的评论并没有改变他们完全相同的事实。建议使用重定向来阻止页面的其余部分运行,请参见此处:stackoverflow.com/questions/2747791/…

标签: php redirect infinite-loop


【解决方案1】:

我看不到您在哪里设置 $_SESSION['account']['id'] 的值。如果没有设置,它将始终转到主 else 并插入一个新用户。

话虽如此,您是在脚本开头调用session_start() 吗?如果不是,则在脚本调用之间不会保留这些值。

【讨论】:

  • 别担心 $_SESSION['account']['id'] 我设置正确(仔细检查)只是这里没有显示
  • 您是否也在脚本开头调用session_start()php.net/manual/en/function.session-start.php
  • 是的,我是...我将尝试添加整个页面
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多