User Tools

Site Tools


2019-07-09

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
2019-07-09 [2019/07/09 13:18]
nmckillop
2019-07-09 [2019/07/09 13:49]
nmckillop
Line 56: Line 56:
 </​code>​ </​code>​
  
-Now, a basic page to choose a question ​and random, and wait for the answer, let's call it ''​quiz.php'':​+Now, a basic page to choose a question ​at random, and wait for the answer, let's call it ''​quiz.php'':​
  
 <​code>​ <​code>​
Line 109: Line 109:
 </​code>​ </​code>​
  
 +==== Getting the questions from a database ====
 +
 +First, lets design a very simple database that can hold both the questions and answers. ​ We'd normally have a table for questions and a table for answers (especially if some questions had multiple answers) but for now we'll stick to one table.
 +
 +We need:
 +
 +    - A question ID (so we can match questions to answers) this'​ll be a number so we can use numbered arrays
 +    - A question (a text field to record the question in) lets say 2000 characters long at most
 +    - An answer (so we know if the user got it right) lets say 500 characters long at most
 +    - A time/date of when the question was last asked
 +
 +Why the time and date?  This'​ll let the '​random experience'​ be a bit less repetitive. ​ More on that later.
 +
 +You can create this manually using the mysql client, or in Adminer (instructions on installing it are [[2019-03-17|here]]).
 +
 +A quick way to create the table in Adminer is to copy and paste this SQL into the **SQL Command** section:
 +<​code>​
 +CREATE TABLE `quiz_questions` (
 +  `question_id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
 +  `question` varchar(2000) NOT NULL,
 +  `answer` varchar(500) NOT NULL,
 +  `last_asked` datetime NOT NULL
 +);
 +</​code>​
 +
 +That'​ll create the table for you.
 +
 +And now, this SQL will add some test questions to it (or you can enter some yourself by clicking on the newly created "​quiz_questions"​ table and clicking 'New Item'​):​
 +
 +<​code>​
 +INSERT INTO `quiz_questions` (`question`,​ `answer`, `last_asked`)
 +VALUES ('What was originally considered to be the ninth planet from the Sun but after 1992 had its status as a large planet changed?',​ '​Pluto',​ now());
 +INSERT INTO `quiz_questions` (`question`,​ `answer`, `last_asked`)
 +VALUES ('How many days are there in February in a leap year?',​ '​29',​ now());
 +INSERT INTO `quiz_questions` (`question`,​ `answer`, `last_asked`)
 +VALUES ('Give the four initials of the organisation responsible for maintaining a database of drivers in Great Britain?',​ '​DVLA',​ now());
 +INSERT INTO `quiz_questions` (`question`,​ `answer`, `last_asked`)
 +VALUES ('​Which dance move, in which the dancer moves backwards, was made popular by Michael Jackson?',​ '​Moonwalk',​ now());
 +</​code>​
 +
 +
 +Let's create a new file, this one called ''​questions_from_db.php''​ - we'll be using some code from the [[2019-04-06|connecting to your DB sample]]:
 +
 +<​code>​
 +<?​php ​
 +
 +$host = "​localhost";​
 +$username = "​coding_user";​
 +$password = "​cheese";​
 +$db_name = "​coding"; ​
 +
 +$mysql_string = "​mysql:​host=$host;​dbname=$db_name";​
 +
 +$db_connection = new PDO($mysql_string,​ $username, $password);
 +
 +$sql = "​select * from quiz_questions";​
 +$rs = $db_connection->​query($sql);​
 +$rows = $rs->​fetchAll(PDO::​FETCH_ASSOC);​
 +
 +foreach($rows as $row) {
 +  $questions[$row['​question_id'​]]['​question'​] = $row['​question'​];​
 +  $questions[$row['​question_id'​]]['​answer'​] = $row['​answer'​];​
 +
 +}
 +
 +?>
 +</​code>​
 +
 +==== Putting it all together ====
 +Now, if everything has went to plan, you can replace the:
 +<​code>​require("​questions.php"​)</​code>​
 +
 +line from your ''​quiz.php''​ file with:
 +<​code>​require("​questions_from_db.php"​)</​code>​
 +
 +and now, when you enter new questions to the database, they'​ll be available in your quiz.
 +
 +==== We finished? ====
 +
 +This might be too much for one session, but the great thing about the web is how easy it is for us to connect with each other.
 +
 +You can make your questions, in your database, available to anyone else's quiz program with this bit of code, call it ''​export.php'':​
 +
 +<​code>​
 +<?php
 +header("​Content-Type:​ application/​json"​);​
 +require("​questions_from_db.php"​);​
 +echo json_encode($questions);​
 +?>
 +</​code>​
 +
 +Now, you can share your quiz URL with others. ​ The full URL will be http://​YOUR_IP_ADDRESS/​export.php
 +
 +So, back to the ''​quiz.php''​ file (actually anyone else's ''​quiz.php''​) instead of the line that reads
 +<​code>​require("​questions.php"​)</​code>​
 +
 +This code will connect to a fellow coder'​s IP address, download their quiz questions and format them in a way your program can understand them:
 +<​code>​
 +$json_data = file_get_contents("​http://​YOUR_IP_ADDRESS/​export.php"​);​
 +$questions = json_decode($json_data,​ true);
 +</​code>​
  
  
2019-07-09.txt ยท Last modified: 2019/07/21 18:24 by ed