Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
$_POST и $_GET
#1
вопрос по этим двум переменным...
вот код:
Код:
<?php
if($_POST['1'] == 'a3')
{
    $successfull += 1;
    $text='Прально!!1!11!1';
}
if($_GET['step'] == 'info' || $_GET['step'] == '')
{
$text = '
                Добро пожаловать на страницу прохождения онлайн теста правил дорожного движения!<br>
                Тест состоит из 10 вопросов которые сопроваждаются различными изображениями на которых изображены некоторые ситуации которые вам могут встретится на дороге.<br>
                <br>
                Чтобы перейти к прохождению теста нажмите кнопку Продолжить.
                <br>
                <br>
                <br>
                <br>
                <br>
                <br>
                <center><a href="/online_test/index.php?step=1"><img src="./images/ok-1.png" /></a></center>
';
}
if($_GET['step'] == 1)
{
$text='
<FORM ACTION="index.php">
<h3>Вопрос 1</h3>
<p>
Разрешается ли водителю пользоваться телефоном во время движения?<br>
<p>
<input name="1" value="a1" type="radio">Разрешено<br>
<input name="1" value="a2" type="radio">Запрещено<br>
<input name="1" value="a3" type="radio">Разрешается только при использовании технического устройства, позволяющего вести переговоры без использования рук.<br>
</p>
<br>
<INPUT TYPE="submit" VALUE="Ответить">
</p>
</FORM>
';
}
if($_GET['step'] == 2)
{
$text='
<FORM ACTION="index.php">
<h3>Вопрос 2</h3>
<p>
<center><img src="./images/2.gif" width="50%" height="30%" /></center><br>
Этот знак предупреждает о приближении к перекрестку, на котором Вы:<br>
<p>
<input name="2" value="a1" type="radio">Имеете право преимущественного проезда.<br>
<input name="2" value="a2" type="radio">Должны уступить дорогу всем транспортным средствам, движущимся по пересекаемой дороге.<br>
<input name="2" value="a3" type="radio">Должны уступить дорогу только транспортным средствам, приближающимся справа. <br>
</p>

<INPUT TYPE="submit" VALUE="Ответить">
</p>
</FORM>
';
}
?>
<html>
    <head>
        <title>Онлайн тест ПДД 2012</title>
        <meta name="description" content="Пройти онлайн тест ПДД" />
        <meta name="keywords" content="онлайн тест ПДД, тест ПДД онлайн 2012, пдд онлайн тест билеты,тесты пдд онлайн бесплатно " />
        <link href="/online_test/css/main.css" rel="stylesheet" type="text/css" media="all">
    </head>
    <body>
        <div id="main">
            <div id="block">
            <?php echo $text; ?>
            </div>
        </div>
    </body>
</html>
кнопка продолжить работает нормально, а вот последующие действия кнопкой Ответить (со страницы ?step=1) добавляют в адресную строку - index.php?1=a3
собственно говоря суть вопроса: Как сделать так, чтобы после нажатия кнопки "Ответить" результат записывался в переменную ($succ += 1Wink и скрипт переходил к следующему вопросу?

вот сам скрипт: http://гарант-права.рф/online_test/index.php
Mike-S.ru
Ответ
#2
потерто............
Ответ
#3
Лучше передавать POST с формы, при этом хранить скрытое поле с текущим ID вопроса.

<form action="/qa/" method="post">
<input type="hidden" name="question_id" value="$question_id" />
<!-- ... -->
</form>


$question_id может быть например $_GET['q'] (index.php?q=1) А дальше как душе угодно.

PHP код:
<?php

if ($_POST) {
// ...
if (isset($_POST['question_id'])) {
$nextQuestionId = $_POST['question_id'] + 1;
}
// ...
header('Location: http://site.ru/qa/step/' . $nextQuestionId);
}
Ответ
#4
Думаю количество правильных ответов и ошибок удобней хранить в сессиях. Так же удобней хранить шаг. То есть не нужно будет $_GET переменных. Если человек хочет начать тест заново, легко очистить сессии и начать заново и всё это время ссылка будет выглядеть чисто без GET переменных.

Можно и $_POST переменные использовать, но тут уже чуть больше кода будет выходить Smile
Ответ
#5
Спасибо, алгоритм работы понял)
Переписал скрипт и создал шаблон по которому будет вестись проверка правильных ответов)

Добавлено через 24 минуты
Ещё так же интерисует вопрос, как правильно записывать правильные ответы?
Сейчас я использую:
Код:
if($_POST['next'])
{
    if($_GET['question_id'] == 1 && $_POST['1'] == 'a3') { $pravilnih + 1; } // test код, тоже не пашет
    if($_POST['2'] == 'a3') { $pravilnih + 1; }
    if($_POST['3'] == 'a1') { $pravilnih + 1; }
    if($_POST['4'] == 'a3') { $pravilnih + 1; }
    if($_POST['5'] == 'a3') { $pravilnih + 1; }
    if($_POST['6'] == 'a2') { $pravilnih + 1; }
    if($_POST['7'] == 'a1') { $pravilnih + 1; }
    if($_POST['8'] == 'a2') { $pravilnih + 1; }
    if($_POST['9'] == 'a2') { $pravilnih + 1; }
    if($_POST['10'] == 'a1') { $pravilnih + 1; }
    $nextQuestionId = $_GET['question_id'] + 1;
    header('Location: http://xn----7sbabalc6ftagev.xn--p1ai/online_test/index.php?question_id=' .$nextQuestionId);
}
Почему то не работает Sad
вот html код:
Код:
<input name="10" value="a1" type="radio">Только по крайней правой. <br>
<input name="10" value="a2" type="radio">Не далее второй полосы. <br>
<input name="10" value="a3" type="radio">По любой, кроме крайней левой. <br>

Добавлено через 3 часа 48 минут
Рулез, спасибо) Действительно удобнее и намного безопаснее) хотя о какой безопасности может быть речь в онлайн тесте на ПДД Big Grin
Mike-S.ru
Ответ
#6
Цитата:if($_POST['2'] == 'a3') { $pravilnih + 1; }

это не присвоение.
Ответ
#7
То что пользователь не должен видеть (а именно количество правильных ответов и ошибок), то нельзя прогонять через браузер какими либо там переменными. Попробуйте в базу писать или в сессиях хранить.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)