7. Uitgebreid Voorbeeld
In dit hoofdstuk gaan we alles wat we hiervoor hebben geleerd samenvoegen: we gebruiken formulieren, programmeer technieken en SQL om met de database te communiceren.
We gaan verder met het formulier dat we in hoofdstuk 4 (over formulieren) al maakten. Bij de verwerking van dit reactie formulier, dat voor bezoekers van een website bedoeld is, gaan we gegevens in de database opslaan. Daarnaast maken we een systeem voor de beheerder van een website om reacties te bekijken, aan te passen en weg te gooien.
7.1. Opslaan in de database
In verwerk.php controleerden we de invoer, en lieten we deze weer in de browser zien. We bewaarden de data nog niet. Dat gaan we nu wel doen.Opdracht 7.1
- Maak in phpcursus/ een map 7/ aan.
- Sla form.html op in phpcursus/7/ (rechtermuisknop, doel opslaan als).
- Sla deze programmacode op als verwerk.php op in phpcursus/7/.
- Bekijk de bron van phpcursus/7/verwerk.php door het te openen in kladblok
- Bestudeer wat er gebeurt, er zijn een aantal dingen veranderd:
- Er zijn stukken tekst die commentaar heten toegevoegd, ze beginnen steeds met
//. Deze code wordt niet uitgevoerd en dient slecht om de code voor een programmeur leesbaarder te maken. - De variabele
$correctis toegevoegd. Deze variabele houdt bij of er fouten worden gemaakt. Zodra we een fout tegenkomen zetten we de boleaanse variabele$correctopfalse(het is niet correct). - Het onderste stuk code is helemaal nieuw:
<?php //Was alles correct ingevuld? if($correct){ //Opslaan! //Vul hier de code in om de reactie op te slaan! echo "<br /><br />Bovenstaande informatie is opgeslagen!<br />\n"; }else{ //Er is ergens een foute waarde ingevoerd, geef de bezoeker de mogelijkheid om terug te gaan echo "<br /><br />Er is een foute waarde ingevoerd, <a href=\"javascript:history.back();\">ga terug</a>.<br />\n"; } ?>Op de plek van//Vul hier de code in om de reactie op te slaan!gaan we zometeen de code invoegen die de data op gaat slaan.
- Er zijn stukken tekst die commentaar heten toegevoegd, ze beginnen steeds met
- Controleer wat het formulier doet door naar in uw browser naar http://localhost/phpcursus/7/form.html te surfen.
- Verander de regel
//Vul hier de code in om de reactie op te slaan!in://maak een verbinding met de database $link = mysql_connect("localhost", "root"); //selecteer de juiste database mysql_select_db("reacties", $link); //kijk of een persoon al bestaat $sql = "SELECT id FROM personen WHERE naam = '" . $naam . "' AND email = '" . $email . "'"; echo $sql . "<br />\n"; $result = mysql_query($sql); if(mysql_num_rows($result) > 0){ //vraag de id van een bestaand persoon op $row = mysql_fetch_array($result, MYSQL_ASSOC); $persoon_id = $row['id']; } else { //voeg de naam en email toe in de tabel personen $sql = "INSERT INTO personen(naam, email) VALUES ('" . $naam . "', '" . $email . "')"; echo $sql . "<br />\n"; mysql_query($sql); //vraag de id van de nieuwe persoon op $persoon_id = mysql_insert_id(); } //voeg de reactie toe in de tabel reacties. Gebruik de id van de zojuist toegevoegde persoon $sql = "INSERT INTO reacties(persoon_id, reactie, datum) VALUES (" . $persoon_id . ", '" . $reactie . "', NOW())"; echo $sql . "<br />\n"; mysql_query($sql); //sluit de database mysql_close($link);In het bovenstaande staan een hoop nieuwe dingen die we hier even bespreken. Eerst wordt er een verbinding met de MySQL server gemaakt. Die server staat op
localhost. We loggen in met hetrootaccount (eigenlijk is dit niet netjes, maar voor deze demonstratie het eenvoudigst), hier is geen wachtwoord voor nodig.Als we ingelogd zijn moeten we de juiste database selecteren, dat doen we met de regel:
mysql_select_db("reacties", $link);.Hierna maken we SQL queries, die u waarschijnlijk uit het vorige hoofdstuk herkent, we printen deze regels ook nog even voor onszelf ter controle met
echo $sql;. Hierna voeren we de queries uit metmysql_query($sql);Voor we de persoon toevoegen kijken we eerst, met behulp van een
SELECTof er al een persoon bestaat met de naam en het email adres die ingevuld zijn.De functie
mysql_insert_id()zorgt ervoor dat het id van de laatste uitgevoerde query gebruikt wordt, hierdoor wordt een reactie aan de juiste persoon gekoppeld.Als laatste sluiten we de verbinding met de database door:
mysql_close($link);. - Test het nieuwe script door weer naar het formulier te gaan en een aantal reacties (minstens 20) toe voegen (gebruik de terug knop van de brower, of backspace, om weer terug te komen in het formulier). Zorg ervoor dat er personen zijn die meerdere berichten in de database hebben staan. Als het goed is ziet u dan ook dat de personen niet opnieuw toegevoegd worden doordat er een
INSERTquery minder geprint wordt. - Download hier eventueel de nieuwe versie van de programmacode voor verwerk.php (overschrijf de oude verwerk.php).
- Verwijder eventueel de regels met
echo $sql . "<br />\n";.

7.2. Data weergeven
Uit het vorige hoofdstuk weten we nog hoe we data uit verschillende tabellen moeten combineren. We passen de query nog een beetje aan door eenORDER BY commando toe te voegen:
SELECT personen.naam, personen.email, reacties.reactie, reacties.datum FROM personen, reacties WHERE reacties.persoon_id = personen.id ORDER BY reacties.datumAls we dat niet doen worden de rijen in een niet gedefinieerde volgorde terug gegeven.
Onderstaand php script geeft alle reacties weer:
<html>
<head>
<title>Reacties</title>
</head>
<body>
<table>
<?php
//maak een verbinding met de database
$link = mysql_connect("localhost", "root");
//selecteer de juiste database
mysql_select_db("reacties", $link);
//selecteer alle reacties met naam en email adres van de auteur
$sql = "SELECT reacties.id, personen.naam, personen.email, reacties.reactie, reacties.datum FROM
personen, reacties WHERE reacties.persoon_id = personen.id ORDER BY reacties.datum";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "<tr><td>van <a href='mailto:" . $row["email"] . "'>" . $row["naam"] . "</a></td>
<td>op " . $row["datum"] . "</td></tr>\n";
echo "<tr><td colspan='2'>" . $row["reactie"] . "</td></tr>\n";
echo "<tr><td colspan='2'> </td></tr>\n"; //pas deze regel aan!
}
?>
</table>
</body>
</html>
In dit script maken we wederom verbinding met de MySQL server, selecteren we een server en vervolgens voeren we SELECT commando uit. Daarna maken we een lus door de resultaten van de query heen met behulp van de while-lus. We printen het resultaat in een HTML tabel.
Opdracht 7.2.
- Sla reacties.php op in phpcursus/7/ (rechtermuisknop, doel opslaan als).
- phpcursus/7/reacties.php komt overeen bovenstaand script.
- Surf naar http://localhost/phpcursus/7/reacties.php om alle reacties die u eerder invoerde te bekijken.
- Bekijk via de browser de broncode van reacties.php

7.3. Verwijder data
We gaan phpcursus/7/reacties.php zo aanpassen dat er een knopje op komt om reacties te verwijderen. In het bestand is al aangegeven waar dit knopje moet komen, namelijk op de regel waar staat://pas deze regel aan!. We gaan op die regel een linkje naar verwijder.php plaatsen en sturen het id van de reactie mee.
Opdracht 7.2.
- Open phpcursus/7/reacties.php in kladblok
- Verander de regel met
//pas deze regel aan!in:echo "<tr><td colspan='2'><a href='verwijder.php?reactie_id=" . $row["id"] . "'> verwijder</a></td></tr>\n";
Disclaimer: De gratis online cursussen zijn beschikbaar gesteld en ontwikkeld door het bedrijf Learnit. Deze cursus is gratis maar mag niet gebruikt worden voor commerciƫle doeleinden. Dit werk is auteursrechtelijk beschermd; het auteursrecht ervan berust bij Learnit.


