U bent hier

Het toevoegen van gegevens

logo

Het toevoegen van gegevens.

Voor het toevoegen van gegevens binnen de applicatie Adressenlijst maken we gebruik van de drie vorige artikelen in de reeks fundamentals.
Tevens maken we gebruik van een PHP editor.

Dit artikel gaat ervan uit dat je de artikelen

gelezen hebt.

Het toevoegen van een adres.

 

Eerst weer het volledige script.

 


<?php
/*
    Aangepast door van Wijhe Consultancy
    augustus 2011
*/

// formulier nog niet verstuurd
// laat het invul formulier hier zien
if ($_SERVER["REQUEST_METHOD"] == "GET" )
{
    
//-----
    
echo '<table cellspacing="5" cellpadding="5" border=0>'."\n";
    echo 
'<form action="'.$_SERVER["SCRIPT_NAME"].'" method="POST">'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td colspan=2><b><font color=red>*</font><font size="-1"> = verplicht</font></b></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Dhr / Mw <font color=red>*</font></font></b></td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="mv"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Voornaam <font color=red>*</font></td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="voornaam"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Tussenvoegsel </td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="tussenvoegsel"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Achternaam <font color=red>*</font></td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="naam"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Adres  / Huisnummer<font color=red>*</font></td>'."\n";
    echo 
'<td><input size="35" maxlength="250" type="text" name="straat"> <input size="15" maxlength="250" type="text" name="nummer"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Postcode </td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="pc"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Woonplaats <font color=red>*</font></td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="woonplaats"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Telefoon</td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="telefoon"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">Geboorte datum ( yyyy-mm-dd )</td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="geb_datum"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td valign="top">E-mail</td>'."\n";
    echo 
'<td><input size="50" maxlength="250" type="text" name="e_mail"></td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'<tr>'."\n";
    echo 
'<td colspan=2><input type="Submit" name="verstuurd" value="Voeg adres toe">'."\n";
    echo 
'&nbsp;&nbsp;&nbsp; <input type="Reset" value="Wis invoer">'."\n";
    echo 
'</td>'."\n";
    echo 
'</tr>'."\n";
    echo 
'</form>'."\n";
    echo 
'</table>'."\n";
    
//----/
}
else
{    
    
// maak foutenlijst array
    
$foutenlijst = array();
    
$teller '0' ;

    
// valideer tekst velden
    
if ( !isset($_POST["mv"]) || strlen($_POST["mv"]) == '0' 
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Dhr Mw</b>'
        
$teller++; 
    }

    if ( !isset(
$_POST["voornaam"]) || strlen($_POST["voornaam"]) == '0'  
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Voornaam</b>'
        
$teller++; 
    }
        
    if ( !isset(
$_POST["naam"]) || strlen($_POST["naam"]) == '0' 
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Achternaam</b>'
        
$teller++; 
    }
        
    if ( !
strlen($_POST["straat"]) ) 
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Adres</b>'
        
$teller++; 
    }

    if ( !isset(
$_POST["nummer"]) || strlen($_POST["nummer"]) == '0' 
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Nhuisnummer</b>'
        
$teller++; 
    }

    if ( !isset(
$_POST["woonplaats"]) || strlen($_POST["woonplaats"]) == '0' )    
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Woonplaats</b>'
        
$teller++; 
    }

    if ( !isset(
$_POST["geb_datum"]) || strlen($_POST["geb_datum"]) == '0'  )    
    { 
        
$geb_datum '0000-00-00' ;
    }
    else
    {
        
$geb_datum $_POST["geb_datum"] ;
    }    
    
    
// fouten controle.
    // en zoniet.
    
if (  '0' == $teller )
    {
        try
        {  
            
// Verzorg connectie naar MySQL
            // en initialiseert beginwaarden PDO errors
            
$db = new PDO('mysql:host=localhost;dbname=adressen''gebruiker''wachtwoord') ;
            
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

            
// Het opzetten van de Query    
            //
            
$st_n $db->prepare("INSERT INTO adressen
                                       (mv,
                                        voornaam,
                                        tussenvoegsel,
                                        naam,
                                        straat,
                                        nummer,
                                        pc,
                                        woonplaats,
                                        telefoon,
                                        email,
                                        geb_datum,
                                        opm)
                            VALUES(:mv, :tv, :vn, :naam, :straat, :nr, :pc, :plaats, :telf, :email, :gd, 'test')  "
) ;

            
//    Het toekennen                               
            //    en beveiligen van de variabelen via bindParam
            
$st_n->bindParam(":mv",         $_POST["mv"]);    
            
$st_n->bindParam(":vn",         $_POST["voornaam"]);        
            
$st_n->bindParam(":tv",         $_POST["tussenvoegsel"]);                    
            
$st_n->bindParam(":naam",       $_POST["naam"]);            
            
$st_n->bindParam(":straat",     $_POST["straat"]);            
            
$st_n->bindParam(":nr",         $_POST["nummer"]);            
            
$st_n->bindParam(":pc",         $_POST["pc"]);
            
$st_n->bindParam(":plaats",     $_POST["woonplaats"]);            
            
$st_n->bindParam(":telf",       $_POST["telefoon"]);            
            
$st_n->bindParam(":email",      $_POST["e_mail"]);            
            
$st_n->bindParam(":gd",         $geb_datum);            

            
// Het uitvoeren van de vraagstelling            
            
$st_n->execute() ;     

            
// laat resultaat zien en verdere mogelijkheden.
            
echo '<div align="center">'."\n";
            echo 
'<br />'."\n";
            echo 
'<br />'."\n";                
            echo 
'<br />'."\n";
            echo 
'Het toevoegen was succesvol.';
            echo 
'<br />'."\n";
            echo 
'<br />'."\n";            
            echo 
'<a href="index.php">Klik hier om terug naar het hoofd menu te gaan.</a>'."\n";
            echo 
'<br />'."\n";
            echo 
'</div>'."\n";
            
//-----/
        
}
        catch (
PDOException $e)
        {
            
// Laat foutmelding PDO zien            
            
echo '<table>'."\n";
            echo 
'<tr><td> &nbsp; File: &nbsp; </td><td> &nbsp; '.$e->getMessage().' </td></tr>'."\n";
            echo 
'<tr><td> &nbsp; File: &nbsp; </td><td><a href="index.php">Klik hier om terug naar het hoofd menu te gaan.</a></td></tr>'."\n";            
            echo 
'</table>'."\n";            
            
//-----/
        

    }
    
// er zijn wel fouten in het formulier
    
else
    {        
        
// er zijn fouten in het formulier gevonden.
        // laat deze als lijst zien.
        
echo '<p>De volgende fouten traden op : </p>'."\n";
        echo 
'<ul>'."\n";
        for ( 
$x '0'$x sizeof($foutenlijst); $x++ )
        {
            echo 
'<li>'.$foutenlijst[$x].'</li>'."\n";
        }
        echo 
'</ul>'."\n";
        echo 
'<p><a href="index.php">Klik hier om terug naar het hoofd menu te gaan.</a></p>'."\n";
        
//-----/
    
}
}


?>



  voegtoe.php

 

De uitleg

Het formulier

Het formulier is voor zich sprekend.

Het begin is via de request_method.
Standaard staat deze op "GET".
Pas als het formulier verstuurd wordt, krijgt deze de "POST" waarde.

 


<?php


// formulier nog niet verstuurd
// laat het invul formulier hier zien
if ($_SERVER["REQUEST_METHOD"] == "GET" )
{
    
    
?>  



  Request

 

Het begin van de fouten afhandelings routine


<?php


    
// maak foutenlijst array
    
$foutenlijst = array();
    
$teller '0' ;

    
// valideer tekst velden
    
if ( !isset($_POST["mv"]) || strlen($_POST["mv"]) == '0' 
    { 
        
$foutenlijst[$teller] = 'Het volgende veld is niet ingevuld: <b>Dhr Mw</b>'
        
$teller++; 
    }
    
    
?>    



  Begin fouten afhandeling

 

Er wordt eerst een lege array gemaakt genaamd $foutenlijst.
Deze kan dan als dat nodig is, gevuld worden met individuele fouten.

Er wordt daarna een variabele $teller op de begin waarde 0 gezet.

 

Het valideren begint.
In dit geval wordt er alleen gekeken of er een waarde is ingevuld.
Zo niet wordt de array $foutenlijst met een getal en een waarde gevuld.
Zo kun je voor elk veld zijn eigen validatie regel opstellen.
Een tekst veld heeft immers andere regels dan een e-mail veld of een datum veld.
Uiteraard kun je dit ook via javascript regelen.

Ik zou het er zeker bij doen.
Alleen niet alleen.
De grootste fout die iemand kan maken is dat de invoer die vanuit het Internet komt, vertrouwd wordt.

Kijk je naar het totale script, zul je zien dat er geen opschoning van ingevoerde data plaats vindt.
Voor dit artikel heb ik gekozen dat hier niet te doen.
Het zou de uitleg onnodig complex maken.
In een toekomstig artikel kom ik hier nog op terug.

 

Het afhandelen van de fouten routine

Hiervoor dient het volgende stuk script.


<?php


    
// fouten controle.
    // en zoniet.
    
if (  '0' == $teller )
    {

        
/*
                de daadwerkelijk toevoeg routine
        */

    
}
    else
    {        
        
// er zijn fouten in het formulier gevonden.
        // laat deze als lijst zien.
        
echo '<p>De volgende fouten traden op : </p>'."\n";
        echo 
'<ul>'."\n";
        for ( 
$x '0'$x sizeof($foutenlijst); $x++ )
        {
            echo 
'<li>'.$foutenlijst[$x].'</li>'."\n";
        }
        echo 
'</ul>'."\n";
        echo 
'<p><a href="index.php">Klik hier om terug naar het hoofd menu te gaan.</a></p>'."\n";
        
//-----/
    
}
    
    
?> 



  Fouten afhandeling

 

Als er fout optreedt, weet je dat de variable $teller groter dan 0 is.
De eerste regel kijkt hier naar.
Deze bepaalt naar welke lus er door gestuurd wordt.
Het daadwerkelijk toevoegen of het laten zien van fouten.

Is er een fout, wordt de gehele array $foutenlijst uitgelezen.
Aangezien er alleen maar fouten in kunnen staan, mag alles getoond worden.

Het is trouwens wel zo vriendelijk om hier een link in te bouwen om terug te keren in het script.
Je geeft iemand zowel de gelegenheid een formulier te verbeteren.

 

Try Catch

Het werkende gedeelte.

 


<?php


        
try
        {  
            
// Verzorg connectie naar MySQL
            // en initialiseert beginwaarden PDO errors
            
$db = new PDO('mysql:host=localhost;dbname=adressen''gebruiker''wachtwoord') ;
            
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

            
// Het opzetten van de Query    
            //
            
$st_n $db->prepare("INSERT INTO adressen
                                       (mv,
                                        voornaam,
                                        tussenvoegsel,
                                        naam,
                                        straat,
                                        nummer,
                                        pc,
                                        woonplaats,
                                        telefoon,
                                        email,
                                        geb_datum,
                                        opm)
                            VALUES(:mv, :tv, :vn, :naam, :straat, :nr, :pc, :plaats, :telf, :email, :gd, 'test')  "
) ;

            
//    Het toekennen                               
            //    en beveiligen van de variabelen via bindParam
            
$st_n->bindParam(":mv",         $_POST["mv"]);    
            
$st_n->bindParam(":vn",         $_POST["voornaam"]);        
            
$st_n->bindParam(":tv",         $_POST["tussenvoegsel"]);                    
            
$st_n->bindParam(":naam",       $_POST["naam"]);            
            
$st_n->bindParam(":straat",     $_POST["straat"]);            
            
$st_n->bindParam(":nr",         $_POST["nummer"]);            
            
$st_n->bindParam(":pc",         $_POST["pc"]);
            
$st_n->bindParam(":plaats",     $_POST["woonplaats"]);            
            
$st_n->bindParam(":telf",       $_POST["telefoon"]);            
            
$st_n->bindParam(":email",      $_POST["e_mail"]);            
            
$st_n->bindParam(":gd",         $geb_datum);            

            
// Het uitvoeren van de vraagstelling            
            
$st_n->execute() ;     

            
// laat resultaat zien en verdere mogelijkheden.
            
echo '<div align="center">'."\n";
            echo 
'<br />'."\n";
            echo 
'<br />'."\n";                
            echo 
'<br />'."\n";
            echo 
'Het toevoegen was succesvol.';
            echo 
'<br />'."\n";
            echo 
'<br />'."\n";            
            echo 
'<a href="index.php">Klik hier om terug naar het hoofd menu te gaan.</a>'."\n";
            echo 
'<br />'."\n";
            echo 
'</div>'."\n";
            
//-----/
        
}
        catch (
PDOException $e)
        {
            
// Laat foutmelding PDO zien            
            
echo '<table>'."\n";
            echo 
'<tr><td> &nbsp; File: &nbsp; </td><td> &nbsp; '.$e->getMessage().' </td></tr>'."\n";
            echo 
'<tr><td> &nbsp; File: &nbsp; </td><td><a href="index.php">Klik hier om terug naar het hoofd menu te gaan.</a></td></tr>'."\n";            
            echo 
'</table>'."\n";            
            
//-----/
        


    
    
?>  



  Try / Catch

 

Voor een groot gedeelte is dit in het vorige artikel al uitgelegd.
Het begin van een applicatie

Het enige wat hier bij komt, is het vormen van de query.
Deze is goed leesbaar.

De prepared statements bieden je de mogelijkheid tot het creeren van queries die veiliger zijn, waarvan de performance beter is en die relatief eenvoudig te noteren zijn.
Dit veiliger slaat op het feit dat er PHP via de bindParam methode automatisch variabelen beveilgd worden.

MySQL exploits kunnen zo niet gebeuren.
Omdat het queryplan wordt opgesteld voordat er data wordt doorgegeven, is de query ook niet meer gevoelig voor "SQL injection".
De structuur van de query wordt vastgelegd tijdens het prepareren van het statement en kan daarna niet meer veranderen.
De data waarmee het statement later wordt aangeroepen kan dus de structuur van de query niet meer veranderen, het wordt simpelweg als data behandeld en niet als SQL statements.

Bron: http://wiki.phpfreakz.nl/PreparedStatements

 

Elke variable wordt dus gebonden via het volgfende statement.

$st_n->bindParam(":mv", $_POST["mv"]);

De variabele $_POST["mv"] wordt als volledige variabele aan ":mv" doorgegeven.
En zo voor alle variabelen van het formulier

Hierna wordt het script uitgevoerd door:
$st_n->execute()

 

Er kan enige verwarring optreden bij deze zin
$st_n = $db_n->prepare("INSERT INTO ".$tabel."

Er komt ineens de variabele $st_n om de hoek kijken.
De basis is echter de array $db_n
Deze is nodig om een connectie met MySQL te maken en te onderhouden.
De array $st_n gebruik je om de queries verder af te handelen

 

Dit script is trouwens in te vinden onder de naam naw_voegtoe.zip

De volgende artikelen

De volgende artikelen zullen gaan over :

  • Ordening in de toepassing brengen
  • Het veranderen van gegevens
  • En het verwijderen van gegevens
  • Het zoeken van gegevens
  • De laatste stappen in het verfijnen

Hierbij wordt gebruik gemaakt van bovenstaande files.

Veel programmeer plezier ermee.


Tot ziens,

Ubel Jan van Wijhe

van Wijhe Consultancy
info@vanwijhecons.nl