我一直在进行一项调查,我差不多完成了,但有一项要求确实让我失望了。
用户可以进行调查,有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");
}
答案 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;