Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (20) [1] 2 3 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Простой тест на PHP
maruo  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Здравствуйте уважаемые, никак не могу решить созданную собою задачу.
Имеются наброски будущего теста.
В данный момент выводятся вопросы и варианты ответов из бд.
На правильность ответов проверка работает.
Проблема собственно вот в чем:

user posted image
user posted image
user posted image
user posted image

На рисунке 1 все выводится как положено.
Рисунок 2 я отвечаю на вопрос. Все работает как положено все подставляется куда надо.Нажимаю на следующий.
Рисунок 3 Вроде бы все нормально за исключением результат неверный (я еще ответа не давал)
Рисунок 4 Все сбрасывается при ответе . Ответил я верно. В текущий ответ даже видно что ответил.Но все сбросилось.
если я нажму на след. У меня выведется след вопрос.


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

/***************** Проверяем какая кнопка была нажата, и помещаем результат в $v_ans *******************/
if(isset($_POST['a1'])){
$v_ans = $_POST['a1'];}
elseif(isset($_POST['a2'])){
$v_ans = $_POST['a2'];}
elseif(isset($_POST['a3'])){
$v_ans = $_POST['a3'];}
elseif(isset($_POST['a4'])){
$v_ans = $_POST['a4'];}
/***************** То что ответит блок проверки вопроса *******************/
$var1 = "Ответ верный";
$var2 = "Ответ неверный";
/***************** Проверка на правильность ответа *******************/
if(isset($_POST['a1'])){
if($myrowl['valid_a'] == $v_ans) $_SESSION['result_test'] = $var1;
else $_SESSION['result_test'] = $var2;}
if(isset($_POST['a2'])){
if($myrowl['valid_a'] == $v_ans) $_SESSION['result_test'] = $var1;
else $_SESSION['result_test'] = $var2;}
if(isset($_POST['a3'])){
if($myrowl['valid_a'] == $v_ans) $_SESSION['result_test'] = $var1;
else $_SESSION['result_test'] = $var2;}
if(isset($_POST['a4'])){
if($myrowl['valid_a'] == $v_ans) $_SESSION['result_test'] = $var1;
else $_SESSION['result_test'] = $var2;} ;


if(isset($_POST['destroy']))
{
session_destroy();
echo 'Сессия уничтожена!';
};

$load_test = 1;
if(!isset($_SESSION['count'])) $_SESSION['count'] ++;
if(isset($_POST['plus'])){
$load_test =++ $_SESSION['count'];}
echo $load_test;//выводим текущий id что попал в $load_test

$result = mysql_query("SELECT * FROM game WHERE id='$load_test'",$db) or die(mysql_error());
$myrow = mysql_fetch_array($result);
$result_valid = mysql_query("SELECT * FROM valid_answer WHERE id='$load_test'",$db) or die(mysql_error());
$myrowl = mysql_fetch_array($result_valid);

$_SESSION['question_id'] = $myrow['id'];//текущий id вопроса
$_SESSION['valid_id'] = $myrowl['id'];//id правильного ответа
$_SESSION['valid_answer'] = $myrowl['valid_a'];//правильный ответ

/***************** Создано для отслежки работы *******************/
echo "<br>ID вопроса \n". ($_SESSION['question_id']);
echo "<br>Верный ответ: \n". ($_SESSION['valid_answer']);
echo "<br>Текущий ответ: \n". $v_ans;
echo "<br>Результат:\n". $_SESSION['result_test'];



/***************** Форма вывода вопросов/ответов *******************/
printf ('<p style="text-align:center">%s</p>
<form action="" style="text-align:center" method="post">
<input type="submit", name="a1", value="%s">
<input type="submit", name="a2", value="%s">
<input type="submit", name="a3", value="%s">
<input type="submit", name="a4", value="%s"><br><br>
<input type="submit" name="plus", value="Следующий"><br><br>
<input type="submit" name="destroy", value="Убить Сессию"></form>'
,
$myrow["question"],
$myrow["answer1"],
$myrow["answer2"],
$myrow["answer3"],
$myrow["answer4"]);
?>
<form action="index.php" style="text-align:center"><button><? echo "Назад" ?></button></form>


Это сообщение отредактировал maruo - 11.11.2015 - 00:39
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5662
Пользователь №: 35718
На форуме: 4 года, 8 месяцев, 4 дня
Карма: 176




ужасненько smile.gif

Первая и грубейшая ошибка это то что вы используете БД лишь в качестве ящика для хранения данных. Все проверки должны проходить на стороне БД, а у вас этим занимается РНР, даже отмаз, то что это в целях обучения тут не прокатит.
Второе. У вас как-то тест сильно заточен под "математику". Вопросы кроме 2+2 планируются?
Третье. Жёстко задано количество ответов на вопрос. Ну и сама форма прописана практически руками, а должна генерироваться.


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1





Цитата (Valick @ 11.11.2015 - 00:49)
ужасненько

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


То есть все проверки нужно перенести в bd.php?
Ну а если они мне тут на время?
Считаете если я все проверки перенесу в bd.php это решит вопрос?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Цитата (Valick @ 11.11.2015 - 00:49)
Второе. У вас как-то тест сильно заточен под "математику". Вопросы кроме 2+2 планируются?

Вопросы изменить не долго, это для теста. Подставить другие мне никто не помешает.
Цитата (Valick @ 11.11.2015 - 00:49)
Третье. Жёстко задано количество ответов на вопрос. Ну и сама форма прописана практически руками, а должна генерироваться.

Насчет 3го не совсем понял
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5662
Пользователь №: 35718
На форуме: 4 года, 8 месяцев, 4 дня
Карма: 176




Цитата (maruo @ 10.11.2015 - 23:53)
То есть все проверки нужно перенести в bd.php?

нет :)
имя файла не имеет значения, проверка должна проводиться в SQL запросе, и кстати сессия для этого абсолютно не нужна (вы её используете для хранения верного ответа, это вам не капча, где код генерируется на лету и его необходимо сохранить, и проще всего в сессиии). Сессия нужна только для идентификации пользователя.
Должно быть так.
Выбрали из БД вопрос и ответы (одним запросом)
Сформировали на основе этих данных HTML форму
Приняли в обработчик из формы id вопроса и id ответа и на основе этих данных сформировали запрос к бд. Из бд вы получаете результат, либо ответ верный либо неверный.
Т.е. никаких
if($myrowl['valid_a'] ==  $v_ans) $_SESSION['result_test'] = $var1;
else $_SESSION['result_test'] = $var2;}


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Понимаете в чем проблема, я начинал с простого вывода вопрос ответы.
И потихоньку усложняю его. все более менее работало исправно до того как я начал использовать это.
$load_test = 1;
if(!isset($_SESSION['count'])) $_SESSION['count'] ++;
if(isset($_POST['plus'])){
$load_test =++ $_SESSION['count'];}
echo $load_test;//выводим текущий id что попал в $load_test


Она мне позволяет с помощью кнопки переходить к след вопросу.
До этого я в ручную в коде менял id выборки из бд.

когда я менял в ручную id у меня на все вопросы можно было ответить.
А теперь я могу ответить только на первый вопрос. А на остальные меня при ответе выкидывает снова на 1й.
Сколько мучался не получилось исправить.
Вот и обратился на форум к вам за помощью. Навести на мысль почему не работает.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5662
Пользователь №: 35718
На форуме: 4 года, 8 месяцев, 4 дня
Карма: 176




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

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


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Цитата (Valick @ 11.11.2015 - 01:01)
нет smile.gif
имя файла не имеет значения, проверка должна проводиться в SQL запросе, и кстати сессия для этого абсолютно не нужна (вы её используете для хранения верного ответа, это вам не капча, где код генерируется на лету и его необходимо сохранить, и проще всего в сессиии). Сессия нужна только для идентификации пользователя.
Должно быть так.
Выбрали из БД вопрос и ответы (одним запросом)
Сформировали на основе этих данных HTML форму
Приняли в обработчик из формы id вопроса и id ответа и на основе этих данных сформировали запрос к бд. Из бд вы получаете результат, либо ответ верный либо неверный.
Т.е. никаких
if($myrowl['valid_a'] ==  $v_ans) $_SESSION['result_test'] = $var1;
            else $_SESSION['result_test'] = $var2;}




НУ Верный ответ у меня находится в отдельной таблице БД . Вопрос и варианты ответов в другой.
В сессию я его помещаю что бы выполнить проверку. верно ли я ответил.
а $var1 $var2 это что бы я мог отслеживать как то где ошибся, ""ответил ли правильно на вопрос сам PHP""
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Цитата (Valick @ 11.11.2015 - 01:12)
писать так это тяжкий грех для программиста
возьмите за правило, что id можно только получить из БД его нельзя сформировать на уровне РНР, а потом сделать выборку из БД основанную на умозаключениях.

