<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Как сделать тестирование на сайте

Как сделать тестирование на сайте

В сегодняшней статье собираюсь поведать, как сделать тестирование на сайте. Данное тестирование будет аналогично тому, которое имеется на данном сайте, правда, в упрощённом виде. Сразу говорю, если Ваши знания по PHP и MySQL стремятся к нулю, то можете не читать, а лучше поищите в Интернете готовые скрипты тестов. Для тех же, кто обладает необходимым минимумом, а также хочет узнать, как реализуется тестирование на сайте, я и написал данную статью.

Привожу алгоритм, который Вам потребуется уже преобразовать в PHP+MySQL:

  1. Создать таблицу с тестами. Здесь достаточно следующих полей: id (уникальный идентификатор), title (название теста), description (описание теста). Можете также добавить количество прошедших данный тест и средний балл. Здесь всё элементарно, и Вы должны справиться с этим без проблем.
  2. Создать таблицу с вопросами. Здесь нужны следующие поля: id (уникальный идентификатор), test_id (id теста, к которому принадлежит данный вопрос), title (текст вопроса), variant_1 (текст варианта 1), variant_2 (текст варианта 2), correct (правильный ответ). Здесь Вы можете указывать любое количество вариантов, в данном случае, я поставил 2 варианта. В поле "correct" должно стоять число с правильным ответом, например, "1".
  3. При запуске теста необходимо записать в сессию id тех вопросов, на которые будет отвечать пользователь. Для этого извлеките из базы любое количество вопросов (например, 10 случайных вопросов для выбранного теста) и запишите их id в сессию пользователя. Здесь Вам необходимо записать в сессию массив, где ключами будут id вопросов, а в значении по умолчанию пустая строка. А в будущем будет идти тот ответ, который дал пользователь.
  4. Вывести первый вопрос из массива, который не имеет ответа (то есть значение равно пустой строке).
  5. Принять от пользователя ответ и записать в массив с ключом в виде id данного вопроса, ответ, который прислал пользователь.
  6. Сделать редирект обратно на страницу с вопросами.
  7. Вернуться к пункту 4, если ещё остались вопросы без ответа. Если на все вопросы были даны ответы, то проверить массив в сессии на соответствие правильным ответам, и вывести окончательный результат.

Давайте разберём 3-й пункт с кодом:

<?php
  $arr = array(5, 15, 1, 10, 2); // 5 id вопросов, которые извлекаются из базы
  for ($i = 0; $i < count($arr); $i++) {
    $arr_questions[$arr[$i]] = "";
  }
  $_SESSION["questions"] = $arr_questions;
?>

Теперь давайте разберём 5-й пункт, так как он тоже является, возможно, не совсем понятным:

<?php
  $question_id = 5; // id вопроса, на который пользователь дал ответ (приходит из формы)
  $answer = 1; // ответ, который дал пользователь (приходит из формы)
  $_SESSION["questions"]["$question_id"] = $answer; // Записываем в сессию ответ на данный вопрос
?>

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (25):

Sirojiddin Ashti Sirojiddin Ashti 06.02.2012 14:29:14

Добавьте результат этого скрипка с рисунком??

Ответить

Admin Admin 06.02.2012 15:14:29

Результат здесь: http://myrusakov.ru/tests.html В любой тест заходите вот и будет результат, за вычетом того, что в конце данного скрипта нет разбора вопросов.

Ответить

Screen Screen 06.02.2012 15:01:44

Да. Было бы не плохо, если бы появились пункты со скринами, или допустим со ссылками для переходу, где можно было бы просмотреть итог.

Ответить

yurfact yurfact 07.02.2012 15:16:12

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

Ответить

Admin Admin 07.02.2012 16:07:54

Здесь люди учатся, а не занимаются копипастом. Если Вам нужен готовый скрипт, то я, помнится, написал в статье, что нужно делать в этом случае. А если Вы пришли сюда учиться, то, будьте любезны, додумайте задачу сами.

Ответить

Нур-Мохмад Нур-Мохмад 30.07.2012 12:00:51

Михаил, разве тут $_SESSION["questions"][$question_id"] не должна быть кавычка перед $question_id ?

Ответить

Admin Admin 30.07.2012 18:37:00

Спасибо, исправил.

Ответить

SARUMAN7 SARUMAN7 17.11.2013 13:35:34

Михаил скажите пожалуйста как мне вытащить все вопросы по определенной теме допустим где test_id=3

Ответить

alexandrdante alexandrdante 17.11.2013 13:56:32

Уважаемый Андрей,id каждого вопроса теста не должны повторяться. Можно сделать категорию,занести в неё нужные вам тесты,задать ей id,например,3 и при помощи запроса вытащить все данные из неё.

Ответить

SARUMAN7 SARUMAN7 17.11.2013 14:23:17

Уважаемый Александр Альт если Вам не сложно помогите мне пожалуйста я php знаю на среднем уровне до темы регулярные выражения (учусь по курсу Михаила)но мне срочно нужно сделать тестирование поможете сопровождая меня советами?

Ответить

alexandrdante alexandrdante 17.11.2013 14:51:31

Буду стараться Вот смотрите,у вас есть айди теста: - 3 в таблице с вопросами у каждого вопроса из этого теста,должен стоять идентификатор 3 в колонке test_id У Михаила разобран вывод по одному вопросу при помощи массива и так по действиям,что,в принципе и актуально для теста. Cуть примерно такая. Подключаетесь к базе данных при помощи php. Думаю у Михаила этот вопрос разобран в курсах,так что вдаваться в подробности не буду. После этого создаёте запрос к таблице и выводите данные из неё при помощи массива: $row = mysql_fetch_array(mysql_query("SELECT * FROM таблица WHERE test_id=`3`",$имя переменной,где задан коннект к базе данных); потом выводите результат при помощи команды echo, включив нужные вам данные в вывод. echo $row['title']; Выведет название вопроса) Ну,можно вывести название,далее варианты ответов и т.д. Это как обычный вывод массива

Ответить

SARUMAN7 SARUMAN7 17.11.2013 15:14:41

все понял кроме этого момента Вот смотрите,у вас есть айди теста: - 3 в таблице с вопросами у каждого вопроса из этого теста,должен стоять идентификатор 3 в колонке test_id на данный момент я создал отдельную базу kontrol и в ней две таблицы testi с полями id и title(тема тестов) и таблицу vopros с полями id id_test title_vopros(Текст вопроса) variant_1 variant_2 variant_3 variant_4 и поле correct это чтобы Вы видели ситуацию изнутри теперь вопрос как подставить эти данные в форму (тоесть заголовок варианты и т.д) обе таблицы я заполнил по одной записи в нужных полях

Ответить

alexandrdante alexandrdante 17.11.2013 18:12:51

Ну вот. Вытаскиваете этим запросом: $row = mysqli_fetch_array(mysqli_query("SELECT * FROM таблица WHERE test_id=`3`",$имя переменной,где задан коннект к базе данных); все данные из таблицы,у которых параметр test_id = 3 mysqli_fetch_array - этим вы добавили все данные из всех колонок,test_id которых равен 3,в массив =) Ну вот,а теперь выводите,создавая внешний вид теста например:echo $row['title_vopros']; - текст вопроса. Следующей строчкой: echo $row['variant_1']; - выведет первый вариант ответа и так далее,формируя тело отображения теста Про привязку к форме отпишу чуть позже.

Ответить

SARUMAN7 SARUMAN7 18.11.2013 12:01:13

на данный момент я вывел из базы тему теста вопрос теста и варианты ответа вот файл testing.php <?php $disk=mysql_connect("localhost","Admin","5577"); if($disk==true) echo "подключились"."<br/>"; else echo "неудача"."<br/>"; $obr=mysql_select_db("kontrol",$disk); if($obr==true) echo "обратились"."<br/>"; else echo "неудача"."<br/>"; $result=mysql_query("SELECT * FROM vopros",$disk); if($result==true) echo "вывели"."<br/>"; else echo "не вывели"."<br/>"; $resultat=mysql_query("SELECT * FROM testi",$disk); if($result==true) echo "вывели"."<br/>"; else echo "не вывели"."<br/>"; $myrow=mysql_fetch_array($result); if($myrow==true) echo "занесли"."<br/>"; else echo "не занесли"."<br/>"; echo "<br/>"; echo "<br/>"; $myr=mysql_fetch_array($resultat); if($myrow==true) echo "занесли"."<br/>"; else echo "не занесли"."<br/>"; echo "<br/>"; echo "<br/>"; mysql_close($disk); $title=$myr['title']; $title_vopros=$myrow['title_vopros']."<br/>"; $variant_1=$myrow['variant_1']."<br/>"; $variant_2=$myrow['variant_2']."<br/>"; $variant_3=$myrow['variant_3']."<br/>"; $variant_4=$myrow['variant_4']."<br/>"; include("select_testing.php"); echo "<br/>"; ?> а вот файл select_testing.php <div class="content"> ТЕСТОВЫЙ КОНТРОЛЬ. <p align="center"><?php echo $title;?></p> <p><b><?php echo $title_vopros;?></b></p> <form name="opros" action="" method="POST"> <input type="radio" name="id1" value="5"><?php echo $variant_1;?><hr> <br> <input type="radio" name="id1" value="4"><?php echo $variant_2;?><hr> <br> <input type="radio" name="id1" value="3"><?php echo $variant_3;?><hr> <br> <input type="button" name="golos" value="Следующий вопрос"> </form> </div> хотя все выводит но все же проверьте правильно ли здесь все и еще вопрос в таблице у меня 4 поля вариантов а в данном вопросе 3 (тоесть четвертое поле в таблице пустое)не вызовет ли это в будущем сбой? и еще как сделать чтобы при нажатии на следующий вопрос выводился следующий из таблицы?? (пока там всего один вопрос)

Ответить

tikkiwiki tikkiwiki 18.11.2013 16:33:50

Здравствуйте Андрей. Пустое поле в таблице не как не повлияет на работу в целом. Чтобы выводился следующий вопрос из таблицы читайте внимательно пункты 2-7 и делайте по аналогии.

Ответить

SARUMAN7 SARUMAN7 18.11.2013 16:50:19

Здравствуйте а можно как то обойтись без сессий? я их еще не изучал а тупо копировать я не хочу так как потом сам же не разберусь в коде в случае чего

Ответить

tikkiwiki tikkiwiki 18.11.2013 17:26:34

Андрей, в сессиях нет ничего страшного, изучайте их так как они очень важные. Сделать это без сессий, Вам будет не возможно.

Ответить

SARUMAN7 SARUMAN7 20.11.2013 15:55:38

Скажите как сделать так чтобы при нажатии следующий вопрос выводился следуший вопрос? если можно пример пожалуйста

Ответить

tikkiwiki tikkiwiki 20.11.2013 16:44:25

Лучше реализовать одной кнопкой "Ответ" и после ее нажатия, пользователю автоматически подается следующий вопрос. Реализовать можно множеством способов, зависит от того, как у Вас работает система, можно AJAX'ом допустим.

Ответить

SARUMAN7 SARUMAN7 20.11.2013 16:55:37

нет аякс не использую можно как то по другому ? я слышал get запросом как то можно\\\подскажите код

Ответить

tikkiwiki tikkiwiki 20.11.2013 17:06:04

пример из двух файлов, форма отправки находится в файле form.php, а обработчик в файле add.php. Файлы Вы можете конечно называть как вам угодно, лишь придерживаясь правильности именования файлов и правильно указывайте путь к обработчику. Создайте form.php и добавьте следующий код: <form method="GET" action="add.php"> <label> <input type="text" name="page" id="textfield"> </label> <label> <input type="submit" name="button" id="button" value="Отправить"> </label> </form> Затем, создайте add.php и в него добавьте следующее: <?php echo $_GET['page']; ?> Затем, запустите form.php и увидите результат работы передачи данных методом GET.

Ответить

SARUMAN7 SARUMAN7 24.11.2013 10:02:45

у меня все получилось но все вопросы выводятся на одной странице как это исправить?

Ответить

webomax webomax 13.05.2014 19:38:38

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

Ответить

Teodor86 Teodor86 02.08.2015 11:22:01

Вывести первый вопрос из массива, который не имеет ответа (то есть значение равно пустой строке). Трудность испытываю в этом пункте. Можете помочь?

Ответить

archer8827 archer8827 01.09.2015 16:03:09

Спасибо Михаил за статью. У меня вопрос, если например мне для тестирования нужны всего 20 вопросов из 100 которые хранятся в БД, лучше ли будет если я сделаю запрос к бд , получу эти 20 вопросов, загоню их в массив на javascript и с помощью js уже буду обращаться к вопросам.(т.е. просто чтоб из-за 20 вопросов не обращаться каждый раз к базе)? лучше будет так или полный бред ))) ????

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.