Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: несколько форм в одном скрипте...
 
 автор: interest_quastion   (30.07.2007 в 18:44)   письмо автору
 
 

Как собственно можно реализовать : )

У меня есть, к примеру, 10 вопросов, после ответа на 1-ый вопрос юзер должен переходить ко 2-ому, от 2-го к 3-ему и.т.д... Но у меня получается, что либо все формы отображаются сразу (все 10), либо скрипт проверки на правильность введенных данных выполняется еще до заполнения формы % ) Как с этим можно бороться? )

   
 
 автор: Trianon   (30.07.2007 в 18:46)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 18:44)
 

>Как собственно можно реализовать : )
>
>У меня есть, к примеру, 10 вопросов, после ответа на 1-ый вопрос юзер должен переходить ко 2-ому, от 2-го к 3-ему и.т.д...

чем это плохо?

   
 
 автор: interest_quastion   (30.07.2007 в 19:05)   письмо автору
 
   для: Trianon   (30.07.2007 в 18:46)
 

Мне нужно, чтобы после ответа на 1-ый вопрос появлялся 2-й вопрос, а 1-ый исчезал ;)

   
 
 автор: Trianon   (30.07.2007 в 19:46)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 19:05)
 

и что мешает выводить скриптом форму для очередного вопроса?

   
 
 автор: interest_quastion   (30.07.2007 в 19:54)   письмо автору
 
   для: 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;
}

?>

   
 
 автор: Trianon   (30.07.2007 в 20:02)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 19:54)
 

В этом коде неправильно то, что переменная $proverka в скрипте не определена.

Остальное не особо оптимально, но в принципе правильно.

   
 
 автор: interest_quastion   (30.07.2007 в 20:22)   письмо автору
 
   для: Trianon   (30.07.2007 в 20:02)
 

эм.. как не определена?

Всмысле вы имеете ввиду, что вместо $proverka следует писать $_POST['proverka'] ?

   
 
 автор: Trianon   (30.07.2007 в 20:44)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 20:22)
 

>Всмысле вы имеете ввиду, что вместо $proverka следует писать $_POST['proverka'] ?

Именно это. Именно следует.

   
 
 автор: testdriver   (30.07.2007 в 20:26)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 19:54)
 

<?php
$proverka = $_POST['proverka']; // попробуй в свой скрипт добавить вот это
...
if($proverka != "da")
{
print $form1;
}
else
{
print $form2;
}
?>

   
 
 автор: interest_quastion   (30.07.2007 в 20:44)   письмо автору
 
   для: 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 форм выводящихся одна за другой этот скрипт верен?

   
 
 автор: testdriver   (30.07.2007 в 20:50)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 20:44)
 

Да не рационально это все как то ...

   
 
 автор: Trianon   (30.07.2007 в 20:51)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 20:44)
 

>Для 4 форм выводящихся одна за другой этот скрипт верен?

Ничего не изменилось. Как не было переменной, так и не стало.

   
 
 автор: interest_quastion   (30.07.2007 в 20:56)   письмо автору
 
   для: Trianon   (30.07.2007 в 20:51)
 

2testdriver,

А как можете предложить реализовать это вы? ;)

Ничего не изменилось. Как не было переменной, так и не стало.



$proverka=$_POST['proverka'];
$proverka2=$_POST['proverka2'];
$proverka3=$_POST['proverka3'];
$proverka4=$_POST['proverka4'];



Это я уже понял, мне нужен только алгоритм, который позволял бы показывать одну форму за другой..

   
 
 автор: Valick   (30.07.2007 в 21:02)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 20:56)
 

Я бы с базой данных это сделал.
И тестдрайвер прав рациональности маловато.
Я бы сделал форму одну выводящую вопрос по ID, и с каждой формой скрытым полем передавал ID следующего вопроса. На мой взгляд это более универсально.

   
 
 автор: testdriver   (30.07.2007 в 21:08)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 20:56)
 

Valick предложил не плохой вариант, на мой взгляд более предпочтительный чем ваш. Хотя если у вас вопросов не много предполагается использовать то можно и на файлах сделать, и обойтись без базы данных, тут как вам собственно удобнее.

   
 
 автор: interest_quastion   (30.07.2007 в 21:17)   письмо автору
 
   для: testdriver   (30.07.2007 в 21:08)
 

Спасибо за алгоритм Valick и совет testdriver'а, но у меня действительно не так много вопросов (~10). Вот я и хочу узнать, как нужно построить конструкцию if..elseif, чтобы все формы показывались поочередно..
Можете написать как так сделать ? Заранее благодарен )

   
 
 автор: Trianon   (30.07.2007 в 21:24)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 21:17)
 

Вы можете нарисовать массив, который бы хранил описание всей базы теста. Если вопросов там и вправду около деcятка, это труда не составит.

   
 
 автор: Trianon   (30.07.2007 в 21:15)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 20:56)
 

>Это я уже понял, мне нужен только алгоритм, который позволял бы показывать одну форму за другой..

для ответа на этот вопрос Вы привели слишком мало данных.
Нужно знать, как зависят от номера вопроса тексты вопросов, а также поясняющие тексты и количество самих ответов.

Тогда можно было бы говорить об алгоритме, реализовывать который (тут Valick прав) куда проще на БД, чем как-то еще.

   
 
 автор: interest_quastion   (30.07.2007 в 21:24)   письмо автору
 
   для: 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 - четвертый.

   
 
 автор: testdriver   (30.07.2007 в 21:28)   письмо автору
 
   для: interest_quastion   (30.07.2007 в 21:24)
 

Вполне можно без базы данных обойтись.

   
 
 автор: Trianon   (30.07.2007 в 22:16)   письмо автору
 
   для: testdriver   (30.07.2007 в 21:28)
 

Я Вам больше скажу - можно обойтись вообще без скриптов серверной стороны.

   
 
 автор: testdriver   (30.07.2007 в 22:30)   письмо автору
 
   для: Trianon   (30.07.2007 в 22:16)
 

тоже выход, чего сервер то зря загружать?! пусть вся нагрузка будет на клиенте :)))

   
 
 автор: Trianon   (30.07.2007 в 22:13)   письмо автору
 
   для: 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];
}

?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования