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

Форум MySQL

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

 

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

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

тема: Скрипт анкетирования/теста - нужна помощь
 
 автор: steiger   (24.02.2007 в 13:25)   письмо автору
 
 

Здравствуйте.
Недавно встал вопрос по поводу создания скрипта для анкетирования пользователей. Самому написать весь не получается (знаний пока маловато), а программа очень нужна. Переделываю под свои нужды один скрипт с GNU/GPL лицензией. Скрипт - психологический тест. Необходимо, чтобы он записывал результаты анкетирования в mysql-таблицу results. Сейчас у меня записывается только номер текущего вопроса. Нужен также номер текущего ответа и расширенный ответ (для текстовых полей) - пример ниже.
Пожалуйста, помогите разобраться, как записать ответы в таблицу. Второй день бьюсь.
Извините за огромные листинги, но, думаю, так разобраться будет проще.

Структура таблиц

<?php

include ("inc/application.php");
        
mysql_connect("host""mysqlname""mysqlpass")
  or die(
"Невозможно подключиться: ".mysql_error());
    
mysql_select_db("base")
  or die(
"Невозможно выбрать базу: ".mysql_error());

    
// Таблица с самой анкетой

mysql_query("CREATE TABLE tests (
   id int(11)   NOT NULL auto_increment,
   name text NOT NULL,
   description text NOT NULL,
   date datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
   count int(11)   NOT NULL,
   view int(11)   NOT NULL,
   PRIMARY KEY (id)
); " 
)or die(mysql_error());

mysql_query("INSERT INTO tests (id, name, description, date, count, view) VALUES 
( '1', 'Анкета', 'описание анкеты', '2006-02-21 06:06:48', '0', '1'); " 
)or die(mysql_error());

     
// Таблица с вопросами

mysql_query("CREATE TABLE questions (
   id int(11)   NOT NULL auto_increment,
   parent_test int(11)   NOT NULL,
   question text NOT NULL,
   view int(11) DEFAULT '1' NOT NULL,
   PRIMARY KEY (id)
); " 
)or die(mysql_error());

mysql_query("INSERT INTO questions (id, parent_test, question, view) VALUES 
( '1', '1', 'Как часто Вы бываете в Интернете? ', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO questions (id, parent_test, question, view) VALUES 
( '2', '1', 'Откуда Вы обычно выходите во Всемирную Паутину? ', '0');" 
)or die(mysql_error());

  
// Таблица с ответами на вопросы

mysql_query("CREATE TABLE answers (
   id int(11)   NOT NULL auto_increment,
   parent_question int(11)   NOT NULL,
   answer text NOT NULL,
   width int(11)   NOT NULL,
   scale_id int(11)   NOT NULL,
   view int(11) DEFAULT '1' NOT NULL,
   PRIMARY KEY (id)
); " 
)or die(mysql_error());

mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '1', '1', 'Я пользуюсь Интернетом очень редко (несколько раз в месяц)', '1', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '2', '1', 'Около 1-2 часов в неделю провожу в Сети', '2', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '3', '1', 'Больше 3х часов в неделю провожу в Сети', '3', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '4', '1', 'Ежедневно - провожу в Сети не более 1-2 часов', '4', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '5', '1', 'Ежедневно - провожу в Сети больше 2х часов', '5', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '6', '1', 'Нахожусь в Интернете «24 часа в сутки»', '6', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '7', '2', 'из дома', '1', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '8', '2', 'с работы', '2', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '9', '2', 'из Интернет-кафе (Интернет-библиотек, центров доступа к Интернет и т.п.)', '3', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '10', '2', 'от друзей', '4', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '11', '2', 'с места учебы', '5', '7', '0');" 
)or die(mysql_error());
mysql_query("INSERT INTO answers (id, parent_question, answer, width, scale_id, view) VALUES 
( '12', '2', 'другое: ', '6', '7', '0');" 
)or die(mysql_error());

  
// Таблица с результатами
mysql_query("CREATE TABLE results (
   id int(11)   NOT NULL auto_increment,
   respondent  int(11)   NOT NULL,
   question int(11)  NOT NULL,
   answer  text   NOT NULL,
   answerwide  text   NOT NULL,
   PRIMARY KEY (id)
); " 
)or die(mysql_error());

  
// Есть еще таблица с интерпретациями - в моем случае не нужна,
  // я вписал в нее просто благодарность за заполненную анкету

?>


Сам файл test.php

        <?
        
include("inc/application.php");
        include(
"inc/header.php");
        
?>

<!-- Если количество вопросов меньше передаваемого номера -->
<? if ($ans $question) { ?>

<!-- Запускаем интерпретацию -->

        <?         $res db_query("UPDATE tests
        SET count=count+1 WHERE id='
$test_id' "); ?>

 <center><b>Интерпретация теста</b></center><br><br>
Вы набрали  <?=$total?> баллов.
<br>
        <?
        $qid 
db_query("SELECT interpretation FROM interpretations WHERE test_id=$test_id AND
        min_width<=
$total AND max_width>=$total");
        
?>
        <? $int db_fetch_object($qid?>
        <?=$int->interpretation?>
        <br><center><a href="index.php">На главную</a></center><p>

<!-- Иначе -->
<? } else { ?>

<!-- Выводим очередной вопрос -->
<? $start $question-1?>
        <?
        $qid 
db_query("SELECT id, question FROM questions WHERE parent_test=$test_id
        ORDER BY id LIMIT 
$start,1 ");
        
?>
        <? $questions db_fetch_object($qid?>
<P>Вопрос #<?=$question?>, осталось <?=$ans-$question?><br><br>
 <center><b><?=$questions->question?></b></center>

<!-- Формируем ответы -->
        <?
        $qit 
db_query("SELECT id, answer, width FROM answers
        WHERE parent_question=
$questions->id
        ORDER BY id"
);
        
?>
<ol type="1">
        <? while ($answers db_fetch_object($qit)) { ?>
<li>

<?=$answers->answer?> &nbsp;&nbsp;&nbsp;
<a href="test.php?test_id=<?=$test_id?>&question=<?=$start+2?>&total=<?=$answers->width+$total?>&ans=<?=$ans?>">[Выбрать]</a>
</li>

        <? ?>
</ol>

<? $takenum db_query("SELECT count
        FROM tests WHERE id='
$test_id' ");
// здесь пытаюсь получить номер респондента, отвечающего на вопросы,
// но в таблицу results записывается почему-то всегда '8'
// это не так важно, просто странно
        
$resp $takenum+1;

// получаем номер текущего вопроса
         
$questioncur=$start+1;

// основной вопрос - как получить ответ на текущий вопрос (у меня это переменная $otvet)
// все, что пытался делать сам, стер - чтобы не путаться лишний раз.

 
$qwrite db_query("INSERT INTO results (id, respondent, question, answer, answerwide) VALUES 
('', '
$resp', '$questioncur', '$otvet', '$str')");

        } 
?>

        <?
        
include("inc/footer.php");
        
?>


У меня width в таблице answers - это как раз номер текущего ответа. Вопрос в том, как этот width получить и записать его в базу.
Помогите... пожалуйста...

   
 
 автор: cheops   (25.02.2007 в 00:51)   письмо автору
 
   для: steiger   (24.02.2007 в 13:25)
 

Что за функция db_query()?

PS Объёмные листинги лучше прикреплять в виде архива к сообщению.

   
 
 автор: steiger   (25.02.2007 в 13:56)   письмо автору
 
   для: cheops   (25.02.2007 в 00:51)
 

Спасибо большое за помощь!
Я разобрался... Чудом)
Извините за беспокойство.

   
Rambler's Top100
вверх

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