|
|
|
| Как собственно можно реализовать : )
У меня есть, к примеру, 10 вопросов, после ответа на 1-ый вопрос юзер должен переходить ко 2-ому, от 2-го к 3-ему и.т.д... Но у меня получается, что либо все формы отображаются сразу (все 10), либо скрипт проверки на правильность введенных данных выполняется еще до заполнения формы % ) Как с этим можно бороться? ) | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 18:44)
| | >Как собственно можно реализовать : )
>
>У меня есть, к примеру, 10 вопросов, после ответа на 1-ый вопрос юзер должен переходить ко 2-ому, от 2-го к 3-ему и.т.д...
чем это плохо? | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 18:46)
| | Мне нужно, чтобы после ответа на 1-ый вопрос появлялся 2-й вопрос, а 1-ый исчезал ;) | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 19:05)
| | и что мешает выводить скриптом форму для очередного вопроса? | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 19:46)
| | Мешает выводить то, что я не пойму как это сделать ))).
Что неправильно в этом коде ?
<?
$form1 =
"<form action=vopros.php method=post>
Вопрос 1 ?
<input type=checkbox name=1 value=variant1>
<input type=checkbox name=2 value=variant2>
<input type=hidden name=proverka value=da>
<input type=submit>
</form>";
$form2 =
"<form action=vopros.php method=post>
Вопрос 2 ?
<input type=checkbox name=3 value=variant3>
<input type=checkbox name=4 value=variant4>
<input type=hidden name=proverka2 value=da>
<input type=submit>
</form>";
// Скрипт проверки:
if($proverka != "da")
{
print $form1;
}
else
{
print $form2;
}
?>
|
| |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 19:54)
| | В этом коде неправильно то, что переменная $proverka в скрипте не определена.
Остальное не особо оптимально, но в принципе правильно. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 20:02)
| | эм.. как не определена?
Всмысле вы имеете ввиду, что вместо $proverka следует писать $_POST['proverka'] ? | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 20:22)
| | >Всмысле вы имеете ввиду, что вместо $proverka следует писать $_POST['proverka'] ?
Именно это. Именно следует. | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 19:54)
| | <?php
$proverka = $_POST['proverka']; // попробуй в свой скрипт добавить вот это
...
if($proverka != "da")
{
print $form1;
}
else
{
print $form2;
}
?> | |
|
|
|
|
|
|
|
для: testdriver
(30.07.2007 в 20:26)
| |
<?
$form1 =
"<form action=vopros.php method=post>
Вопрос 1 ?
<input type=checkbox name=1 value=variant1>
<input type=checkbox name=2 value=variant2>
<input type=hidden name=proverka value=da>
<input type=submit>
</form>";
$form2 =
"<form action=vopros.php method=post>
Вопрос 2 ?
<input type=checkbox name=3 value=variant3>
<input type=checkbox name=4 value=variant4>
<input type=hidden name=proverka2 value=da>
<input type=submit>
</form>";
$form3="
---
";
$form4="
---
";
// Скрипт проверки:
if($proverka != "da")
{
print $form1;
}
elseif
{
print $form2;
}
elseif($proverka3 !="da")
{
print $form3;
}
else
{
print $form4;
}
?>
|
Для 4 форм выводящихся одна за другой этот скрипт верен? | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 20:44)
| | Да не рационально это все как то ... | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 20:44)
| | >Для 4 форм выводящихся одна за другой этот скрипт верен?
Ничего не изменилось. Как не было переменной, так и не стало. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 20:51)
| | 2testdriver,
А как можете предложить реализовать это вы? ;)
Ничего не изменилось. Как не было переменной, так и не стало.
$proverka=$_POST['proverka'];
$proverka2=$_POST['proverka2'];
$proverka3=$_POST['proverka3'];
$proverka4=$_POST['proverka4'];
|
Это я уже понял, мне нужен только алгоритм, который позволял бы показывать одну форму за другой.. | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 20:56)
| | Я бы с базой данных это сделал.
И тестдрайвер прав рациональности маловато.
Я бы сделал форму одну выводящую вопрос по ID, и с каждой формой скрытым полем передавал ID следующего вопроса. На мой взгляд это более универсально. | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 20:56)
| | Valick предложил не плохой вариант, на мой взгляд более предпочтительный чем ваш. Хотя если у вас вопросов не много предполагается использовать то можно и на файлах сделать, и обойтись без базы данных, тут как вам собственно удобнее. | |
|
|
|
|
|
|
|
для: testdriver
(30.07.2007 в 21:08)
| | Спасибо за алгоритм Valick и совет testdriver'а, но у меня действительно не так много вопросов (~10). Вот я и хочу узнать, как нужно построить конструкцию if..elseif, чтобы все формы показывались поочередно..
Можете написать как так сделать ? Заранее благодарен ) | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 21:17)
| | Вы можете нарисовать массив, который бы хранил описание всей базы теста. Если вопросов там и вправду около деcятка, это труда не составит. | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 20:56)
| | >Это я уже понял, мне нужен только алгоритм, который позволял бы показывать одну форму за другой..
для ответа на этот вопрос Вы привели слишком мало данных.
Нужно знать, как зависят от номера вопроса тексты вопросов, а также поясняющие тексты и количество самих ответов.
Тогда можно было бы говорить об алгоритме, реализовывать который (тут Valick прав) куда проще на БД, чем как-то еще. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 21:15)
| | вопрос 1
кол-во лет?
ответ1
ответ2
ответ3
вопрос 2
сайты каких тематик вы посещаете ?
ответ1
ответ2
ответ3
вопрос 3
сколько времени вы проводите в интернете?
ответ1
ответ2
ответ3
вопрос4
покупаете какие-либо товары через интернет?
ответ1
ответ2
ответ3
Если больше ответов под номером 1, то результат один, если больше ответов под номером 2, то другой, больше под номером 3 - четвертый. | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 21:24)
| | Вполне можно без базы данных обойтись. | |
|
|
|
|
|
|
|
для: testdriver
(30.07.2007 в 21:28)
| | Я Вам больше скажу - можно обойтись вообще без скриптов серверной стороны. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 22:16)
| | тоже выход, чего сервер то зря загружать?! пусть вся нагрузка будет на клиенте :))) | |
|
|
|
|
|
|
|
для: interest_quastion
(30.07.2007 в 21:24)
| | .
<?php
$qtnb = array(
1=>array('q' =>'кол-во лет?',
'a'=> array(1=>'ответ1',2=>'ответ2',3=>'ответ3'))
,2=>array('q' =>'сайты каких тематик вы посещаете?',
'a'=> array(1=>'ответ1',2=>'ответ2',3=>'ответ3'))
,3=>array('q' =>'сколько времени вы проводите в интернете?',
'a'=> array(1=>'ответ1',2=>'ответ2',3=>'ответ3'))
,4=>array('q' =>'покупаете какие-либо товары через интернет?',
'a'=> array(1=>'ответ1',2=>'ответ2',3=>'ответ3'))
);
$answ = array(1=> 'один', 2=> 'другой', 3=> 'четвертый');
function in($x) {return is_array($x) ? array_map('in', $x): intval($x);}
echo '<form action=? method =post>';
$stop = 1;
foreach($qtnb as $qn => $qtn)
{
if(isset($_POST['ans'][$qn]))
foreach(in($_POST['ans'][$qn]) as $k => $v)
{
echo "<input type=hidden name=ans[$qn][$k] value=$v />\r\n";
$sum[$k] = @$sum[$k] + $v;
}
else
{
echo "Вопрос $qn. {$qtn['q']}<hr>";
foreach($qtn['a'] as $k => $v)
echo "<br/><input type=checkbox name=ans[$qn][$k] value=1 /> "
.htmlspecialchars($v)."\r\n";
echo "<br/><input type=submit value=answer! />\r\n";
$stop = 0;
break;
}
}
echo '</form>';
if($stop)
{
arsort($sum); reset($sum); $k = key($sum);
echo "результат ".$answ[$k];
}
?>
|
| |
|
|
|