Inleiding | Introductie invoeren | Praktijkvoorbeeld | Productlijst en invoer |
|
|
Inleiding |
|
---|---|
In het vorige hoofdstukken hebben we geleerd om een connectie met een database management service te leggen en gegevens op te vragen uit deze database. Er is ook een begin gemaakt met een eenvoudige website voor de administratie vann een webwinkel. Gegevens opvragen is belangrijk, maar even belangrijk is het opslaan van gegevens in de database. We gaan nu de eenvoudige website uitbreiden met de invoer van een nieuw product. Een HTML formulier en de verwerking van eenformulier zijn daarbij natuurlijk een noodzaak. Ben je die techniek vergeten kijk dan in de cursus Interactieve website: PhP . Hoofdstuk 3 in die cursus geeft het snelst het gewenste inzicht.
Aan het einde van dit hoofdstuk weet je :
|
|
|
|
Invoeren van gegevens |
|
Dit hoofdstuk ga je gegevens invoeren in een database. Het opslaan van gegevens
vanuit php vindt ook weer plaats via SQL code. In de regel hieronder vind je
de code voor het invoeren van een product vanuit php (noodzakelijk is natuurlijk dat de connectie al aanwezig is).
$query = "INSERT INTO product (id, naam, prijs, voorraad, omschrijving) VALUES ('', '$naam','$prijs','$voorraad','$omschrijving')"; $resultaat = $db->query($query);Merk op dat voor het veld id een lege waarde ('') wordt verstuurd. De reden is dat in mysql automatische nummering voor dit veld is ingeschakeld en krijgt bij invoer automatisch een unieke waarde toegewezen. Het veld kan om deze reden ook volledig worden weggelaten. $query = "INSERT INTO product (naam, prijs, voorraad, omschrijving) VALUES ('$naam','$prijs','$voorraad','$omschrijving')"; $resultaat = $db->query($query);De variabelen $naam, $prijs, $voorraad en $omschrijving' bevatten de waarden die in de database moeten worden opgeslagen. Deze moeten dus een waarde krijgen en dat kan met behulp van een HTML formulier. Dit wordt het onderwerp van de volgende paragraaf. |
|
|
|
Praktijkvoorbeeld |
|
Opdrachten |
|
voorbeeld 3: index.php |
<?php //Laad database code require_once("database.php"); //Laad algemene code require_once("algemeen.php"); //Laad code voor de acties met betrekking tot producten die we op de database gaan doen require_once("product.php"); $menu = getMenu(); // Haal het menu door de functie getMenu() uit algemeen.php op te roepen $uitvoer=""; $actie=""; if( isset($_POST['actie']) && !empty($_POST['actie'])) { $actie=$_POST['actie']; } switch($actie) { case "Invoeren": $uitvoer=artikelInvoeren($db); // Voer de functie artikelInvoeren() in acties.php uit break; case "Voeg Product Toe": // Voer de functie toonArtikelInvoerTabel in acties.php uit met 4 lege waarde fout paren $uitvoer=toonArtikelInvoerTabel(legeInvoerEnFout(4),true); break; case "Toon Artikelen": default: $uitvoer=toonArtikelenLijst(); } /* Met onderstaand echo commando kun je een stuk text tussen END en END; naar de client computer sturen */ echo <<<END <!DOCTYPE html > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Page title</title> <style type="text/css"> td { border:1px groove black; } </style> </head> <body> <h1>Garagebedrijf Nieuwenhuis</h1> <hr> <form action='{$_SERVER['PHP_SELF']}' method="post" > $menu </form> <hr> <form action='{$_SERVER['PHP_SELF']}' method="post" > $uitvoer </form> </body> </html> END; //einde van het PhP blok ?> |
voorbeeld 3: functies voor algemeen.php |
De functie getMenu/* getMenu geeft de code voor het menu in de website */ function getMenu() { $uitvoer=<<<END <table class='menu' summary=""> <tr> <td><input type="submit" name="actie" value="Toon Artikelen"> </td> <td><input type="submit" name="actie" value="Voeg Product Toe"> </td> </tr> </table> END; return $uitvoer; } De functie legeInvoerEnFoutDe volgende functie voegen we toe omdat die straks bij het invoeren van medewerkers en klanten ook nuttig is. Bij ieder veld dat je moet invullen hoort een waarde en je kan een fout bij het invullen maken. De waarden en de fouten moeten we kunnen volgen tussen de verschillende schermen. /** * legeInvoerEnFout maakt een dubbele array met lege strings * die staan voor waarde-fout paren * $aantal is aantal gewenste waarde-fout paren */ function legeInvoerEnFout($aantal) { $resultaat = array(); // voeg per iteratie een waarde-fout paar toe for($i=0;$i<$aantal;$i++) $resultaat[$i]=array("",""); return $resultaat; } |
voorbeeld 3: functies voor product.php |
De functie toonArtikelInvoerTabelDe functie toonArtikelInvoerTabel is een voorbeeld van een functie die meerdere argumenten nodig heeft om te kunnen werken./** * toonArtikelInvoerTabel toont de tabel waarmee een product kan worden ingevoerd * of het resultaat van de invoer actie kan laten zien * param $productEnFout: lijst van producteigenschappen bestaande uit * 4 invoer velden en eventuele fouten * [ [naam,foutnaam], [prijs,foutprijs], [voorraad,foutvoorraad], [omschrijving,omschrijving], * ] * param $alsFormulier true als formulier getoond moet worden, false als alleen de informatie getoond moet worden */ function toonArtikelInvoerTabel($productEnFout,$alsFormulier) { $invoer1=""; $invoer2=""; $invoer3=""; $invoer4=""; $invoerknop=""; // Voeg hier eigen commentaar toe. print_r($productEnFout); // Voeg hier eigen commentaar toe. if($alsFormulier) { $invoer1="<input name='naam' value='{$productEnFout[0][0]}'/>"; // naam $invoer2="<input name='prijs' value='{$productEnFout[1][0]}'/>"; // prijs $invoer3="<input name='voorraad' value='{$productEnFout[2][0]}'/>"; // voorraad $invoer4="<textarea name='omschrijving'/>{$productEnFout[3][0]}</textarea>"; // omschrijving $invoerknop=<<<END <tr> <td colspan="3"> <input type="submit" name="actie" value="Invoeren"/> </td> </tr> END; } else { $invoer1=$productEnFout[0][0]; // naam $invoer2=$productEnFout[1][0]; // prijs $invoer3=$productEnFout[2][0]; // voorraad $invoer4=$productEnFout[3][0]; // omschrijving } // Voeg hier eigen commentaar toe. $uitvoer=<<<END <h3>Voer artikel in</h3> <table> <tr> <td>Geef naam artikel</td> <td>$invoer1</td> </td> <td>{$productEnFout[0][1]}</td> </tr> <tr> <td>Geef prijs</td> <td>$invoer2</td> <td>{$productEnFout[1][1]}</td> </tr> <tr> <td>Geef aantal in voorraad</td> <td>$invoer3</td> <td>{$productEnFout[2][1]}</td> </tr> <tr> <td>Geef omschrijving</td> <td>$invoer4</td> <td>{$productEnFout[3][1]}</td> </tr> $invoerknop </table> END; return $uitvoer; } De functie artikelInvoerenDe functie artikelInvoeren is de langste van het stel./* * artikelInvoeren leest de invoer uit de $_POST variabele, * test de invoer, geeft foutmeldingen bij mislukkingen en voegt als * er niets misgaat een record toe aan de database. * param &$db: verwijzing naar de database */ function artikelInvoeren(&$db) { $fout1=""; $fout2=""; $fout3=""; $fout4=""; $naam = ""; $prijs = ""; $voorraad = ""; $omschrijving = ""; $uitvoer =""; $melding=""; //verbinding maken met database if(!$db) maakVerbinding($db,$melding); if(!$db) // test verbinding { // mislukt $uitvoer=$melding; } else { // isset is een functie die kijkt of een element in een array bestaat // post variabelen ophalen // $db->real_escape_string() functie wordt gebruikt om foute invoer te voorkomen if(isset($_POST["prijs"])) { $prijs = $db->real_escape_string($_POST["prijs"]); } if(isset($_POST["naam"])) { $naam = $db->real_escape_string($_POST["naam"]); } if(isset($_POST["voorraad"])) { $voorraad = $db->real_escape_string($_POST["voorraad"]); } if(isset($_POST["omschrijving"])) { $omschrijving= $db->real_escape_string($_POST["omschrijving"]); } // test of er waarden en getallen zijn // Voeg hier eigen commentaar toe. if( !empty($naam) && ((!empty($prijs) && is_numeric($prijs))||$prijs=="0") && ((!empty($voorraad) && is_numeric($voorraad))||$voorraad=="0") && !empty($omschrijving) ) { // Maak van getal1 een double $prijs=(double)$prijs; //opdracht geven aan database $query = "INSERT INTO product (naam,prijs,voorraad,omschrijving) VALUES ('$naam','$prijs','$voorraad','$omschrijving')"; if($resultaat = $db->query($query)) { $uitvoer = toonArtikelInvoerTabel( array( array($naam,$fout1), array($prijs,$fout2), array($voorraad,$fout3), array($omschrijving,$fout4) ),false); $uitvoer .= "Artikel is ingevoerd"; } else { $uitvoer = toonArtikelInvoerTabel( array( array($naam,$fout1), array($prijs,$fout2), array($voorraad,$fout3), array($omschrijving,$fout4) ),true); $uitvoer .= "Fout uitvoeren query! $query"; } } else // er is een fout { // Voeg hier eigen commentaar toe. if(empty($naam)){$fout1="Er moet een naam worden ingevuld";} if(empty($prijs)){$fout2="Er moet een getal worden ingevuld";} elseif(!is_numeric($prijs)){$fout2="$prijs is geen getal";} if(empty($voorraad)){$fout3="Er moet een getal worden ingevuld";} elseif(!is_numeric($voorraad)){$fout3="$voorraad is geen getal";} if(empty($omschrijving)){$fout4="Er moet een omschrijving worden ingevuld";} $uitvoer = toonArtikelInvoerTabel( array( array($naam,$fout1), array($prijs,$fout2), array($voorraad,$fout3), array($omschrijving,$fout4) ),true); } //sluit database verbreekVerbinding($db); } return $uitvoer; } |
|