цикл через URL - PullRequest
       5

цикл через URL

0 голосов
/ 02 октября 2011

Я хочу сделать цикл, обычно это делается с while do for и т. Д., Но когда процесс большой, я придумал решение обновить страницу, повторив javascript, чтобы обновить страницу дляследующий цикл.

, например:

Страница - http://localhost/index.php -> это преформирует первую итерацию с $i=1;

в конце сценария.будет перенаправлен на http://localhost/index.php?i=$i++

if (!$_GET['i']){
 $i = 1;
}else{
 $i = $_GET['i'];
}
if ($i<500){
 // proceed with $i = $_GET['i']
 //then redirect to  http://localhost/index.php?i=$i++
}else{
 echo "done";
}

Теперь рассмотрим ситуацию, когда вводимые параметры поступают из FORM в этот скрипт.(т.е. $parameter1 , $parameter2, $parameter3) Затем я должен каждый раз передавать их на новый URL (следующая итерация).

При нормальной работе я могу передать их как переменную GET на новый URL, но как я могу передать их, если яхотите, чтобы пользователь мог видеть значение параметров в URL?

Ответы [ 2 ]

1 голос
/ 02 октября 2011

При нормальной работе я могу передать их как переменную GET в новый URL, но как я могу передать их, если я не хочу, чтобы пользователь мог видеть значение параметров в URL?

Вы не можете сделать это с помощью простого перенаправления, но если вы говорите о конкретном пользователе, вы можете сделать это, назначив эти параметры как переменные сеанса Документы , а затем передать идентификатор сеанса в качестве дополнительного параметра (или доверять, что у пользователя включены файлы cookie).

function do_redirect($i, Array $parameters)
{
   $i = (int) $i;
   $parameters['i'] = $i; // save to session as well
   $_SESSION['parameters'] = $parameters;
   // redirect to http://localhost/index.php?i=$i&SID
}

if (is_form_request())
{
    $parameters = get_form_parameters();
    do_redirect(1, $parameters);
}
elseif (is_redirect_loop_request())
{
    $parameters = $_SESSION['parameters'];
    $i = $parameters['i'];
    if ($i < 500)
    {
        do_redirect($i++, $parameters);
    } else {
        echo "done.";
    }
}
0 голосов
/ 02 октября 2011

Не хамить, но оба приведенных выше ответа весьма склонны к проблемам безопасности (но решение сеанса является лучшим).Что касается «шифрования» решения @itamar: это не совсем шифрование ... Это называется «Цезарь Сайфер» (http://en.wikipedia.org/wiki/Caesar_cipher),, который действительно так же безопасен, как бумажный ядерный бункер ...

быть намного проще и безопаснее, чем может быть; не сохранять итерацию в сеансе, а в базе данных. Для следующего запроса единственное, что вам нужно сделать, - это получить итератор из базы данных и продолжить с тем, что вы хотитеdo. Сессии могут быть украдены, что означает, что кто-то может позволить вам выполнить итерацию, скажем, $ i = 10 тысяч раз. Это невозможно сделать, когда итератор хранится в защищенной базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...