[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Простой тест на PHP
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Миша
Цитата (Loki @ 25.12.2015 - 09:22)
Цитата (Valick @ 25.12.2015 - 00:37)
Кстати любой желающий утереть мне мой сопливый нос может выложить сюда решение.

Не обольщайтесь, ваш сопливый нос не интересен настолько, чтоб его утирать.

О как новички дерзко себя ведут, щас нос откушу biggrin.gif

_____________
Принимаю заказы, писать в ЛС
maruo
Тему возможно закрыть?
Если есть возможность Администраторы закройте тему, я больше не нуждаюсь в помощи этого вопроса, он решен.
А продолжать срачь и разборки у кого нос больше не лучшая идея!
/close
maruo
Вопрос образовался, усложняю потихоньку все дело, добавил в таблицу вопросов поле difficulty(сложность)

Как только набивается определенное число очков правильных ответов, повышается уровень сложности. И вопросы выводятся более сложнее. В поле сложности просто цифры 1,2,3

Как собственно ПРАВИЛЬНО сделать. Для каждой сложности делать свою таблицу с вопросами?

Или все делать все в одной?

Дело в том когда все в одной таблице , то когда переходит на след уровень сложности то перестает работать запрос. Т.к
$difficulty = 1;
$rand = rand(1,5);
случайный вопрос я выбираю при помощи rand.
И вы догадываетесь что у меня за ошибка получается.
Выбираю то я вопросы со сложностью 2. а id генерируются с 1м уровнем сложности.
$query = "(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id) WHERE a.a_correct=1 AND q_id=$rand AND difficulty=$difficulty LIMIT 1)
UNION
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id) WHERE a.a_correct=0 AND q_id=$rand AND difficulty=$difficulty ORDER BY RAND() LIMIT 3)
ORDER BY RAND()
"
;


Вот как правильно сделать? с новой таблицей? для каждой сложности, или же запрос менять?
Valick
нет смысла вам давать советы, вы их игнорируете

Цитата (Valick @ 11.11.2015 - 00:12)
Цитата (maruo @ 11.11.2015 - 00:07)
$load_test =++ $_SESSION['count'];

писать так это тяжкий грех для программиста
возьмите за правило, что id можно только получить из БД его нельзя сформировать на уровне РНР, а потом сделать выборку из БД основанную на умозаключениях.


$rand = rand(1,5);
это из той же оперы

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Цитата
$rand = rand(1,5);
это из той же оперы


Ну уж извините но, ORDER BY RAND я не могу испльзовать перед UNION , и кстати никто не ответил почему
Поэтому я генерирую id на уровне php, а убрать его у меня не получится. Вы же отказались подкинуть запрос с RIGHT JOIN
maruo
в чем ошибка или так нельзя делать?
$query2 = "(SELECT q_id FROM question ORDER BY RAND() LIMIT 1)";
$qrand = mysql_query($query2) or die(mysql_error());


$query = "(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id) WHERE a.a_correct=1 AND q_id=$qrand LIMIT 1)
UNION
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id) WHERE a.a_correct=0 AND q_id=$qrand ORDER BY RAND() LIMIT 3)
ORDER BY RAND()
"
;
Valick
Цитата (maruo @ 31.12.2015 - 14:08)
в чем ошибка

а что говорит echo $qrand; ?

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #5 LIMIT 1) UNION (SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, ' at line 3

Вообще такая ошибка, я думал вытащить id и использовать вместо rand
maruo

$query = mysql_query("SELECT q_id FROM question ORDER BY RAND() LIMIT 1",$db);
$qrand = mysql_fetch_row($query);
$qrand = int($qrand[q_id]);

Но с нотисом
Игорь_Vasinsky
Цитата
$qrand = int($qrand[q_id]);

за ногу и в овраг.

