un simple select avec Code Igniter

un simple select avec Code Igniter

sommaire :

  1. Le chargement automatique de libraire avec Code igniter
  2. Notre premier sélect avec l’objet DB
  3. Du Modèle à la Vue en passant par le Contrôleur
 

Code igniter possède une librairie qui permet de manipuler les bases de données assez facilement.
Dans cet article nous allons voir comment utiliser cette librairie.

Les préparatifs

Pour illustrer cet article, nous allons créer un site très simple pour une école (avec l’utilisation de Code Igniter).


Comme nous allons manipuler une base de données, je vous invite à créer une base de données école et à exécuter ce script sql. (La structure et les données sont toutes prêtes :) )


Configuration de Code Igniter pour la connexion à la BDD


Pour configurer la connexion de la base de données, il faut modifier le fichier database.php.
Pour le trouver, suivez le fil d’ariane ci-dessous:

ecole -> system -> application -> config -> database.php

code igniter

code igniter



ecole : notre racine
systeme : Code Igniter
application : le site web
config : le dossier de configuration


database.php : le fichier de configuration pour la connexion à la base de données











La configuration du fichier est très intuitive. Voilà, ce que j’ai mis :

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


Le chargement automatique de librairie avec Code igniter



On peut définir les librairies qui vont se charger automatiquement dans nos contrôleurs et vues.
Pour ceci, il faut se tourner vers le fichier autoload.php qui se trouve dans le dossier config.

ecole -> system -> application -> config -> autoload.php

Dans notre exemple, pour manipuler la base de données nous allons nous servir de la librairie database.

$autoload['libraries'] = array('database');

C’est pratique quand on est feignant comme moi :) .

Si la connexion se passe bien, dans la page d’accueil (pour ma part http://localhost/ecole/) vous devriez voir apparaître:

code igniter

Si vous voyez un message d’erreur « A Database Error Occurred Unable to connect to your database server using the provided settings. » comme ceci :

code igniter

C’est que la connexion s’est mal passée.
Il faut que vous vérifiez vos identifiants de connexion, ainsi que le bon fonctionnement de votre serveur de base de données (mysql, postgres …)

Notre premier select avec l’objet DB



Comme nous travaillons dans un environnement MVC, on va traiter nos requêtes dans la partie : Modèle.
Dans le framework Code Igniter, il faut se positionner dans le dossier models et créer un fichier ecoleMod.php
Si vous êtes perdus dans tous ces dossiers, suivez le guide juste en dessous :p

ecole -> system -> application -> models -> ecoleMod.php

Voici la structure type que nous allons adopter pour ecoleMod.php

class ecoleMod extends Model {
    public function __construct()
    {
        parent::__construct();
    }
    //notre fonction
    public function getEnfant()
    {
    }
}

Pour compliquer notre travail, dans un premier temps nous allons faire appel à notre modèle ecoleMod situé dans le contrôleur par défaut : welcome.php.

ecole -> system -> application -> controllers -> welcome.php

Dans index, il suffit de mettre :

function index()
	{
		$this->load->model('ecoleMod');
		$this->ecoleMod->getEnfant();
         }

Pour accéder à notre contrôleur, il suffit d’aller sur http://localhost/ecole.

Voilà, nous pouvons commencer :)



Pour manipuler la base de données, nous allons utiliser un objet très complet : db. De plus, nous allons voir ensemble les principales méthodes. Attention c’est très compliqué (non je plaisante :p)

Notre première requête

Nous allons faire une fonction qui renvoie la liste d’élève de notre classe.

Il y a 2 méthodes que l’on peut utiliser:

1 – Méthode passe partout.

2 – Méthode propre à la commande SELECT du SQL, qui peut être appliquée selon deux méthodes distinctes.

- Ma méthode passe partout query
La méthode query permet d’exécuter toutes les requêtes. Voici la syntaxe :
$this->db->query(Larequete);
Pour nous cela sera :

$oEleve = $this->db->query('SELECT id, nom, prenom FROM eleve');

- La méthode get propre aux requêtes SELECT.

Si elle n’a pas de restrictions, cette méthode réclame qu’un seul paramètre : le nom de la table
$oEleve=$this->db->get(‘NOM_DE_LA_TABLE‘);
Pour récupérer les élèves, cela donne :

$oEleve=$this->db->get('eleve');

Il est préférable d’utiliser cette commande, parce qu’elle permet de construire les requêtes plus
proprement. Aussi cela peut faciliter la relecture du code.:)


$oEleve, qu’es ce que c’est ?

C’est un objet où sont stockées les informations que la requête renvoie. Si vous avez une base de données mysql, vous aurez un objet du type CI_DB_mysql_result.

result_array();

Pour récupérer les informations de cet objet, nous allons faire appel à la méthode result_array(). Elle renvoie le résultat de la requête sous forme de tableau.

$oEleve=$this->db->get('eleve');
echo "<pre>";
var_dump($oEleve->result_array());
echo "</pre>";

Voici un extrait de résultats que renvoie result_array().

code igniter

code igniter

result();

Un autre méthode intéressante à voir : result().Elle renvoie le résultat de la requête sous forme de stdclass.

stdclass est une classe native de PHP. On peux affecter toutes sortes de propriété à cette classe passe partout. Pratique :)

Pour notre exemple, pour récupérer les données vous pouvez utiliser cette boucle :

foreach ($oEleve->result() as $row)
{
	echo $row->id;
	echo $row->nom;
	echo $row->prenom;
}



Au final la fonction getEnfant de notre modèle ecoleMod va donner :

    public function getEnfant()
    {
    	$oEleve=$this->db->get('eleve');
    	return $oEleve->result();
    }



Vous voyez le code est vraiment compliqué ! :P

Du Modèle à la Vue en passant par le Contrôleur



C’est là que nous allons nous motiver pour respecter une structure propre avec Code Igniter.

Nous allons créer notre contrôleur ecoleCtrl dans ce chemin :

ecole -> system -> application -> controllers -> welcome.php

Voici la structure de notre contrôleur :

class ecoleCtr extends Controller {
    public function __construct()
    {
        parent::__construct();
    }
    public function listeEleve()
    {
    }
}



Attaquons nous à notre fonction listeEleve().
Déjà il faut inclure notre modèle ecoleMod : $this->load->model(‘ecoleMod’);
Nous allons faire appel à notre méthode getEnfant() avec :
$aData['aEleve'] = $this->ecoleMod->getEnfant();

Voici notre belle fonction listeEleve

    public function listeEleve()
    {
    	$this->load->model('ecoleMod');
	$aData['aEleve'] = $this->ecoleMod->getEnfant();
    }



Voici le lien de notre contrôleur ; http://localhost/ecole/index.php/ecoleCtr/listeEleve.

La vue

On va pouvoir finaliser les traîtements de nos élèves en les affichant dans notre vue listeEleve.php :)

ecole -> system -> application -> views-> listeEleve.php

Voici l’arborescence que vous devriez avoir.

code igniter

code igniter

Nous allons pouvoir traiter notre vue. Il n’y a rien de nouveau ça reste traditionnel.

<html>
<body>
<h1>Bienvenue</h1>
<table>
<tr><th>Id</th><th>Nom</th><th>Prenom</th></tr>
<?php  foreach ($aEleve as $oEleve):	?>
<tr>
	<td><?=$oEleve->id?></td>
	<td><?=$oEleve->nom?></td>
	<td><?=$oEleve->prenom?></td>
</tr>
<?php endforeach;?>
</table>
</body>
</html>

Ce qui va donner :

eh voila le chef d'oeuvre !

eh voila le chef d'oeuvre !

A travers toutes ces étapes on a pu voir les principales fonctions qui servent à récupérer les infomations de la base de données. Voici le pack qui continent tout le code source du site ecole.

Note de l'article




1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, moyenne: 4,00 max : 5)
Loading ... Loading ...

  1. Shimura Says:

    Bonjour,

    Très bon, tutoriel, une question lors de l’affichage du tableau, page blanche, rien de s’affiche.

    Thank you !

  2. roul Says:

    Salut,

    Merci pour ta remarque.
    En fait il faut simplement faire un var_dump. En faisant :

    echo « <pre> »;
    var_dump($oEleve->result_array());
    echo « </pre> »;

    J’ai apporté la correction sur le tutoriel.

  3. Alexandre Says:

    Bonjour,

    J’aime beaucoup ce tutoriel cependant l’utilisation du short tag <?= n’est pas forcément conseillé. il est préférable d’utiliser <?php echo
    Bonne soirée

  4. Guillaume Says:

    sympa ton tuto, par contre il faudrait revoir ton orthographe :)

  5. imen Says:

    bjr,
    Merci bqqqqqqqq pour ce tutoriel, je le trouve trop utile (^.^)
    mias comm remarque je partage l’avis d’Alexandre, car ca pas marché avec <?=

    donc pour ListeEleve

    Bienvenue

    IdNomPrenom

    id ?>
    nom ?>
    prenom ?>

  6. imen Says:

    pour ListeEleve

    id ?>
    nom ?>
    prenom ?>

  7. Darin Says:

    Hum j’ai essayer d’appliquer le tuto avec ma base de donnée mais j’ai une erreur :

    Parse error: syntax error, unexpected T_RETURN in /home/manikkam/public_html/T3/CodeIgniter/system/application/models/typemod.php on line 14

    ligne 14 :
    return $AllType->result();

    Qqun pourrait m’aider a cerner le probleme ?

  8. cms Says:

    pour voir s’afficher les données, remplacer la vue par :

    Bienvenue

    IdNomPrenom

    id ?>
    nom ?>
    prenom ?>

  9. cms Says:

    oups, les message a été coupé…
    remplacer dans la vue
    les id?>
    par id ?>

  10. Maxime Says:

    Bonjour,

    j’ai téléchargé les sources et j’ai tout qui marche mais quand je vais la :

    http://ks355277.kimsufi.com/~company/ecole/index.php/ecoleCtr/listeEleve

    j’ai ce message :

    An Error Was Encountered
    Unable to locate the model you have specified: ecolemod

    ??

    Merci de votre réponse

Donner votre avis :