将调查用户重定向到他/她所在的最后一页

时间:2015-07-08 12:16:42

标签: php sql mysqli

我一直在进行一项调查,我差不多完成了,但有一项要求确实让我失望了。

用户可以进行调查,有6组不同的问题,每组问题都在1-6的问题组中。当用户对问题组1-4进行问题并注销时,他/她应该重新登录并重定向到问题组5.到目前为止,我的代码正在运行并重定向到前三页(questions1.php,people.php和environment.php),但拒绝其余的。

我认为问题是我的if elseif语句。任何帮助以实现预期的结果将非常感激。干杯!

这是代码

if ($row['userid']==$user){
while($row = mysql_fetch_assoc($result_set)){
if($row['question_group_id']==1 && $row['choosen']==1){
 header("location:people.php"); 
       }
elseif($row['question_group_id']==2 && $row['choosen']==1){
 header("Location:environment.php"); 
    }
elseif($row['question_group_id']==3 && $row['choosen']==1){
 header("Location:widerorganization.php"); 
   }
elseif($row['question_group_id']==4 && $row['choosen']==1){
 header("Location:procurement.php"); 
  }
elseif($row['question_group_id']==5 && $row['choosen']==1){
 header("Location: communication.php"); 
   }
elseif($row['question_group_id']==6 && $row['choosen']==1){
 header("Location: notificationpage.php"); 
    }}}
 else {
 header("Location:questions1.php"); 
    } 

2 个答案:

答案 0 :(得分:0)

这是一个渲染干净代码的问题。

我刚刚重新格式化了你的代码。以下是您的代码:

if ($row['userid']==$user)
{
    while($row = mysql_fetch_assoc($result_set))
    {
        if ($row['question_group_id']==1 && $row['choosen']==1)
        {
            header("location:people.php");
        }
        else if($row['question_group_id']==2 && $row['choosen']==1)
        {
            header("Location:environment.php"); 
        }
        else if ($row['question_group_id']==3 && $row['choosen']==1)
        {
            header("Location:widerorganization.php");
        }
        else if ($row['question_group_id']==4 && $row['choosen']==1)
        {
            header("Location:procurement.php"); 
        }
        else if ($row['question_group_id']==5 && $row['choosen']==1)
        {
            header("Location: communication.php");
        }
        else if ($row['question_group_id']==6 && $row['choosen']==1)
        {
            header("Location: notificationpage.php"); 
        }

    }
}
else
{
    header("Location:questions1.php"); 
}

解决方案:由于每个条件都有可预测的模式,为什么我们不将这些页面放入关联数组而不是创建繁琐的if条件?无论如何,这是我对您的代码的建议调整。

<?php

$locations = array(
    // Question Group ID => Landing page
    1 => 'people.php',
    2 => 'environment.php',
    3 => 'wideorganization.php',
    4 => 'procurement.php',
    5 => 'communication.php',
    6 => 'notificationpage.php'
);

if ($row['userid']==$user)
{
    while($row = mysql_fetch_assoc($result_set))
    {
        // Here's the Question Group ID
        $questionGroupID = $row['question_group_id'];

        // Now we determine here
        if (isset($locations[$questionGroupID]) && $row['choosen'] == 1)
        {
            // Defined from the associative array above
            header(sprintf("location:%s", $locations[$questionGroupID]));
            exit();
        }
    }
}
else
{
    header("location:questions1.php"); 
}

现在调试起来要容易得多。请尝试此代码;)

答案 1 :(得分:0)

根据您的要求,您的代码的格式没有循环,并带有switch语句。这可能无法直接起作用,因为$newrow的内容和$row的来源仍有太多不确定因素。但这是一个很好的开始,非常适合调试。 switch语句允许您对每个案例进行一些自定义修改(就像编辑问题之前一样)。

$page = 'questions1.php';
if ($row['userid'] == $user):
    $newrow = mysql_fetch_assoc($result_set);
    if ($newrow['choosen'] == 1):
        switch ($newrow['question_group_id']):
            case 1:
                $page = 'people.php';
                break;
            case 2:
                $page = 'enviroment.php';
                break;
            case 3:
                $page = 'widerorganization.php';
                break;
            case 4:
                $page = 'procurement.php';
                break;
            case 5:
                $page = 'communication.php';
                break;
            case 6:
                $page = 'notificationpage.php';
                break;
        endswitch;
    endif;
endif;
header("Location: {$page}");
exit;