есть (int) есть intval()

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
maruo
foreach ($qrand1 as $qrand) {
$qrand = (int)$qrand;

Сделал так
maruo
Каким образом можно сделать так:
Если ответ не был дан а просто обновилась страница, то сессию прикрыли или редирект на стартовую, что угодно но что бы не делал заново запрос на вопрос.

Пробовал делать проверку существует ли POST , не сработало

А так же у меня $difficulty = 1 отвечает за сложность вопроса .

У меня сейчас что получается как я набираю 5 верных ответов подряд, $difficulty++
Но нигде не сохраняется то что он увеличился. Выведится 1 раз вопрос где $difficulty = 2, а потом снова сброситься на 1.
Как мне правильно решить эту проблему, как реализовать правильно это.
То есть как набираем определенное число верных ответов то у нас будет выводится более сложные?

И давайте без этого, что бесполезно вам советовать вы не слушаете что вам говорят, на тот момент я не мог реализовать как вы сказали, потом додумался

quest.php
Свернутый текст

<?
error_reporting(E_ALL);
header('content-type: text/html; charset=utf-8');
include_once("bd.php");
include("answer.php");


$end_line = "\n";
$difficulty = 1;

if($_SESSION['count'] == 5){
$_SESSION['count'] = 0;
$difficulty++ and $_SESSION['count'] = 0;
}

$query = mysql_query("SELECT q_id FROM question WHERE difficulty=$difficulty ORDER BY RAND() LIMIT 1",$db);

$qrand1 = mysql_fetch_assoc($query);
foreach ($qrand1 as $qrand) {
$qrand = (int)$qrand;
}


$query = "(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id) WHERE a.a_correct=1 AND q_id=
$qrand LIMIT 1)
UNION
(SELECT q.q_id, q.q_quest, a.a_id, a.a_answer, a.a_correct
FROM answer a
INNER JOIN question q USING(q_id) WHERE a.a_correct=0 AND q_id=
$qrand ORDER BY RAND() LIMIT 3)
ORDER BY RAND()
"
;

$input = null;
$res = mysql_query($query) or die(mysql_error());
if($res){
if(mysql_num_rows($res) > 0){
while($row=mysql_fetch_assoc($res)){

$quest = $row['q_quest'];
$hidden = ' <input type="hidden" name="quest" value="'.$row['q_id'].'">'.$end_line;
$input .= '<button name="answer" value ="'.$row['a_id'].'"> '.$row['a_answer'].' </button>'.$end_line;

}

}
}



?>
<!DOCTYPE html>
<
html>
<
head>
<
meta charset="utf-8" />
</
head>
<
body>
<
h4><?php echo 'score'.$end_line.$_SESSION['count'];?></h4>
<
h2><?php echo $quest;?></h2>
<
form action = "answer.php" method = "POST">
<?php echo $hidden.$input;?>
</form>
</
body>
</
html>


answer.php
Свернутый текст

<?
include_once('bd.php');
error_reporting(E_ALL);
session_start();

$q_id = isset($_POST['quest'])?(int)$_POST['quest']:0;
$a_id = isset($_POST['answer'])?(int)$_POST['answer']:false;
if($q_id && $a_id){
$query = "SELECT a_correct, q_quest, (SELECT MAX(q_id) FROM question) m_id
FROM answer
LEFT JOIN question USING(q_id)
WHERE q_id=
$q_id
AND a_id=$a_id";

$res = mysql_query($query) or die(mysql_error());
if($res){
$row = mysql_fetch_assoc($res);

if($row['a_correct']==1 and isset($_POST['answer'])){
$_SESSION['count'] ++;
header("Location: quest.php");
}else{
$_SESSION['count'] = 0;
$difficulty = 1;
header("Location: index.php");
}


$submit = '<input type="submit" value="Еще раз">';
if($q_id >= $row['m_id']){
$q_id = '0';
$submit = '<input type="submit" value="Пройти тест ещё раз">';
}
?>
<!DOCTYPE html>
<
html>
<
head>
<
meta charset="utf-8" />

</
head>
<
body>

<
h2><?php echo $message;?></h2>
<
form action="quest.php" method="POST">
<
input type="hidden" name="quest" value="<?php echo $q_id;?>">
<
p><?php echo $submit;?></p>
</
form>
</
body>
</
html>
<?php
}
}

?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.