Learnit Training
We continue with the form we already created in chapter 4 (about forms). When processing this response form, which is intended for visitors to a website, we are going to store data in the database. We will also create a system for the administrator of a website to view, modify and discard responses.

7.1. Saving in the database

In

process.php We checked the entries and displayed them again in the browser. We did not save the data yet. We will do that now. Task 7.1Create a folder 7/ in phpcourse/.Save form.html in phpcourse/7/ (right click, save target as).

Save this program code as process.php in phpcourse/7/.

View the source of phpcourse/7/process.php by opening it in NotepadLook at what is happening, some things have changed: There are pieces of text that Look at what is happening, some things have changed: commentLook at what is happening, some things have changed: are added, they always begin with

//

. This code is not executed and only serves to make the code more readable for a programmer.The variable $correct has been added. This variable keeps track of errors. As soon as we encounter an error, we set the bolean variable at Task 7.1false (it is not correct). at Task 7.1falseThe bottom piece of code is completely new:

//Was alles correct ingevuld? if ($correct) { // Opslaan! // Vul hier de code in om de reactie op te slaan! echo "

Bovenstaande informatie is opgeslagen!
\n"; } else { // Er is ergens een foute waarde ingevoerd, geef de bezoeker de // mogelijkheid om terug te gaan echo "

Er is een foute waarde ingevoerd, ga terug.
\n"; }
        At the site of 
//Fill in the code here to save the reaction! We are about to insert the code that will store the data. Check what the form does by going to http://localhost/phpcursus/7/form.html in your browser.Change the line in: $db = new PDO('mysql:host=localhost;dbname=reacties', 'root', ''); //kijk of een persoon al bestaat $query = "SELECT id FROM personen WHERE naam = ? AND email = ?"; $stmt = $db->prepare($query); $stmt->execute(array( $naam, $email)); if ($stmt->rowCount() > 0){ $row = $stmt->fetch(PDO::FETCH_ASSOC); $persoon_id = $row['id']; } else { // Voeg de naam en e-mail toe in de tabel personen $query = "INSERT INTO personen(naam, email) VALUES (?, ?)"; $stmt = $db->prepare($query); $stmt->execute(array( $naam, $email)); //vraag de id van de nieuwe persoon op $persoon_id = $db->lastInsertId(); } // voeg de reactie toe in de tabel reacties. Gebruik de id van de zojuist toegevoegde persoon $query = "INSERT INTO reacties(persoon_id, reactie, datum) VALUES (?, ?, ?)"; $stmt = $db->prepare($query); $stmt->execute(array( $persoon_id, $reactie, date('Y-m-d H:i:s'))); Task 7.1 The above contains a lot of new things that we will discuss here. First, a connection is made with the MySQL server. For this, we make use of the PHP Data Object extension. This PHP extension makes it possible to communicate with the database from our PHP script. Our MySQL server runs on the Change the line localhost and we log in with the root account (actually this is not very nice, but for this demonstration it is the easiest), here no password is needed. The code to log in therefore looks like volt: $db = new PDO('mysql:host=localhost;dbname=reactions', 'root', '');

The result is a new database object. It is stored in the variable $db. We can use this object to communicate with the database.

Next, we create SQL queries, which you will probably recognise from the previous chapter. However, there is one major difference. The placeholder for the name and e-mail address is a ?. By using this placeholder we protect ourselves against SQL injections. This is a common attack, where hackers try to add their own SQL code to the query. Unfortunately, we cannot go into detail about this. Fortunately, there is a lot of information available online about SQL injections. We checked the entries and displayed them again in the browser. We did not save the data yet. We will do that now. We ask the database to prepare the query with $stmt = $db->prepare($query);. Then we run the queries with

$stmt->execute(array( $name, $email));

. Only now, the variables $name and $email are provided during execution. The SQL server places these in the query at the position of the question marks.

On working days from 9:00 to 17:30

SELECT

whether a person already exists with the name and e-mail address entered.

  1. The function
  2. $db->lastInsertId();
  3. ensures that the Chapter 'Extended Example' of the free course PHP and MySQL. Learnit, also free online webinars with trainer and live online courses with trainer.id
  4. of the last query performed is used, thus associating a response with the correct person.
  5. Test the new script by going to the form again and adding some responses. Make sure that there are people who have multiple messages in the database. You can view the added record using PHPMyAdmin http://localhost/phpmyadmin.
  6. If necessary, download the new version of the program code for verWork.php here (overwrite the old verWork.php).
  7. If all went well, you have filled the database with new data, we will now create a simple script to display this data.
  8. 7.2. Displaying data
    We remember from the previous chapter how to combine data from different tables. We modify the query a little by adding a 
  9. Voeg zelf zes reacties toe, en koppel ze aan de personen die je net aanmaakte door persoon_id aan te passen (Als het goed is bestaan persoon_id 1 t/m 4), er zijn dan dus twee personen met twee reacties (of ꨮ persoon met drie).
  10. command:
  11. SELECT persons.name, persons.email, reactions.response, reactions.date FROM persons, reactions WHERE reactions.person_id = person.id ORDER BY reactions.date e.g. excel, time management, sql If we do not, the rows are returned in an undefined order.

The following php script displays all responses:

Verwijderen uit de database is erg eenvoudig, maar ook gevaarlijk. Voor je het weet gooi je een hele tabel leeg! Let dus goed op als je het DELETE commando gebruikt! Het DELETE commando ziet er zo uit:
DELETE FROM tabelnaam
[WHERE voorwaarde [...]]
Het weglaten van het WHERE gedeelte zorgt voor het legen van de hele tabel. De WHERE restrictie zou er uit kunnen zien als: WHERE id = 5.

Opdracht 6.2.

  1. Open wederom het tabblad SQL in PhpMyAdmin
  2. Maak zelf een query die 1 rij uit de tabel reacties verwijdert, maak gebruik van het zojuist genoemde voorbeeld.
  3. Voer deze query uit.
  4. We hebben nu in de tabel personen 4 rijen en in de tabel reacties 5 rijen.
  5. Controleer dit weer door in het tabblad Structuur te kijken.

6.4. UPDATE

Het kan gebeuren dat er iets veranderd moet worden in de database gegevens. Het is natuurlijk mogelijk een rij te verwijderen en de aangepaste rij weer toe te voegen. Maar het kan makkelijker met het UPDATE commando. De structuur (of syntax) hiervan is:
UPDATE tabelnaam
SET kolomnaam = nieuwewaarde [, ... = ... [, ...]]
[WHERE voorwaarde [...]]

Het weglaten van de WHERE restrictie zorgt er in dit geval voor dat ૬e rijen in de tabel aangepast worden! Verder is het mogelijk meerdere kolommen tegelijk aan te passen. Zo kunnen bijvoorbeeld $db = new PDO('mysql:host=localhost;dbname=reacties', 'root', ''); //kijk of een persoon al bestaat $query = "SELECT id FROM personen WHERE naam = ? AND email = ?"; $stmt = $db->prepare($query); $stmt->execute(array( $naam, $email)); if ($stmt->rowCount() > 0){ $row = $stmt->fetch(PDO::FETCH_ASSOC); $persoon_id = $row['id']; } else { // Voeg de naam en e-mail toe in de tabel personen $query = "INSERT INTO personen(naam, email) VALUES (?, ?)"; $stmt = $db->prepare($query); $stmt->execute(array( $naam, $email)); //vraag de id van de nieuwe persoon op $persoon_id = $db->lastInsertId(); } // voeg de reactie toe in de tabel reacties. Gebruik de id van de zojuist toegevoegde persoon $query = "INSERT INTO reacties(persoon_id, reactie, datum) VALUES (?, ?, ?)"; $stmt = $db->prepare($query); $stmt->execute(array( $persoon_id, $reactie, date('Y-m-d H:i:s'))); Task 7.1 The above contains a lot of new things that we will discuss here. First, a connection is made with the MySQL server. For this, we make use of the PHP Data Object extension. This PHP extension makes it possible to communicate with the database from our PHP script. adres in de tabel We are about to insert the code that will store the data. tegelijk aangepast worden.

Een query om bijvoorbeeld Piet in Klaas te veranderen (in het onrealistische geval dat Piet zijn naam in Klaas veranderd) ziet er zo uit:

UPDATE personen
SET naam = 'Klaas Jansen', email = 'klaas@email.nl'
WHERE id = 1

6.5. SELECT

Create a folder 7/ in phpcourse/. is waarschijnlijk de meest gebruikte query, de functie van dit commando is het bevragen van de data, de data kan er niet mee veranderd of verwijderd worden. De meest eenvoudige structuur is:
SELECT kolomnaam [, kolomnaam [,...]]
FROM tabelnaam
[WHERE voorwaarde [...]]
Hier zorgt het weglaten WHERE restrictie voor het teruggeven van ૬e rijen. Als we bijvoorbeeld alle e-mailadressen van mensen met de naam Klaas Jansen willen krijgen voeren we de volgende query uit:
SELECT email
FROM personen
WHERE naam = 'Klaas Jansen'
Het uitvoeren van deze query levert een scherm op vergelijkbaar met het volgende:

Sitemap

6.5.1. JOINS

Het komt vaak voor dat we data uit meerdere tabellen willen combineren. Het voert te ver om hier een volledige uitleg te geven over hoe zogeheten joins exact werken, maar met behulp van joins is dit mogelijk. Hieronder volgt een eenvoudig voorbeeld waarmee alle reacties met daarbij de naam en e-mailadres van de auteur.
SELECT personen.naam, personen.email, reacties.reactie, reacties.datum
FROM personen, reacties
WHERE reacties.persoon_id = personen.id

Opdracht 6.3.

  1. Als het goed is weet u inmiddels hoe u een query uit moet voeren, kijk eventueel bij eerdere opdrachten
  2. Voer bovenstaande query uit
  3. Bekijk het resultaat
  4. Als één persoon meerdere berichten heeft geschreven komt deze ook meerdere keren voor in het resultaat, dit terwijl de naam en het e-mailadres maar één keer in de tabel personen staan!
We continue with the form we already created in chapter 4 (about forms). When processing this response form, which is intended for visitors to a website, we are going to store data in the database. We will also create a system for the administrator of a website to view, modify and discard responses.