[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: запуск проверки при переходе на страницу
bma
делаю тест.
суть трабла: вывод вопроса и проверка все на одной странице.
после ответа, по сабмиту пользователь возвращается на туже стр. где должна произойти проверка ответа, а потом вывод след вопроса.

вопрос: как реализовать, чтобы проверка ( а сталобыть и добавление баллов и пр) срабатывала именно при переходе на страницу, а ни при обновлении?





Спустя 15 минут, 52 секунды (21.05.2009 - 13:30) sergeiss написал(а):
Для этого надо сделать промежуточный переход на другую страницу, с текстом типа "ваш ответ принят". Ну, как тут на форуме, например (в частности, при выборе новых сообщений).
И потом возвращаться (переходить) на страницу уже без "довеска" в виде параметров.
Тогда простое обновление не создаст проблем. Потому что при обновлении твой скрипт увидит, что ничего не было нажато, никаких кнопок.

Спустя 29 минут, 1 секунда (21.05.2009 - 13:59) bma написал(а):
Если на промежуточной стр. проводить проверку (у меня так сейсас), то никто не мешает на шее вернуться кнопкой назад и накрутить ответы...
+выглядит это не очень 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, который сейчас пытается записаться.

Вот так. 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//показывает начальное значение
if ($perex==1)
{
echo 
'1';
}
else
{
echo 
'2';
}
$perex=0
echo 
$perex//показывает конечное. тобш 0.


но при обновлении страницы значение по прежнему остается тем, что и было(несмотря на обнуление).

В чем ошибка?

Спустя 13 минут, 55 секунд (21.05.2009 - 16:45) ApuktaChehov написал(а):
Я не очень понял.
Но вроде у тебя ошибка.
Ты отправляешь данные на ту же страницу?
Тогда должно быть так:
PHP
echo $_POST['perex']; //показывает начальное значение
if ($_POST['perex']==1)
{
echo 
'1';
}
else
{
echo 
'2';
}
$_POST['perex']=0;// а лучше unset($_POST['perex']); 
echo $_POST['perex']; //показывает конечное. тобш 0.


Мне кажется, что можно сделать еще проще.
Создай сессию и запищи в нее условное обозначение пройденных вопросов.
Типа: вопрос1 - ok.
вопрос2 - ok.
...

И в каждом скрипте проверяй не отвечали ли на этот вопрос пользователь.
А еще круче, хранить все это дело в куках laugh.gif

Спустя 4 часа, 12 минут, 42 секунды (21.05.2009 - 20:57) bma написал(а):
Все по прежнему. Обнуляется (если смотреть по выоду echo), но в тоже время остается 1....

PHP
<?php 

echo $_POST['perex']; //показывает начальное значение
if ($_POST['perex']==1)
{
echo 
'1';
}
else
{
echo 
'2';
}
$_POST['perex']=0;// а лучше unset($_POST['perex']); 
echo $_POST['perex']; //показывает конечное. тобш 0.

    



echo "<form method=post  name=formname1 action=test.php>

<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=780 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>
<INPUT type=text value=1 name=perex>
<p align=center ><input type=submit value=NEXT id=sm disabled></p>
</form>"
;

 
?>
</table>
</table>

Спустя 58 минут, 8 секунд (21.05.2009 - 21:55) ApuktaChehov написал(а):
У тебя он не обнуляется потому, что ты каждый раз, как обновляешь страницу передаешь полем "INPUT type=text value=1 name=perex" эту еденицу. Вот и все.
Я тут настрочил быстренько пример с сессией.
Лови:
PHP
<?php 
session_start
();//Стартуем сессию
if(@$_POST['votvet']==1||@$_POST['votvet']==2){//определяем был ли произведен ответ на вопрос
//Если ответ произведен, проверяем, элемент массива, который отвечает за ответы.
//Если такой элемент массива не существует, значит ответ еще не давался.
    if(!isset($_SESSION['vopros1'])){$_SESSION['vopros1']=true;//Создаем этот элемент
echo "Спасибо большое за ответ!";
//А если элемент массива уже существует, значит на этот вопрос уже отвечали.
        }else{echo "На этот вопрос Вы уже отвечали, одного раза достаточно!";
    }
//Если ответ не произведен, выводим соответствующее сообщение
}else{echo "Ответьте на следующий вопрос:";}

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


Я так понял, проблема в томже, что и была в моём коде. переменная votvet же не обнуляется и при рефреше помнится той, что была. итог - проверка на "произведен ли ответ" проходится, а код проверки верно/неверно соответственно засчитывает ответ.....

Что я напутал? О_о sad.gif
В прошлый раз, я давал ток кусок кода.Может из него было не всё ясно...




PHP
<?php 
 
include "dbsettings.inc";
    include 
"protect.inc";
    if(isset(
$_GET["err"])) 
    {         if(
$_GET["err"]==1)
         {print 
"Вы не имеете прав для просмотра этой таблицы!";}
    }
    
$quer1="SELECT *FROM voprosotvet WHERE id=$massiv[$i]";
$resul1=mysql_query($quer1) or die("Err:quer1");  


if(@
$_POST['votvet']==1||@$_POST['votvet']==2|@$_POST['votvet']==3|@$_POST['votvet']==4|@$_POST['votvet']==5|@$_POST['votvet']==6)
{
   if(!isset(
$massiv_valid[$i])){$massiv_valid[$i]=true;//Создаем этот элемент
echo "Спасибо большое за ответ!";
 if (
$votvet==$true_otvet)
{
//если да - колво правильных +1, i+1,номер вопроса+1
    
$T_vop++;
    
$i++;
    
$vop_num++;
}
else
{
//еслии не правильно - колво неправильных+1
      
$F_vop++;
}     
//А если элемент массива уже существует, значит на этот вопрос уже отвечали.
        
}else{echo "На этот вопрос Вы уже отвечали, одного раза достаточно!";
    }
//Если ответ не произведен, выводим соответствующее сообщение
}else{echo "Ответьте на следующий вопрос:";}

  
$quer1="SELECT *FROM voprosotvet WHERE id=$massiv[$i]";
$resul1=mysql_query($quer1) or die("Err:quer1");  
    

while(
$row=mysql_fetch_array($resul1))
{
echo 
"<form method=post  name=formname1 action=test2.php>
<p><strong>ID:</strong> $massiv[$i]  <strong>Попыток:</strong> $F_vop <strong>Вопросов отвечено правильно:</strong>  $T_vop; <strong>Вопросов отвечено не правильно:</strong> $F_vop;</p>

<table align=center width=800 border=0 cellspacing=0 cellpadding=0>
<tr><H1 ALIGN=center>Проверочный тест:</H1></tr>
<tr><td align=center><br><strong>Имя тестируемого:</strong> $sUname</td><td align=center><br><strong>Группа:</strong> $sUgryp</td></tr>
</table>


<table align=center width=800 border=0 cellspacing=0 cellpadding=0>
<HR>

<p align=center><strong>вопрос №: $vop_num </strong> <br> <label name=vopros rows=5 cols=70>$row[vopros]</p>
<p align=center><strong>Выберете правильный ответ:</strong> 
<p align=center ><img border=0  src=Admin/DATA/images/$row[image_media_file]></p>

<table align=center width=780 border=0 cellspacing=6 cellpadding=0>
<tr>
<td width=370> <label name=otvet1 rows=2 cols=60>$row[otvet1]</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>$row[otvet2]</td><td width=10><input type='radio' name='votvet' value=2 onClick=sm.disabled=false;> </td>
</tr><tr>
<td> <label name=otvet3 rows=2 cols=60>$row[otvet3]</td><td><input type='radio' name='votvet' value=3 onClick=sm.disabled=false;> </td>
<td> <label name=otvet4 rows=2 cols=60>$row[otvet4]</td><td><input type='radio' name='votvet' value=4 onClick=sm.disabled=false;> </td>
</tr><tr>
<td> <label name=otvet5 rows=2 cols=60>$row[otvet5]</td><td><input type='radio' name='votvet' value=5 onClick=sm.disabled=false;> </td>
<td> <label name=otvet6 rows=2 cols=60>$row[otvet6]</td><td><input type='radio' name='votvet' value=6 onClick=sm.disabled=false;> </td>
</tr>
</table>
<br>
<INPUT type=hidden value=$row[id] name=id>
<INPUT type=text value=$row[true_otvet] name=true_otvet>
<p align=center ><input type=submit onclick=V1() value=NEXT id=sm disabled></p>
</form>"
;
//вынос в сессию данных поля 
$_SESSION['true_otvet'] = $row['true_otvet'];
//вынос в сессию данных поля 
 
}

Спустя 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]))

{
echo 'false';
echo $ch;
if ($variant==1)
{
 if ($votvet==$true_otvet)
{
$massiv_valid[]=$i;
//если да - колво правильных +1, i+1,номер вопроса+1
    $T_vop++;
    $i++;
    $vop_num++;

}
else
{
//еслии не правильно - колво неправильных+1
      $F_vop++;
}
}
else
{
 echo 'True';

}


Мне нужно, чтобы при запуске проверялось был ли раньше отвечен этот вопрос.
Использую конструкцию !isset($massiv_valid .

Заношу в массив номер верного шага $massiv_valid[]=$i;
Вопрос: как сделать проверку? т.е. нужно проверить был ли вопрос с этим номером. А как? По номеру шага?

Если да, то как его задать. Если я перейду назад - то номер шага будет в памяти тот, который был задан при запуске новой стр. Как задать, чтобы переменная =i задавалась при submit'е формы?

или может другие идеи будут?

ВОт в этом то и загвоздка у меня и суть поисков решения... sad.gif

Спустя 13 часов, 36 минут, 3 секунды (24.05.2009 - 13:05) bma написал(а):
Вопрос снимается smile.gif Разобрался smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.