Хорошо возьму, но пока что я могу только так.
Подскажите тогда как правильно будет вывести мне след вопрос из бд. При правильном предыдущем ответе.

Это сообщение отредактировал maruo - 11.11.2015 - 01:16
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Valick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 5662
Пользователь №: 35718
На форуме: 4 года, 8 месяцев, 4 дня
Карма: 176




поздно сейчас, и мне старому больному человеку пора спать, вон даже кот у меня храпит
давайте я вам дам задание
1) прочитать про нормализацию баз данных, понять первые три закона.
2) создать БД для вашего теста, по такому ТЗ:
Для вопроса который храниться в БД, может быть неограниченное количество ответов. Количество правильных ответов так же не ограничено.

кстати почему у вас таблица вопросов называется game?


--------------------
wmr - R281553014107
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Цитата (Valick @ 11.11.2015 - 01:21)
поздно сейчас, и мне старому больному человеку пора спать, вон даже кот у меня храпит
давайте я вам дам задание
1) прочитать про нормализацию баз данных, понять первые три закона.
2) создать БД для вашего теста, по такому ТЗ:
Для вопроса который храниться в БД, может быть неограниченное количество ответов. Количество правильных ответов так же не ограничено.

кстати почему у вас таблица вопросов называется game?


Надеюсь найду то что вы говорите и вычитаю.
В свободное время вы, или кто то из форумчан помогите все же решить мой вопрос. Не откладывайте его в папку РЕШЕНО!
Мне интересно знать почему у меня сбрасывется все и возвращается к id1.Я хочу понять саму ошибку.

Насчет названия таблицы: Ну во первых что пришло в голову. А во вторых я называю ее так потому что будущий проект будет связан с киберспортом.
В конечном итоге она будет все равно называться по другому.

Ну у меня На 1 вопрос будет 4 варианта ответа.
в конечном итоге я планирую что бы выводились рандомных 3 и 1 верный.
Определенное время на ответ.
Подсказки.
Это все в планах. Пока что до этого далеко. Не хватает еще знаний.

Это сообщение отредактировал maruo - 11.11.2015 - 01:36
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




up тему, хотелось бы услышать все равно в чем у меня проблема. Я понимаю код кривой, но не все получается прямо.
Я не могу забросить это дело, пока не узнаю в чем сейчас проблема.
Почему у меня при ответе на 2й и более вопрос выбрасывает на 1й.
А на первый я могу ответить.
Народ прошу дайте ответ, я хочу понять свою ошибку что бы потом ее не допускать.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 16 дней
Карма: 608




maruo
А почему скрипт должен проверять ответ на ВТОРОЙ вопрос, а не на первый? Объясни технически мне, какой строчкой ты передаёшь, что это ОТВЕТ на второй вопрос, и какой строчкой проверка, что это ПРОВЕРКА второго вопроса.


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22932
Пользователь №: 20039
На форуме: 7 лет, 7 месяцев, 16 дней
Карма: 608




$load_test =++ $_SESSION['count'];
И ещё один вопрос, что такое =++ ?

И последнее, первой строчкой пропиши:
error_reporting(-1);
ini_set('display_errors',1);


Ошибок точно никаких нет? Если они есть, то выведутся на экране


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maruo  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 329
Пользователь №: 37433
На форуме: 4 года, 2 месяца, 10 дней
Карма: 1




Notice: Undefined variable: v_ans in W:\home\mysite.com\www\check.php on line 60

Нотис только выходит.

$load_test =++ $_SESSION['count'];
Ну тут я увеличиваю id на 1 тем самым у меня выводится след вопрос. За счет кнопки.
Это все временно. Но И началось у меня это когда я стал использовать это



$load_test = 1;
if(!isset($_SESSION['count'])) $_SESSION['count'] ++;
if(isset($_POST['plus'])){
$load_test =++ $_SESSION['count'];}
echo $load_test;//выводим текущий id что попал в $load_test


Но я сломал голову, не могу додумать как еще можно вывести след. вопрос. хотябы на время с помощью кнопки.
Потом уже я со временем улучшу что будет выводится после правильного ответа.

Это сообщение отредактировал maruo - 12.11.2015 - 01:54
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (20) [1] 2 3 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса