User Tools

Site Tools


2019-07-09

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
2019-07-09 [2019/07/09 12:17]
nmckillop
2019-07-09 [2019/07/21 17:24] (current)
ed
Line 1: Line 1:
 ====== Meeting Notes: Tue 9th July 2019 ====== ====== Meeting Notes: Tue 9th July 2019 ======
  
-Welcome! ​ This is the notes page for our third learn-to-code-from-scratch meeting in The Avalon Bar.  The plan is to run something like this every two weeks to get people up and running with basic web development and system admin.+Welcome! ​ This is the notes page for our third learn-to-code-from-scratch meeting in McPhabbs (downstairs).  The plan is to run something like this every two weeks to get people up and running with basic web development and system admin.
  
 ==== Scratch Notes ==== ==== Scratch Notes ====
Line 22: Line 22:
  
   - [[Setting up EC2|Setting up an Amazon EC2 instance]] - once that is complete you now have your own server, and you can securely connect to it using Putty (or directly via Linux/​macOS)   - [[Setting up EC2|Setting up an Amazon EC2 instance]] - once that is complete you now have your own server, and you can securely connect to it using Putty (or directly via Linux/​macOS)
-  - [[2019-03-17|Setting up your server with Apache and MySQL]] - the server doesn'​t have much software installed, just a basic terminal, these steps install Apache (the webserver) and MySQL (the database). ​ At this step we also downloaded Adminer (a GUI to manage the database, similar to PHPMyAdmin). +  - [[2019-03-17|Setting up your server with Apache and MySQL]] - the server doesn'​t have much software installed, just a basic terminal, these steps install Apache (the webserver) and MySQL (the database). ​ At this step we also downloaded Adminer (a GUI to manage the database, similar to PHPMyAdmin). Then we went through the Amazon AWS interface, and set up Security Groups for the webserver (HTTP) - this is basically Amazon'​s equivalent of a firewall, we had to open a port to allow access to our IP in a web browser
-  - Then we went through the Amazon AWS interface, and set up Security Groups for the webserver (HTTP) - this is basically Amazon'​s equivalent of a firewall, we had to open a port to allow access to our IP in a web browser+
   - [[Hello World|Writing your first hello world program]] - Now we started with our very first simple program.   - [[Hello World|Writing your first hello world program]] - Now we started with our very first simple program.
   - [[Editing files|Editing files remotely on the server]] - Then we looked at ways to connect directly to the server and edit files using Notepad++ (or by mounting a remote directory in Linux/​macOS)   - [[Editing files|Editing files remotely on the server]] - Then we looked at ways to connect directly to the server and edit files using Notepad++ (or by mounting a remote directory in Linux/​macOS)
Line 56: Line 55:
 </​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 108:
 </​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>​
  
  
Line 147: Line 247:
   - Rameez   - Rameez
   - [[https://​glasgow.social/​@rasikapurohit|Rasika Purohit]]   - [[https://​glasgow.social/​@rasikapurohit|Rasika Purohit]]
-  - Samuel Gallagher 
   - Stephen Taylor   - Stephen Taylor
   - [[https://​glasgow.social/​@M|Steven]]   - [[https://​glasgow.social/​@M|Steven]]
-  - Victor Obonyo 
   - Victoria B   - Victoria B
   - [[https://​glasgow.social/​@Star_Anise|Yasmin]]   - [[https://​glasgow.social/​@Star_Anise|Yasmin]]
2019-07-09.1562674668.txt.gz · Last modified: 2019/07/09 12:17 by nmckillop