## INSERT en UPDATE

Om gegevens in een database in te voeren kun je natuurlijk als webmaster via phpMyAdmin iedere keer braaf gegevens toevoegen. Handiger zou het zijn als dit automatisch kan gebeuren. Stel je wilt een forum op internet beheren en je zou van alle gebruikers zelf de gegevens moeten intypen. Dat is haast onbegonnen werk. Nu is er een mogelijkheid om met PHP en MySQL deze gegevens automatisch te verwerken. Je maakt daarvoor een geschikt webformulier waarin je de benodigde gegevens moet invullen. In het formulier check je eerst of de juiste gegevens zijn ingevuld en vervolgens sla je via een PHP-script de gegevens middels een INSERT-query op in de daarvoor bestemde tabel(len) in de database.
Wij werken hier het voorbeeld uit voor de tabel provincies. Hoe kunnen we via een invulformulier meerdere provincies in de tabel opslaan. We zullen daarvoor een formulier moeten ontwerpen met verschillende invoervelden en een knop waarmee de gegevens kunnen worden toegevoegd. Door te klikken op de knop wordt er een PHP-bestand aangeroepen waarmee de query die zorgt voor het toevoegen van de ingevulde gegevens
De code van dat formulier luidt:

    <!DOCTYPE html>
    <html lang="nl">
    <head>
        <title>formulier toevoegen provincies</title>
        <meta charset="utf-8">
    </head>
    <body>
    <form name="toevoegen" action="provtoevoegen.php" method="post">
        <fieldset>
            <legend>Toevoegen provincie</legend>
            <table>
                <tr>
                    <td align="right">Provincie:</td>
                    <td><input type="text" name="provincie" size="25"></td>
                </tr>
                <tr>
                    <td align="right">Hoofdstad:</td>
                    <td><input type="text" name="hoofdstad" size="25"></td>
                </tr>
                <tr>
                    <td align="right">Bevolking:</td>
                    <td><input type="text" name="bevolking" size="10"></td>
                </tr>
                <tr>
                    <td align="right">Oppervlakte km2:</td>
                    <td><input type="text" name="oppervlakte_km2" size="4"></td>
                </tr>
                <tr>
                    <td align="right">Inwoners km2:</td>
                    <td><input type="text" name="inwoners_km2" size="4"></td>
                </tr>
                <tr>
                <tr>
                    <td><input type="submit" value="Voeg provincie toe"></td>
                    <td><input type="reset" value="Wis gegevens"></td>
                </tr>
            </table>
        </fieldset>
    </form>
    </body>
    </html>

Je ziet dat de onderdelen door middel van een tabel keurig geordend zijn en dat de tekst in de eerste kolom rechts is uitgelijnd. We willen nu de gegevens van Drenthe aan de database toevoegen:

In het formulier wordt bij de action verwezen naar het bestand provtoevoegen.php. In het PHP-script van dat bestand zal ergens de verbinding met de database Nederland terug te vinden zijn. De kans is groot dat de verbinding met de database ook in andere bestanden gerealiseerd zal moeten worden. Het is daarom handig om daarvoor een apart include-bestand te gaan gebruiken. Include betekent insluiten. Telkens als er een verbinding met de database moet worden geregeld, roepen we dit include-bestand aan. De opdracht voor het insluiten van bestanden is include("bestandsnaam.php"). Stel we hebben het script voor de connectie met de database opgeslagen in een bestand met de naam connect.php. Dan wordt het include-bestand include("connect.php"). Het werken met een include-bestand is zeker uit veiligheidsoverwegingen raadzaam en bovendien ook praktisch. Want stel dat je van webhost verandert en in elk script de connectiegegevens moet gaan wijzigen dan is dat een heleboel werk. Nu hoef je alleen maar dat ene bestand te veranderen.

In connect_nederland.php zou dan bijvoorbeeld kunnen staan:

    <?php
    $server = "localhost";
    $user = "root";
    $password = "usbw";
    $database = "nederland";

    $link = mysqli_connect($server, $user, $password, $database)
    or die ("Er kan geen verbinding tot stand worden gebracht: " .
        mysqli_connect_error());

Om overzicht van de bestanden op je server zou je het bestand connect.php op kunnen slaan in de map includes op de webserver. In dezelfde map kunnen we bijvoorbeeld ook het bestand functions.php opslaan. Dit is het bestand waar alle functies instaan die we vaker willen gebruiken. De include-opdracht voor het tot stand brengen van de connectie met de database vinden we terug in het bestand provtoevoegen.php:

    <?php

    // Connectie met de database maken
    include("includes/connect_nederland.php");

    // Ophalen van gegevens uit het formulier
    $provincie = $_POST["provincie"];
    $hoofdstad = $_POST["hoofdstad"];
    $bevolking = $_POST["bevolking"];
    $oppervlakte_km2 = $_POST["oppervlakte_km2"];
    $inwoners_km2 = $_POST["inwoners_km2"];

    // Invoegen van de gegevens in de tabel provincies

    $query = "INSERT INTO provincies(prov_id,provincie,hoofdstad,bevolking,oppervlakte_km2,inwoners_km2)
         VALUES('','$provincie','$hoofdstad','$bevolking','$oppervlakte_km2','$inwoners_km2')";
    $result = mysqli_query($link, $query) or die (mysqli_error($link));

    // Verbreken van de verbinding met de database
    mysqli_close($link);

    // Bevestigen dat de gegevens zijn opgeslagen
    echo "De gegevens van $provincie zijn opgeslagen in de database.";

In het vanuit provtoevoegen.html aangeroepen bestand provtoevoegen.php regelen we via de INSERT INTO query het toevoegen van gegevens aan de database nederland. Het format van de INSERT INTO query is:
$query = "INSERT INTO tabelnaam(kol1 , kol2 , etc.) VALUES('var1', 'var2' , etc.)";
$result = mysqli_query($link, $query);

Let erop dat bij het gebruik van de variabelen in de VALUES enkelvoudige aanhalingstekens (‘) worden gebruikt in plaats van dubbele aanhalingstekens (“). Escape is bij enkelvoudige aanhalingstekens niet nodig.
De eerste regel is de query die moet worden uitgevoerd. De tweede regel met de functie mysqli_query() zorgt voor het daadwerkelijk toevoegen van de gegevens in de database.
Als we nu gaan testen of de gegevens inderdaad in de database staan kunnen we dat doe door een SELECT query uit te voeren.
Het resultaat zou er dan als volgt uit kunnen zien: