| Здравствуйте.
Недавно встал вопрос по поводу создания скрипта для анкетирования пользователей. Самому написать весь не получается (знаний пока маловато), а программа очень нужна. Переделываю под свои нужды один скрипт с 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?>
<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 получить и записать его в базу.
Помогите... пожалуйста... | |