[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Простой тест на PHP
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
Valick
Цитата (maruo @ 14.12.2015 - 21:39)
как ему понимать из какой таблицы вытаскивать

из таблицы которая существует только в оперативной памяти и которая создана в результате подзапроса и которая называется q

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Однако сколько ночей бьюсь с этим запросом, не далеко продвинулся.
Не понимаю к чему выбираем максимальное значение q_id? у меня в таблице максимальное значение в q_id (5) но как оно поможет сделать проверку
Valick
максимальный id для того чтобы сделать проверку на окончание теста

$submit = '<input type="submit" value="Перейти к следующему вопросу">';
if($q_id >= $row['m_id']){
$q_id = '0';
$submit = '<input type="submit" value="Пройти тест ещё раз">';
}


_____________
Стимулятор ~yoomoney - 41001303250491
maruo
а не могли бы скрин запроса показать, какая таблица сформировалась в результате запроса.

Ибо я с командной еще не знаком. или какими еще способами можно в phpmyadmin посмотреть результат запроса.
Valick
maruo, выполни отдельно поздапрос, а потом запрос целиком

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
давайте я попробую описать в словах что я понял и как работает ваш код.
А вы уже поправите где неверно.


$q_id = isset($_POST['quest'])?(int)$_POST['quest']:0;//3
$a_id = isset($_POST['answer'])?(int)$_POST['answer']:false;//14

$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";


И так у нас вопрос под идентификатором #3
На данный момент у нас выводит только 1 вариант ответа.

Мы отвечает на вопрос, и постом у нас передается два значения:
  • $q_id - это идентификатор вопроса.
  • $a_id - это идентификатор ответа который мы дали.
В 2х переменных у нас хранятся две цифры это 3 и 14.

Делаем запрос (с ним у меня проблема я его так и не могу толком понять, но на интелектуальном уровне попробую объяснить):
WHERE q_id=$q_id and a_id=$a_id - основываясь на данных которые пришли постом : где q_id равен 3 и a_id равен 14 .
Получается этим мы выбираем поле a_correct напротив ответа под 14 идентификатором.А у нас там 0

В массив $row['a_correct'] у нас попало 0.
И когда мы сравниваем a_correct ==1 у нас выдается сообщение....

и еще LEFT JOIN question USING(q_id) это будет выглядеть как:
для соединения используем поля q_id присутствующие в обеих таблицах. Без USING просто таблицы не объединяться? и выдаст ошибку или как?

К чему в SELECT q_quest?

user posted image
Valick
Цитата (maruo @ 16.12.2015 - 02:08)
Без USING просто таблицы не объединяться?

конечно выдаст ошибку условие объединения (USING или ON) это неотъемлимая часть конструкции JOIN
На самом деле что бы проверить правильность ответа достаточно всего лишь идентификатора(ов) ответа(ов) от пользователя.
SELECT a_correct FROM answer WHERE a_id=$a_id

SELECT a_id, a_correct FROM answer WHERE a_id IN(идентификаторы)

Можно оставить только правильные ответы.
SELECT a_id FROM answer WHERE a_id IN(идентификаторы) AND a_correct = 1

И в конце концов можно получить только количество правильных ответов
SELECT COUNT(a_id) FROM answer WHERE a_id IN(идентификаторы) AND a_correct = 1

Все зависит от логики подсчёта ответов.
Цитата (maruo @ 16.12.2015 - 02:08)
К чему в SELECT q_quest?

На этот вопрос вы и сами можете найти ответ. А из выше описанного намекну что и LEFT JOIN question USING(q_id) в запросе только лишь из за того что мы выбираем q_quest.

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
SELECT a_correct FROM answer WHERE a_id=$a_id - об этом я думал, и догадывался что можно и так.
Ну хоть прояснилась ситуация, теперь можно пробовать выводить несколько вариантов ответов

Не мне несколько правильных не пригодится .
У меня будет строго 4 варианта ответа и 1 верный.
вопросы будут делиться на несколько категорий сложности.
И нужно будет выводить рандомные ответы из таблиц и 1 верный(вот думаю с этим я воевать буду)
Valick
Цитата (maruo @ 16.12.2015 - 08:13)
У меня будет строго 4 варианта ответа и 1 верный.

это не существенно
И кстати речь не о нескольких правильных вариантах (об этом потом), а о правильных вариантах для неограниченного количества ответов
т.е корректоность ответа проверять не каждый раз, а сразу оптом.

_____________
Стимулятор ~yoomoney - 41001303250491
maruo
Цитата
т.е корректоность ответа проверять не каждый раз, а сразу оптом.



Сразу оптом не катит, мне нужен будет вывод по 1му вопросу.
Как только человек ответил не правильно, нужно будет проходить по новой. Но вопросы будут постоянно разные, редко повторяться,и варианты ответов всегда разные были на один и тот же вопрос. Только 1 верный
maruo
Объясните Мне как так получается все из одной "точки".
$input .=
user posted image
$input 	= ' <p><input type="radio" name="answer" value ="'.$row['a_id'].'"> '.$row['a_answer'].'</p>'.$end_line;



user posted image

$input 	.= ' <p><input type="radio" name="answer" value ="'.$row['a_id'].'"> '.$row['a_answer'].'</p>'.$end_line;





И кто кодер этого форума, почему спойлеры не работают , и узображения вставляются так что появляется полоса прокрутки? Это можно как то исправить?
inpost
maruo
Свернутый текст
Наклоненная буква s - спойлер.



_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
maruo
Свернутый текст
Понял,спасибо, а как быть с изображениями?
Kusss
$a = 1;
$b = 2;
echo $a.$b; // 12

$c = $a;
$c .= $b;
echo $c; // 12

точка в данном случае это присоединение.
maruo
Цитата (Kusss @ 19.12.2015 - 16:00)
$a = 1;
$b = 2;
echo $a.$b; // 12

$c = $a;
$c .= $b;
echo $c; // 12

точка в данном случае это присоединение.

А вы наверно не поняли что чем вопрос.
Повторю, я знаю что делает этот оператор.
Но в коде выше, valik его знает он его писал я из за нотиса решил что эта точка просто опечатка.
$input 	.= ' <p><input type="radio" name="answer" value ="'.$row['a_id'].'"> '.$row['a_answer'].'</p>'.$end_line;

в итоге с точкой перед $input .=
Выводятся все варианты ответов.
$input 	.= ' <p><input type="radio" name="answer" value ="'.$row['a_id'].'"> '.$row['a_answer'].'</p>'.$end_line;

а без точки
$input =
выводится только последний из вариант ответа из массива.

Поэтому и вопрос а как это так получается?
Я думал я все знаю про этот оператор, но получается что нет. Или дело не в операторе?
Быстрый ответ:

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