Codeigniter

logo van Wijhe Consultancy

21-10-2017
Eigen artikelen

afbeelding Codeigniter

Codeigniter - de verbinding met een database maken



Er zullen weinig web applicaties zijn welke zonder een database werken.

Net als zovele web applicaties heeft Codeigniter ook daar zijn eigen voorzieningen voor.

En zijn eigen regels.

Het volgende artikel gaat over het instellen van Codeigniter om contact met de database te maken en hoe deze informatie op het scherm te krijgen.


Het instellen van de database


Hier gebruiken we de world database van MySQL zelf voor.

Download link


Plaats de sql file in de database world.

Het artikel zal van deze database uitgaan.


We dienen Codeigniter wel te vertellen dat er een database gebruikt gaat worden en welke database dat is.


Allereerst dienen we Codeigniter te vertellen dat er een database gebruikt gaat worden.

Dit doen we door aan de configuratie file autoload.php de library database te activeren.

Je kunt ook de library aanroepen op het moment dat deze nodig is, maar de kans op het vergeten aan te roepen of het vele type werk wat hier extra bij komt kun je voorkomen door deze library bij het aanroepen van de applicatie al beschikbaar te maken

 
    pad naar de file autoload.php  
./application/config/autoload.php
 

Verander het volgende

  van  
$autoload['library'] = array();

  van  
$autoload['library'] = array('database');

Het kan zijn dar er al library's zijn toegevoegd.

De syntax voor het bijvoegen van een library is :

  van  
$autoload['library'] = array('library_naam', 'database');


Daarna gaan we Codeigniter vertellen welke database gebruikt dient te worden en welke de aanmeld gegevens zijn.

Dit doen we in de configuratie file database.php

 
    pad naar de file database.php  
./application/config/database.php
 

Verander het volgende

  van  
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";

  van  
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "inlog_naam";
$db['default']['password'] = "uw_wachtwoord";
$db['default']['database'] = "uw_database_naam";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";



De controller voor het uitlezen van de tabel


Er vanuit gaande dat de standaard controller welkom.php is,

( zie hiervoor het voorgaande artikel) ,

ga ik de standaard functie van die controller ( index ) gebruiken om de MySQL tabel uit te lezen.


Om het gehele plaatje van Model, Controller, View rond te krijgen zal ik in alle 3 de secties iets gaan schrijven.

In de Model sectie het gedeelte van de interactyie met de database.

In de View sectie het gedeelte van het weergeven van alle informatie in HTML.

En als verbindende schakel in de Controller sectie het oproepen van de database gegevens en het koppelen van deze gegevens met de view en het weergeven van de view


De controller welkom.php


    pad naar de controller file welkom.php  
./application/controllers/welkom.php
 

Deze ziet er als volgt uit

  van  
class Welkom extends CI_Controller {

    function index()
    {
        $this->load->view('welkom');
    }

} 

Om te zorgen dat we niet teveel aanpassingen later dienen te maken heb ik de controller aangepast.

Er gaan nu 3 view's aangeroepen worden.

  • header
  • inhoud
  • footer

Hierdoor hoef je bij een aanpassing van de daarwerkelijke inhoud alleen view inhoud.php aan te passen.

En inderdaad gebruik ik geen php extensie bij de view's.

Codeigniter is slim genoeg om deze zelf te plaatsen


De controller welkom.php gaat er als volgt uitzien

  naar  
class Welkom extends CI_Controller {

    function index()
    {
        $this->load->view('header');
        $this->load->view('inhoud');
        $this->load->view('footer');
    }

} 

De view's

De view header.php gaat er als volgt uitzien

 
<html>
<head>
<title>Welkom bij Codeigniter</title>

<style type="text/css">
body {
 background-color: #fff;
 margin: 40px;
 font-family: Lucida Grande, Verdana, Sans-serif;
 font-size: 14px;
 color: #4F5155;
}
a {
 color: #003399;
 background-color: transparent;
 font-weight: normal;
}
h1 {
 color: #444;
 background-color: transparent;
 border-bottom: 1px solid #D0D0D0;
 font-size: 16px;
 font-weight: bold;
 margin: 24px 0 2px 0;
 padding: 5px 0 6px 0;
}
code {
 font-family: Monaco, Verdana, Sans-serif;
 font-size: 12px;
 background-color: #f9f9f9;
 border: 1px solid #D0D0D0;
 color: #002166;
 display: block;
 margin: 14px 0 14px 0;
 padding: 12px 10px 12px 10px;
}
</style>
</head>
<body>


Standaard dus.


De view inhoud.php gaat er als volgt uitzien

 

<h1>Welkom bij Codeigniter! - door van Wijhe Consultancy</h1>

<p>Als je deze pagina wilt aanpassen, ga dan naar:</p>
<code>system/application/views/welkom.php</code>

<p>De bijbehorende controller kun je vinden op:</p>
<code>system/application/controllers/welkom.php</code>

<p><br />Pagina rendering in 0.0312 seconden</p>


De view footer.php gaat er als volgt uitzien

 

</body>
</html>


Eigenlijk is de oude view in 3 stukken gehakt.

Alle aanpassingen zullen in inhoud.php plaatsvinden.


De model


We zullen eerst een model dienen te maken.

Standaard zijn er geen model aanwezig.

De model zal als naam model_vb.php krijgen

De basis opzet van alle models is wel gelijk.

De controller dient een verbinding met Codeigniter te krijgen.

Dat ziet als volgt uit


  Model_vb  
/*
    Model_vb
*/
class Model_vb extends CI_Model 
{ 


}   

Je mag elke naam eigenlijk kiezen.

Probeer hier wel enige logica in te houden.

Ik zelf laat altijd in de models's de naam model terug komen, ook hier.

Let op het hoofdletter gebruik in de class.

In de fysieke naam zie je dit niet weer.


We dienen Codeigniter nog wel te vertellen dat we gebruik gaan maken van een model.

Het is niet verplicht, maar wel zo handig.

in feite kan ik mij niet voorstellen dat je zonder een model werkt.

Het zou betekeken dat je het MVC model zou verlaten en er een VC model van zou maken.

Over verarming gesproken.


Verander het volgende in de file autoload.php

Deze hebben we hierboven al eens gebruikt.


Verander het volgende

  van  
$autoload['model'] = array();  

  van  
$autoload['model'] = array('Model_vb');

We kunnen nu veilig de de model class Model_vb gebruiken en overal inzetten.


De aanpassing aan het model

Eerst de aanpassing aan het model.


   
/*
    Model_vb
*/
class Model_vb extends CI_Model 
{ 

