U bent hier

Begin van een applicatie

logo

Voor het opzetten van een applicatie binnen PHP & MySQl, gaan we een tweetal programma's voor gebruiken.

Het volgende artikel maakt gebruik van PHPMyAdmin en een PHP editor.
Dit artikel gaat ervan uit dat je het artikel:

gelezen hebt.

PHPMyadmin

Het pakket is in het vorige artikel besproken.
Hij is te vinden op :
http://phpmyadmin.sourceforge.net/download.html

PHP editor

Ik gebruik hiervoor Notepad ++
Deze (of een update) is te vinden op:

http://notepad-plus.sourceforge.net/nl/site.htm

Installeer het pakket en maak een snelkoppeling op je bureaublad.

De volledige script.

Het eerst laat ik jullie het volledige script zien, waarna de uitleg per gedeelte volgt.

Allereerst het volledige script.


<?php


    
//-----try
    
try
    {  
        
//-----
        
$db = new PDO('mysql:host=localhost;dbname=adressen''gebruiker''wachtwoord') ;
        
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        
        
$resultaat '' ;
                            
        
$st $db->prepare("SELECT * FROM adressen ORDER BY naam ASC;") ;

        
$st->execute( );
                
        echo 
'<table cellspacing="5" cellpadding="5" border="0" width="800">'."\n" ;
            
        foreach ( 
$st->fetchAll() as $rij )
        {
            
            echo 
'<tr>'."\n" ;
            echo 
'<td align="left">'."\n" ;
            echo 
'<a href="?id='.$rij['id'].'">'."\n" ;
            echo 
$rij['m_v'].' '.$rij['voornaam'].' '.$rij['tussenvoegsel'].' '.$rij['naam']  ;
            echo 
'</a>'."\n" ;
            echo 
'</td>'."\n" ;
            echo 
'<td>'."\n" ;
            echo 
$rij['straat']." ".$rij['huisnummer'];
            echo 
'</td>'."\n" ;
            echo 
'<td>'."\n" ;
            echo 
$rij['pc'] ." &nbsp; "$rij['woonplaats'];
            echo 
'</td>'."\n" ;
            echo 
'<td>'."\n" ;
            echo 
$rij['telefoon'] ;
            echo 
'</td>'."\n" ;
            echo 
'<td>'."\n" ;
            echo 
$rij['email'];
            echo 
'</td>'."\n" ;       
            echo 
'</tr>'."\n" ;

            
$resultaat '1' ;

        }
        
        echo 
'</table>'."\n" ;
            
        if ( 
'1' != $resultaat )
        {
            echo 
'<table width="100%"><tr><td>Er zijn geen resultaten</td></tr></table>'."\n" ;
        }        
        
//-----/    
    
}
    
//-----/try
    //-----catch
    
catch (PDOException $e)
    {
        
//-----
        
echo '<pre>'."\n" ;  
        echo 
'<table>'."\n" ;  
        echo 
'<tr><td> &nbsp; File: &nbsp; </td><td> &nbsp; '.$e->getMessage().'</td></tr>'."\n" ;
        echo 
'</table>'."\n" ;  
        echo 
'</pre>'."\n" 
        
//-----/    
    
}
    
//-----/catch

    
?> 



  index.php


De uitleg

 

Try Catch

Dit mechanisme is nieuw in PHP5.

Het zorgt ervoor dat je een fouten afhandelingsroutine voor het uitlezen van de MySQL database zelf kunt ontwerpen.


<?php


    
try
    {
        
$resultaat "" ;

        foreach ( 
$st->fetchAll() as $rij )
        {
            
/*
                code
            */
            
            
$resultaat "1";
        }
        
        if ( 
'1' != $resultaat )
        {
            echo 
'<table width="100%"><tr><td>Er zijn geen resultaten</td></tr></table>'."\n";
        }        

    }
    catch (
PDOException $e)
    {
        
/*
            code
        */
    
}
    

?> 



  Try / Catch



Ziet er simpel uit zou je zeggen.
De try probeert de query uit te voeren.
Zit er een fout in de query, treedt het catch mechanisme in werking.
Let wel alleen het kunnen uitvoeren van de query wordt getest, niet de resulaten van de query.

PDO

PDO is een database onhafhankelijke Data Access Abstract Layer.
Dat betekend dat je PDO kan gebruiken voor verschillende database types.

Hier gebruik ik als database type MySQL,


<?php


    $db 
= new PDO('mysql:host=localhost;dbname=adressen''gebruiker''wachtwoord') ;

    
$db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION) ;

    
$st $db->prepare(" SELECT * FROM adressen ORDER BY naam ;") ;

    
$st->execute( ) ;
    

?> 



  PDO



De opbouw van PDO is altijd hetzelfde.
Je geeft aan

  • het type database ( mysql )
  • de host ( localhost)
  • de database ( adressen )
  • inlognaam ( gebruiker )
  • wachtwoord ( wachtwoord )

Met het woord  new  geef je dat PDO een nieuw object dient te gaan maken.
Waarvan alle eigenschappen toegankelijk zijn via  $db 

Om van de foutmeldingen gebruik te kunnen maken, wordt in de tweede regel de fouten routine eigenschappen gedefineerd.
setAttribute
Voor een nadere uitleg ziervoor op http://nl.php.net/manual/en/pdo.error-handling.php

De derde regel probeert of de query uitgevooerd kan worden.
prepare
Ontstaat er ergens een fout, zal er nu direct naat de catch gegaan worden.
De query wordt dus niet defintief uitgevoerd.
Alleen maar gesimuleerd.
Let wel.
Er wordt alleen gekeken of de query uit te voeren is.
De syntax wordt gecheckt.
Niet of de resultaten de gewenste resultaten zijn.

Verloopt de simulatie goed zal de query daadwerkelijk uitgevoerd gaan woorden
execute

De uitvoer

De uitvoer komt uit een foreach loop.

foreach ( $st->fetchAll() as $rij 

Deze eigenschap fetchAll() zorgt ervoor dat alle records opgehaald worden.
De foreach loop doet de rest.
Let wel op de notatie van de variablelen ( $rij["straat"].
De blokhaken en de dubbele aanhalingstekesns zijn hier nodig.


<?php


    
echo '<table cellspacing="5" cellpadding="5" border="0" width="800">'."\n" ;
        
    foreach ( 
$st->fetchAll() as $rij )
    {
        
        echo 
'<tr>'."\n" ;
        echo 
'<td align="left">'."\n" ;
        echo 
'<a href="?id='.$rij['id'].'">'."\n" ;
        echo 
$rij['m_v'].' '.$rij['voornaam'].' '.$rij['tussenvoegsel'].' '.$rij['naam']  ;
        echo 
'</a>'."\n" ;
        echo 
'</td>'."\n" ;
        echo 
'<td>'."\n" ;
        echo 
$rij['straat']." ".$rij['huisnummer'];
        echo 
'</td>'."\n" ;
        echo 
'<td>'."\n" ;
        echo 
$rij['pc'] ." &nbsp; "$rij['woonplaats'];
        echo 
'</td>'."\n" ;
        echo 
'<td>'."\n" ;
        echo 
$rij['telefoon'] ;
        echo 
'</td>'."\n" ;
        echo 
'<td>'."\n" ;
        echo 
$rij['email'];
        echo 
'</td>'."\n" ;       
        echo 
'</tr>'."\n" ;

        
$resultaat '1' ;

    }
    
    echo 
'</table>'."\n" ;
    

?> 



  Table

 

Catch

Het mechanisme welke voor de foutenmeldingen zorgt.
Dit zal op een productie server anders er uit zien dan op een test server.
In dit gevak is er voor een minmaal bericht gekozen.

Een voorbeeld.

  File:  
  SQLSTATE[42S22]: Column not found: 1054 Unknown column 'naam2' in 'order clause'

Voor uitgebreidere foutmeldingen zie op http://nl.php.net/manual/en/pdo.error-handling.php

  catch   <?php

    catch (
PDOException $e)
    {
        echo 
"<pre>\n";
        echo 
"<table>\n";
        echo 
"<tr><td> &nbsp; File: &nbsp; </td><td> &nbsp; ".$e->getMessage()." </td></tr>\n";
        echo 
"</table>\n";
        echo 
"</pre>\n";
    }


?>

 

Wel of geen resultaat

Binnen de try heb ik de de variable $resultaat gedefinieerd. ( leeg gedefinieerd ) $resultaat ""  Hiermee kan ik PHP zelfs in strict mode goed laten werken. Deze mode is het meest kritisch en laat zelfs waarschuwingen zien als het volgens hem nog beter zou kunnen. Op de meeste productie server is deze trouwens niet zo ingesteld. Als binnen de foreach loop er geen resultaat is, zou ik toch wat op mijn scherm willen zien. Als er resultaat is, wordt $resultaat gevuld met 1 ( meerdere malen zelfs ) Als er na de foreach loop geen $resultaat is,     if ( != $resultaat ) Komt er een bericht Er zijn geen resultaten.


<?php


    
try
    {
        
$resultaat "" ;

        foreach ( 
$st->fetchAll() as $rij )
        {
            
/*
                code
            */
            
            
$resultaat "1";
        }
        
        if ( 
'1' != $resultaat )
        {
            echo 
'<table width="100%"><tr><td>Er zijn geen resultaten</td></tr></table>'."\n";
        }        

    }
    catch (
PDOException $e)
    {
        
/*
            code
        */
    
}
    

?> 



  $resultaat

 

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

 

De volgende artikelen

De volgende artikelen zullen gaan over:

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

Veel programmeer plezier ermee.


Tot ziens,

Ubel Jan van Wijhe

van Wijhe Consultancy
info@vanwijhecons.nl