Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将调查用户重定向到他/她所在的最后一页_Php_Sql_Mysqli - Fatal编程技术网

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

Php 将调查用户重定向到他/她所在的最后一页,php,sql,mysqli,Php,Sql,Mysqli,我一直在做一项调查,我几乎完成了,但有一个要求真的让我筋疲力尽 用户可以进行调查,共有6组不同的问题,每组问题位于1-6的问题组中。当用户进行问题组1-4并注销时,他/她应重新登录并重定向到问题组5。到目前为止,我的代码正在工作并重定向到前三个页面(questions1.php、people.php和environment.php),但其余页面拒绝 我认为问题在于我的if-elseif声明。我们非常感谢为实现预期结果所提供的任何帮助。干杯 这是密码 if ($row['userid']==$us

我一直在做一项调查,我几乎完成了,但有一个要求真的让我筋疲力尽

用户可以进行调查,共有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"); 
    } 

这是一个呈现干净代码的问题

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

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"); 
}

这是您的代码,按照您的要求,不带循环,带有
开关
语句。这可能不会直接起作用,因为关于
$newrow
的内容和
$row
的来源仍然存在太多的不确定性。但这是一个很好的开始,对于调试来说真的很好。
switch
语句允许您对每个案例进行一些自定义修改(正如您在编辑问题之前所做的那样)


还要注意,在
header()之后,可能仍会执行一些代码。要防止这种情况,请添加
exit()
在每次
header()
之后,您在
while
语句之外使用
$row
,然后您将覆盖它,并在最后一次
elseif
中再次使用它。您好,Dave,您的问题的格式真的可以通过一点TLC来实现,这将使我们更容易帮助您@塞巴斯蒂安特罗伊,哈哈…酷…@vonUbisch我刚才看到了..在上一个elsei上如果我去掉了“userid”的行..我把循环外的userid放在循环内,但这会使代码更糟..它甚至没有检查任何东西,而是直接转到questions1.php,这是elsei代码看起来比我的更干净..尽管当我运行它时会重定向到第一个位置people.phpI我很确定这段代码可以完成它的工作:)如果它总是将您重定向到
people.php
,这意味着
question\u group\u id
列的值是1。如果你能从数据库中显示你使用的查询和源表的结构,那么每个人都能帮助你,这将更有帮助。我正在与一位用户进行测试,他对前3个组进行了调查。因此,此人应该被引导到procurement.php。请让我显示查询和表结构
$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;