    /*
        alle_records
    */
    function alle_records()
    {
        $this->db->select(array('Code', 
                                'Name', 
                                'Continent', 
                                'Region'));        
        
        $this->db->orderby('Name', 'asc');        
         
        $query = $this->db->get('country');
         
        return $query->result_object();    
    }
    //-----/alle_records


Je ziet dat er een functie is bijgekomen, namenlijk alle_records()

Aan de kleur codering en de accolades zie je waar deze begint en stopt.


Aan elke functie kun je variabelen meegeven.

Deze plaats je tussen de accolades.

Aangezien we geen variabelen op dit moment willen gebruiken en alle records willen zien, hoeven we nu niets tussen de accolades te plaatsen.


De volgende regel begint met   $this->

Dit is om binnen de gecreerde werkruimte binnen PHP de gegevens beschikbaar te maken en houden.


De code   $this->db   geeft aan dat we met de ter beschikkeng gestelde class db werken.

En ja, deze verzorgt de interactie met de database.

( Zie hiervoor bv. http://codeigniter.vanwijhecons.nl/gebruikers_gids/database/active_record.html )

Deze regel zegt ons dat we de volgende velden willen selecteren:

  • Code
  • Name
  • Continent
  • Region

Het woord   array   geeft aan dat we resultaten kunnen verwachten in een array.


De volgende regel laat een sortering plaats vinden op het record   Name   en wel Ascending (   asc   )


De hierop volgende regel laat zoeken in de tabel   country   en wijst de vraag toe aan de variable   $query.


De laatste regel laat deze query uitvoeren en als uitvoer terug geven.


En hoe nu verder?


De volgende stap is deze uitvoer te koppelen aan onze controller welkom.php om deze de gegevens te laten doorgeven aan de view.

De cirkel is dan rond.


In logico opbouw hebben we dan het volgende gedaan:

  1. De controller welkom.php wordt aangeroepen
  2. Deze haalt gegevens op van de model model_vb.php middels de functie   alle_records()
  3. Vervolgens worde deze deze gegvens aan de view inhoud.php doorgegeven.

Het doorgegeven van de gegevens aan de view via de controller.

Hiertoe passen we de controller welkom.php aan


Verander het volgende:


  welkom.php  
class Welkom extends CI_Controller {

    function index()
    {
        $data['landen']    =    $this->Model_vb->alle_records();
        
        $this->load->view('header');
        $this->load->view('inhoud', $data);
        $this->load->view('footer');
    }

}


De aanpassingen zitten in het toewijzen van gegevens aan de variabele   $data['landen'

en aan het meesturen van deze data met de view inhoud $this->load->view('inhoud'$data);


De eerste aanpassing is nodig om in het script de gegevens beschikbaar te krijgen.

De geneste array structuur   $data[]   wordt hiervoor gebruikt.

In dit geval wordt de sub array   $data['landen']   hier voor gebruikt.


De tweede aanpassing is het toewijzen van gegevens aan een view

Hiertoe wordt de geneste array   $data   toegewezen aan de view inhoud.php

Zo kun je aan elke view gegevens mee geven.


Tevens zie je hoe de controller de spin in het web wordt.

Gegevens worden toegewezen aan variabelen en deze variabelen worden verder toegewezen aan views


De aanpassing aan de view


De view inhoud.php wordt volledig aangepast.

Alleen de gegevens vanuit de database wil ik hier zichtbaar hebben.


Verander het volgende:


  inhoud.php  
echo '<table>'."\n"  ;

foreach($landen as $rij)
{
    echo '<tr>'."\n" ;
    echo '<td>' ;    
    echo $rij->Code ;
    echo '</td>'."\n" ;    
    echo '<td>' ;    
    echo $rij->Name ;
    echo '</td>'."\n" ;    
    echo '<td>' ;    
    echo $rij->Continent ;
    echo '</td>'."\n" ;    
    echo '<td>' ;    
    echo $rij->Region ;    
    echo '</td>'."\n" ;    
    echo '</tr>'."\n" ;    
}

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


Je ziet hier een tabel onstaan uit de array   $landen

Deze wordt eerst in rijen omgezet   $rij

waarna deze per rij verder wordt weergegeven.


En in de browser


Zou je zoiets als volgende dienen te krijgen.



AFG Afghanistan Asia Southern and Central Asia
ALB Albania Europe Southern Europe
DZA Algeria Africa Northern Africa
ASM American Samoa Oceania Polynesia
AND Andorra Europe Southern Europe
AGO Angola Africa Central Africa
AIA Anguilla North America Caribbean
ATA Antarctica Antarctica Antarctica
ATG Antigua and Barbuda North America Caribbean
ARG Argentina South America South America
ARM Armenia Asia Middle East
ABW Aruba North America Caribbean
AUS Australia Oceania Australia and New Zealand


Tot slot


Codeigniter heeft nu een verbinding met een database.


Probeer het uit, zou ik zeggen.


Het volgende artikel zal gaan over het aanpassen van gegeven in de database.



Veel programmeer plezier ermee.


Tot ziens,


Ubel Jan van Wijhe


van Wijhe Consultancy

E-mail naar info@vanwijhecons.nl