перенаправление пользователя опроса на последнюю страницу, на которой он был

1

Я работаю над опросом, и я почти готов, но есть одно требование, которое действительно съело меня.

Пользователь может провести опрос, и есть 6 разных наборов вопросов, и каждый набор вопросов находится в группе вопросов от 1 до 6. Когда пользователь задает вопрос 1-4 и выходит из системы, он/она должен вернуться в систему и перенаправить в группу вопросов 5. До сих пор мой код работает и перенаправляется на первые три страницы (вопросы1.php, people.php и environment.php), но отказ для остальных.

Я думаю, что проблема - это мой if elseif statement. Любая помощь для достижения желаемого результата будет действительно оценена. Ура!

Вот код

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
    также обратите внимание, что после header() некоторый код все еще может быть выполнен. Чтобы предотвратить это, добавьте exit(); после каждого header()
  • 1
    Вы используете $row вне вашего оператора while , затем перезаписываете его и используете снова в последнем elseif .
Показать ещё 13 комментариев
Теги:
mysqli

2 ответа

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

Теперь его намного легче отлаживать. Попробуйте этот код;)

  • 0
    код выглядит чище, чем у меня .. хотя при запуске он перенаправляется на первое место people.php
  • 0
    Я уверен, что этот код выполняет свою работу :) Если это всегда перенаправляет вас на people.php , это означает, что значение столбца question_group_id равно 1. Для всех будет полезнее, если вы покажете запрос Вы использовали и структуру исходной таблицы из базы данных.
Показать ещё 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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню