Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вывести один вопрос и варианты ответа, а не всё сразу

49K
02 декабря 2009 года
NMaks
23 / / 23.11.2009
Здраствуйте. Опять я торможу со своим опросником. У меня такая проблема, как сделать вот так:

Вопрос: Что такое Гидрид окиси водорода?
1. Вода наверно.
2. Такого элемента в природе нет.
3. вещество выделяющееся при катализе соединений водорода
4. Правильного ответа нет.
[следующий вопрос]


У меня все вопросы-ответы получаются в одной странице, а я хочу по одному вопросу поочерёдно (нажимаете на кнопку "следующий вопрос" и переходите к следующему).

Не подскажите куда мне с лопатой идти???
13
02 декабря 2009 года
RussianSpy
3.0K / / 04.07.2006
Ну так выводите по одному... Вообще не понимаю в чем проблема
49K
02 декабря 2009 года
NMaks
23 / / 23.11.2009
У меня получается вот так:

Вопрос: Что такое Гидрид окиси водорода?
1. Вода наверно.
2. Такого элемента в природе нет.
3. вещество выделяющееся при катализе соединений водорода
4. Правильного ответа нет.
[следующий вопрос]

Вопрос: Что такое двуокись водорода?
1. девушки вроде волосы обесцвечивают этим.
2. Такого элемента в природе нет.
3. Это лучше не смешивать с кислотной средой.
4. Правильный ответ не здесь.
[следующий вопрос]

Вопрос: Что вообще такое химия?
1. предмет такой есть.
2. учи науку химию она тебе нужна.
3. когда целуешь девушку реакция сильна.
4. Истина где-то там.
[следующий вопрос]


А я хочу по одному вопросу.:(
92
02 декабря 2009 года
Тень Пса
2.2K / / 19.10.2006
ну все конечно телепаты... и сразу догадались как у вас происходит выборка из БД и вывод на страницу, и конечно же смогли сразу Вам подсказать. Намек ясен? )
49K
02 декабря 2009 года
NMaks
23 / / 23.11.2009
Содержание hello.php:
<html>
<?php
//print_r("Hello");
$conn=mysql_connect("localhost", "root", "");
mysql_select_db("faq",$conn);
mysql_query("SET NAMES cp1251");
$voprosi = mysql_query("select * from Quests where anketaID=1",$conn);
if(! $voprosi )
{
die('Что то не то:' . mysql_error());
}
echo "Можно начинать<br>\n";


while($voprosi_column = mysql_fetch_array($voprosi, MYSQL_ASSOC))
{
echo "<fieldset>";
echo "<FORM method=\"post\">";
echo "<P>";
echo "Вопрос: {$voprosi_column["question"]} <br> ";

$otveti=mysql_query("select * from answs where questID={$voprosi_column["id"]}");
while($otveti_column = mysql_fetch_array($otveti, MYSQL_ASSOC))
{
echo "<input type=\"radio\" name=\"otvet\" value=\"{$otveti_column["id"]}\">{$otveti_column["answer"]}<br>";
// echo "&nbsp&nbsp&nbsp&nbsp {$otveti_column["answer"]}<br>";
}

echo "<INPUT type=\"submit\" value=\"Следующий вопрос\">";
echo "</P>";
echo "</FORM>";
echo "</fieldset>";

mysql_close($conn);
?>

</html>
244
02 декабря 2009 года
UAS
2.0K / / 19.07.2006
Теги оформления кода, например [ php ] [/ php ], никто не учил использовать?

Я полагаю, что при выборке тестов надо использовать в качестве фильтра - id. Что давно применяется всеми нормальными людьми. Т.е. если question_id не установлен, то вытаскиваете самый первый. Иначе вытаскиваете тот, который указан в question_id. Потому что здесь, судя по данному "коду" у вас нет привязки к id вопроса (если такой id вообще существует).
Ну или можно извратиться то же самое с помощью LIMIT прикрутить.
49K
02 декабря 2009 года
NMaks
23 / / 23.11.2009
Цитата: UAS
Теги оформления кода, например [ php ] [/ php ], никто не учил использовать?


Нет. а что это такое?

Цитата: UAS
Я полагаю, что при выборке тестов надо использовать в качестве фильтра - id. Что давно применяется всеми нормальными людьми. Т.е. если question_id не установлен, то вытаскиваете самый первый. Иначе вытаскиваете тот, который указан в question_id. Потому что здесь, судя по данному "коду" у вас нет привязки к id вопроса (если такой id вообще существует).
Ну или можно извратиться то же самое с помощью LIMIT прикрутить.



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

drop table if exists Quests;
create table Quests(
id bigint(20) auto_increment,
anketaID bigint(20),
question varchar(250),
constraint pk_QestID primary key(id),
constraint fk_AnketaID foreign key(anketaID) references Anketas(id) on update cascade
)engine=InnoDB;

drop table if exists Answs;
create table Answs(
id bigint(20) auto_increment,
questID bigint(20),
answer varchar(250),
is_right bool,
constraint pk_AnswID primary key(id),
constraint fk_QuestID foreign key(questID) references Quests(id) on update cascade on delete cascade
)engine=InnoDB;

244
02 декабря 2009 года
UAS
2.0K / / 19.07.2006
А вот стоило бы узнать. Чтобы код был понятные, то заключаете его вот в такие "теги" (только пробелы внутри [] уберите).

Посчет темы. Ну так и используйте
"select * from Quests where anketaID=1 and id=%d", где %d - меняете в зависимости от того вопроса, который надо показать.
49K
03 декабря 2009 года
NMaks
23 / / 23.11.2009
Неужели чтобы пройтись по 20 вопросам анкеты, я должен 20 раз открывать соединение с БД. Нету способа при котором 1 раз открываешь проходишся по всем 20-ти вопросам и закрываешь опрос выставив отметку?
244
03 декабря 2009 года
UAS
2.0K / / 19.07.2006
Боооже %) Ну тогда считайте все 20 вопросов в массив (на начально стадии, например на 1 вопросе) и выводите по одному вопросу на страницу. Вот вам и будет 1 соединение с БД, постраничное.
49K
03 декабря 2009 года
NMaks
23 / / 23.11.2009
Цитата: UAS
Ну тогда считайте все 20 вопросов в массив (на начально стадии, например на 1 вопросе) и выводите по одному вопросу на страницу. Вот вам и будет 1 соединение с БД, постраничное.



А как? ведь со всеми переменными происходит что-то вроде free(somevar) то есть они умирают, как сохранить их живыми?;

49K
03 декабря 2009 года
NMaks
23 / / 23.11.2009
Ну, впрочем пришлось смириться со множественными обращениями к БД и к использованию LIMIT.
244
03 декабря 2009 года
UAS
2.0K / / 19.07.2006
Ну например сериализовывать массив во временный или хранить его в сессии.
Уж такова структура скриптов таких, что приходится много раз к БД обращаться.
49K
04 декабря 2009 года
NMaks
23 / / 23.11.2009
Цитата: UAS
Ну например сериализовывать массив во временный или хранить его в сессии.
Уж такова структура скриптов таких, что приходится много раз к БД обращаться.



Спасибо брат, сессий то что надо. чтож вы раньше про сессий молчали.

25K
04 декабря 2009 года
mdrm
37 / / 26.05.2008
Пример, на javascript. Может пригодиться.
Код:
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
    <title>Опрос</title>
</head>
<script type="text/javascript">
    function next_question(current_id, next_id) {
        if (next_id.length > 0) {
            document.getElementById(next_id).style.display = 'block';
            document.getElementById(current_id).style.display = 'none';
        }
    }
</script>
<body>
<?php
// создаем массив с вопросами и ответами
$question = array (
"Что такое Гидрид окиси водорода?" =>
                array("Вода наверно.",
                "Такого элемента в природе нет.",
                "вещество выделяющееся при катализе соединений водорода",
                "Правильного ответа нет.",
                ),
"Что такое двуокись водорода?" =>
                array("девушки вроде волосы обесцвечивают этим",
                "Такого элемента в природе нет.",
                "Это лучше не смешивать с кислотной средой.",
                "Правильный ответ не здесь.",
                ),
"Что вообще такое химия?" =>
                array("предмет такой есть.",
                "учи науку химию она тебе нужна.",
                "когда целуешь девушку реакция сильна.",
                "Истина где-то там.",
                ),
);

// ВЫВОД РЕЗУЛЬТАТОВ
if (isset($_POST['count'])) {
    echo "Результаты: <br />";
   
    for ($i = 0; $i < (int)($_POST['count']); $i++) {
        echo "№".$i." = ".$_POST['q'.$i]."<br />";   
    }
   
}

echo "<form action='?' method='post'>";
$i = 0;
foreach ($question as $k => $v) {
    $i++;
    echo "\n<div id='qd".($i-1)."' style='";
    if ($i>1) echo "display: none;";
    else echo "display: block;";
    echo "'>";
   
    // вывод вопроса
    echo "<b>".$i.". ".$k."</b><br />";
   
    // начинаем выводить варианты ответов
    echo "<ul>";
    for ($ii = 0; $ii < count($v); $ii++) {
        echo "<li><input type='radio' name='q".($i-1)."' value='".$ii."' />".$v[$ii]."</li>";
    }
    echo "</ul>";
   
    if (($i+1) <= count($question))  {
    // вывод ссылки след. вопрос  
        echo "<a href='java script: next_question(";
        if ($i!=count($question)) echo "\"qd".($i-1)."\", \"qd".($i)."\"";
        else echo "\"q".($i-1)."\", \"\"";
        echo ");'>След. вопрос</a>";
    } else {
    // вывод кнопки Закончить
        echo "<input type='hidden' name='count' value='".count($question)."' />";
        echo "<input type='submit' value='Просмотреть результаты' />";
    }
   
    echo "</div>";
}
echo "</form>";

?>
</body>
</html>
2
04 декабря 2009 года
squirL
5.6K / / 13.08.2003
Цитата: UAS

Уж такова структура скриптов таких, что приходится много раз к БД обращаться.


вообще за это по рукам надо бить.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог