суть трабла: вывод вопроса и проверка все на одной странице.
после ответа, по сабмиту пользователь возвращается на туже стр. где должна произойти проверка ответа, а потом вывод след вопроса.
вопрос: как реализовать, чтобы проверка ( а сталобыть и добавление баллов и пр) срабатывала именно при переходе на страницу, а ни при обновлении?
Спустя 15 минут, 52 секунды (21.05.2009 - 13:30) sergeiss написал(а):
Для этого надо сделать промежуточный переход на другую страницу, с текстом типа "ваш ответ принят". Ну, как тут на форуме, например (в частности, при выборе новых сообщений).
И потом возвращаться (переходить) на страницу уже без "довеска" в виде параметров.
Тогда простое обновление не создаст проблем. Потому что при обновлении твой скрипт увидит, что ничего не было нажато, никаких кнопок.
И потом возвращаться (переходить) на страницу уже без "довеска" в виде параметров.
Тогда простое обновление не создаст проблем. Потому что при обновлении твой скрипт увидит, что ничего не было нажато, никаких кнопок.
Спустя 29 минут, 1 секунда (21.05.2009 - 13:59) bma написал(а):
Если на промежуточной стр. проводить проверку (у меня так сейсас), то никто не мешает на шее вернуться кнопкой назад и накрутить ответы...
+выглядит это не очень
+выглядит это не очень
![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
Спустя 26 секунд (21.05.2009 - 13:59) Joker написал(а):
Цитата (sergeiss @ 21.05.2009 - 16:30) |
Для этого надо сделать промежуточный переход на другую страницу, с текстом типа "ваш ответ принят". Ну, как тут на форуме, например (в частности, при выборе новых сообщений). |
Мне всегда не нравилось когда сылают на левую страниу, это делают обычно в сложных движках, а в тесте промежуточную страницу не интересно делать. надо просто логику правильно построить.
Вот давненько тест iq делал как только начинал изучать php там и проверки есть и все) посмотри если интересно тынц
Спустя 14 минут, 59 секунд (21.05.2009 - 14:14) glock18 написал(а):
Может быть self-redirect поможет? Хотя я не совсем понимаю в чем конкретно сложность. Подкрепи вопрос кодом.
Спустя 1 час, 41 минута, 3 секунды (21.05.2009 - 15:55) ApuktaChehov написал(а):
Я решил эту проблему с помощью сессии.
Создается сессия. Генерируеш id балла, который записывается куда то, и храниш его в сессии.
id генерируется 1 раз, для каждого вопроса индивидуально и хранится в сессии.
Далее делаешь проверку, не существует ли в записях балла с id, который сейчас пытается записаться.
Вот так.
Создается сессия. Генерируеш id балла, который записывается куда то, и храниш его в сессии.
id генерируется 1 раз, для каждого вопроса индивидуально и хранится в сессии.
Далее делаешь проверку, не существует ли в записях балла с id, который сейчас пытается записаться.
Вот так.
![wink.gif](http://phpforum.ru/html/emoticons/wink.gif)
Спустя 35 минут, 36 секунд (21.05.2009 - 16:31) bma написал(а):
Я делаю проверку похожим способом. задаю через
Код |
<INPUT type=hidden value=1 name=perex> |
значение переменной=1. и оно задается при сабмите.
при нереходе опять на стр. идет проверка, если $perex=1, то подсчёт и пополнение счетчиков, если 0, то ничего не производится.
после $perex обнуляется. (echo показывает что это так).
PHP |
echo $perex; //показывает начальное значение |
но при обновлении страницы значение по прежнему остается тем, что и было(несмотря на обнуление).
В чем ошибка?
Спустя 13 минут, 55 секунд (21.05.2009 - 16:45) ApuktaChehov написал(а):
Я не очень понял.
Но вроде у тебя ошибка.
Ты отправляешь данные на ту же страницу?
Тогда должно быть так:
Но вроде у тебя ошибка.
Ты отправляешь данные на ту же страницу?
Тогда должно быть так:
PHP |
echo $_POST['perex']; //показывает начальное значение |
Мне кажется, что можно сделать еще проще.
Создай сессию и запищи в нее условное обозначение пройденных вопросов.
Типа: вопрос1 - ok.
вопрос2 - ok.
...
И в каждом скрипте проверяй не отвечали ли на этот вопрос пользователь.
А еще круче, хранить все это дело в куках
![laugh.gif](http://phpforum.ru/html/emoticons/laugh.gif)
Спустя 4 часа, 12 минут, 42 секунды (21.05.2009 - 20:57) bma написал(а):
Все по прежнему. Обнуляется (если смотреть по выоду echo), но в тоже время остается 1....
PHP |
<?php |
Спустя 58 минут, 8 секунд (21.05.2009 - 21:55) ApuktaChehov написал(а):
У тебя он не обнуляется потому, что ты каждый раз, как обновляешь страницу передаешь полем "INPUT type=text value=1 name=perex" эту еденицу. Вот и все.
Я тут настрочил быстренько пример с сессией.
Лови:
Я тут настрочил быстренько пример с сессией.
Лови:
PHP |
<?php |
HTML |
<form method=post name=formname1 action="</span>"> <<span style='color:blue'>table align=center width=800 border=0 cellspacing=0 cellpadding=0> <HR> <p align=center><label name=vopros rows=5 cols=70>vopros 1</p> <p align=center><strong>Выберете правильный ответ:</strong> <table align=center width=70 border=0 cellspacing=6 cellpadding=0> <tr> <td width=370> <label name=otvet1 rows=2 cols=60>1</td><td width=10><input type='radio' name='votvet' value=1 onClick=sm.disabled=false;> </td> <td width=370> <label name=otvet2 rows=2 cols=60>2</td><td width=10><input type='radio' name='votvet' value=2 onClick=sm.disabled=false;> </td> </tr> </tr> </table> <br> <p align=center ><input type=submit value=NEXT id=sm disabled></p> </form> </table> </table> </body> </html> |
Спустя 1 день, 19 часов, 43 минуты, 45 секунд (23.05.2009 - 17:39) bma написал(а):
Эм. либо я чегото не понял, либо это не работает...?
Первый проход работает норм. а дальше...
Будь то рефреш или возвращение - все равно номер заносится в масссив... и сталобыть ничего не работает![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
Я так понял, проблема в томже, что и была в моём коде. переменная votvet же не обнуляется и при рефреше помнится той, что была. итог - проверка на "произведен ли ответ" проходится, а код проверки верно/неверно соответственно засчитывает ответ.....
Что я напутал? О_о![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
В прошлый раз, я давал ток кусок кода.Может из него было не всё ясно...
Первый проход работает норм. а дальше...
Будь то рефреш или возвращение - все равно номер заносится в масссив... и сталобыть ничего не работает
![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
Я так понял, проблема в томже, что и была в моём коде. переменная votvet же не обнуляется и при рефреше помнится той, что была. итог - проверка на "произведен ли ответ" проходится, а код проверки верно/неверно соответственно засчитывает ответ.....
Что я напутал? О_о
![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
В прошлый раз, я давал ток кусок кода.Может из него было не всё ясно...
PHP |
<?php |
Спустя 3 часа, 1 минута, 46 секунд (23.05.2009 - 20:41) bma написал(а):
если "INPUT type=text value=1 name=perex" или $Session задают переменные при запуске страницы, то как можно сделать, чтобы переменной задавалось значение именно по Сабмиту?
Спустя 2 часа, 48 минут, 14 секунд (23.05.2009 - 23:29) bma написал(а):
Ладно. Бог с ней, с идеей "все на одной стр". Уже нет времени. Уже нужно нести.
Помогите сделать проверку. Вернее как.
Есть код:
Помогите сделать проверку. Вернее как.
Есть код:
PHP |
if(!isset($massiv_valid[$ii])) |
Мне нужно, чтобы при запуске проверялось был ли раньше отвечен этот вопрос.
Использую конструкцию !isset($massiv_valid .
Заношу в массив номер верного шага $massiv_valid[]=$i;
Вопрос: как сделать проверку? т.е. нужно проверить был ли вопрос с этим номером. А как? По номеру шага?
Если да, то как его задать. Если я перейду назад - то номер шага будет в памяти тот, который был задан при запуске новой стр. Как задать, чтобы переменная =i задавалась при submit'е формы?
или может другие идеи будут?
ВОт в этом то и загвоздка у меня и суть поисков решения...
![sad.gif](http://phpforum.ru/html/emoticons/sad.gif)
Спустя 13 часов, 36 минут, 3 секунды (24.05.2009 - 13:05) bma написал(а):
Вопрос снимается
Разобрался
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)