
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Waanser &#187; BDD</title>
	<atom:link href="http://www.waanser.com/tag/bdd/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>un simple select avec Code Igniter</title>
		<link>http://www.waanser.com/php/framework/1080-un-simple-select-avec-code-igniter.html</link>
		<comments>http://www.waanser.com/php/framework/1080-un-simple-select-avec-code-igniter.html#comments</comments>
		<pubDate>Tue, 17 Mar 2009 11:19:30 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[code propre]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1080</guid>
		<description><![CDATA[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&#8217;utilisation de Code Igniter). Comme nous allons manipuler une base de données, je [...]]]></description>
			<content:encoded><![CDATA[<p>Code igniter possède une librairie qui permet de manipuler les bases de données assez facilement.<br />
Dans cet article nous allons voir comment utiliser cette librairie.</p>
<h2>Les préparatifs</h2>
<p>Pour illustrer cet article, nous allons créer un site très simple pour une école (avec l&#8217;utilisation de Code Igniter).<br />
<br/><br />
Comme nous allons manipuler une base de données, je vous invite à créer une base de données école et à exécuter ce <a href='http://media.waanser.com/2009/03/ecole.sql'>script sql</a>. (La structure et les données sont toutes prêtes <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
<br/><br />
<strong><u>Configuration de Code Igniter pour la connexion à la BDD</u></strong><br />
<br/><br />
Pour configurer la connexion de la base de données, il faut modifier le fichier database.php.<br />
Pour le trouver, suivez le fil d&#8217;ariane ci-dessous:</p>
<p>ecole -> system -> application -> config -> database.php</p>
<div id="attachment_1086" class="wp-caption alignleft" style="width: 239px"><a href="http://media.waanser.com/2009/03/code_igniter.png"><img src="http://media.waanser.com/2009/03/code_igniter.png" alt="code igniter" title="code_igniter" width="229" height="269" class="size-full wp-image-1086" /></a><p class="wp-caption-text">code igniter</p></div>
<p><br/><br />
 	<strong>ecole </strong>: notre racine<br />
 	<strong>systeme </strong>: Code Igniter<br />
	<strong>application </strong>: le site web<br />
	<strong>config </strong>: le dossier de configuration<br />
<br/><br />
	<strong>database.php</strong> : le fichier de configuration pour la connexion à la base de données</li>
<p><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/></p>
<p>La configuration du fichier est très intuitive. Voilà, ce que j&#8217;ai mis :</p>
<pre class="brush: php">
$db[&#039;default&#039;][&#039;hostname&#039;] = &quot;localhost&quot;;
$db[&#039;default&#039;][&#039;username&#039;] = &quot;root&quot;;
$db[&#039;default&#039;][&#039;password&#039;] = &quot;&quot;;
$db[&#039;default&#039;][&#039;database&#039;] = &quot;ecole&quot;;
$db[&#039;default&#039;][&#039;dbdriver&#039;] = &quot;mysql&quot;;
</pre>
<p><br/></p>
<h2>Le chargement automatique de librairie avec Code igniter</h2>
<p><br/><br />
On peut définir les librairies qui vont se charger automatiquement dans nos contrôleurs et vues.<br />
Pour ceci, il faut se tourner vers le fichier autoload.php qui se trouve dans le dossier config.</p>
<p>ecole -> system -> application -> config -> autoload.php</p>
<p>Dans notre exemple, pour manipuler la base de données nous allons nous servir de la librairie <strong>database</strong>.</p>
<pre class="brush: php">
$autoload[&#039;libraries&#039;] = array(&#039;database&#039;);
</pre>
<p>C&#8217;est pratique quand on est feignant comme moi <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . </p>
<p>Si la connexion se passe bien, dans la page d&#8217;accueil (pour ma part <a href="http://localhost/ecole/">http://localhost/ecole/</a>) vous devriez voir apparaître: </p>
<p><a href="http://media.waanser.com/2009/03/code_igniter2.png"><img src="http://media.waanser.com/2009/03/code_igniter2.png" alt="code igniter" title="code_igniter2" class="alignnone size-full wp-image-1104" /></a></p>
<p>Si vous voyez un message d&#8217;erreur &laquo;&nbsp;<em>A Database Error Occurred Unable to connect to your database server using the provided settings.</em>&nbsp;&raquo; comme ceci :</p>
<p><a href="http://media.waanser.com/2009/03/code_igniter1.png"><img src="http://media.waanser.com/2009/03/code_igniter1.png" alt="code igniter" title="code_igniter1" class="alignnone size-full wp-image-1103" /></a></p>
<p>C&#8217;est que la connexion s&#8217;est mal passée.<br />
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 &#8230;)<br />
<br/></p>
<h2>Notre premier select avec l&#8217;objet DB</h2>
<p><br/><br />
Comme nous travaillons dans un environnement <strong>MVC</strong>, on va traiter nos requêtes dans la partie : <strong>Modèle</strong>.<br />
Dans le framework Code Igniter, il faut se positionner dans le dossier <strong>models </strong> et créer un fichier ecoleMod.php<br />
Si vous êtes perdus dans tous ces dossiers, suivez le guide juste en dessous :p</p>
<p>ecole -> system -> application -> models -> ecoleMod.php</p>
<p>Voici la structure type que nous allons adopter pour <strong>ecoleMod.php</strong><br />
<br/></p>
<pre class="brush: php">
class ecoleMod extends Model {
    public function __construct()
    {
        parent::__construct();
    }
    //notre fonction
    public function getEnfant()
    {
    }
}
</pre>
<p>Pour compliquer notre travail, dans un premier temps nous allons faire appel à notre modèle <strong>ecoleMod</strong> situé dans le contrôleur par défaut : <strong>welcome.php</strong>.</p>
<p>ecole -> system -> application -> controllers -> welcome.php</p>
<p>Dans index, il suffit de mettre :</p>
<pre class="brush: php">
function index()
	{
		$this-&gt;load-&gt;model(&#039;ecoleMod&#039;);
		$this-&gt;ecoleMod-&gt;getEnfant();
         }
</pre>
<p>Pour accéder à notre contrôleur, il suffit d&#8217;aller sur <a href="http://localhost/ecole">http://localhost/ecole</a>.</p>
<p>Voilà, nous pouvons commencer <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<br/><br/><br />
Pour manipuler la base de données, nous allons utiliser un objet très complet : <strong>db</strong>. De plus, nous allons voir ensemble les principales méthodes. Attention c&#8217;est très compliqué (<em>non je plaisante :p</em>)</p>
<p><strong><u>Notre première requête</u></strong></p>
<p>Nous allons faire une fonction qui renvoie la liste d&#8217;élève de notre classe.</p>
<p>Il y a 2 méthodes que l&#8217;on peut utiliser:</p>
<p>1 &#8211; Méthode passe partout. </p>
<p>2 &#8211; Méthode propre à la commande <strong>SELECT</strong> du <strong>SQL</strong>, qui peut être appliquée selon deux méthodes distinctes.<br/></p>
<p>- Ma méthode passe partout <strong>query</strong><br />
La méthode query permet d&#8217;exécuter toutes les requêtes. Voici la syntaxe :<br />
$this->db->query(Larequete);<br />
Pour nous cela sera :</p>
<pre class="brush: php">
$oEleve = $this-&gt;db-&gt;query(&#039;SELECT id, nom, prenom FROM eleve&#039;);
</pre>
<p>- La méthode <strong>get</strong> propre aux requêtes SELECT.</p>
<p>Si elle n&#8217;a pas de restrictions, cette méthode réclame qu&#8217;un seul paramètre : <u>le nom de la table</u><br />
$oEleve=$this->db->get(&#8216;<em>NOM_DE_LA_TABLE</em>&#8216;);<br />
Pour récupérer les élèves, cela donne :</p>
<pre class="brush: php">
$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
</pre>
<p>Il est préférable d&#8217;utiliser cette commande, parce qu&#8217;elle permet de construire les requêtes plus<br />
proprement. Aussi cela peut faciliter la relecture du code.:)<br />
<br/><br />
<em><strong>$oEleve</strong>, qu&#8217;es ce que c&#8217;est ?</em></p>
<p>C&#8217;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 <strong>CI_DB_mysql_result</strong>.</p>
<p><u><strong>result_array()</strong></u>;</p>
<p>Pour récupérer les informations de cet objet, nous allons faire appel à la méthode <strong>result_array()</strong>. Elle renvoie le résultat de la requête sous forme de tableau.</p>
<pre class="brush: php">
$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
echo &quot;&lt;pre&gt;&quot;;
var_dump($oEleve-&gt;result_array());
echo &quot;&lt;/pre&gt;&quot;;
</pre>
<p>Voici un extrait de résultats que renvoie <strong>result_array()</strong>.</p>
<div id="attachment_1142" class="wp-caption alignnone" style="width: 215px"><a href="http://media.waanser.com/2009/03/code_igniter3.png"><img src="http://media.waanser.com/2009/03/code_igniter3.png" alt="code igniter" title="code_igniter3" width="205" height="308" class="size-full wp-image-1142" /></a><p class="wp-caption-text">code igniter</p></div>
<p><u><strong>result()</strong></u>;</p>
<p>Un autre méthode intéressante à voir : <strong>result()</strong>.Elle renvoie le résultat de la requête sous forme de <strong>stdclass</strong>.</p>
<p> <strong>stdclass</strong> est une classe native de PHP. On peux affecter toutes sortes de propriété à cette classe passe partout. Pratique <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour notre exemple, pour récupérer les données vous pouvez utiliser cette boucle :</p>
<pre class="brush: php">
foreach ($oEleve-&gt;result() as $row)
{
	echo $row-&gt;id;
	echo $row-&gt;nom;
	echo $row-&gt;prenom;
}
</pre>
<p><br/><br />
Au final la fonction <strong>getEnfant</strong> de notre modèle <strong>ecoleMod</strong> va donner :</p>
<pre class="brush: php">
    public function getEnfant()
    {
    	$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
    	return $oEleve-&gt;result();
    }
</pre>
<p><br/><br />
Vous voyez le code est vraiment compliqué ! <img src='http://www.waanser.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
<br/></p>
<h2>Du Modèle à la Vue en passant par le Contrôleur</h2>
<p><br/><br />
C&#8217;est là que nous allons nous motiver pour respecter une structure propre avec Code Igniter.</p>
<p>Nous allons créer notre contrôleur <strong>ecoleCtrl</strong> dans ce chemin :</p>
<p>ecole -> system -> application -> controllers -> welcome.php</p>
<p>Voici la structure de notre contrôleur :</p>
<pre class="brush: php">
class ecoleCtr extends Controller {
    public function __construct()
    {
        parent::__construct();
    }
    public function listeEleve()
    {
    }
}
</pre>
<p><br/><br />
Attaquons nous à notre fonction <strong>listeEleve()</strong>.<br />
Déjà il faut inclure notre modèle <strong>ecoleMod </strong> : $this-&gt;load-&gt;model(&#8216;ecoleMod&#8217;);<br />
Nous allons faire appel à notre méthode <strong>getEnfant()</strong> avec :<br />
$aData['aEleve'] = $this-&gt;ecoleMod-&gt;getEnfant();</p>
<p>Voici notre belle fonction <strong>listeEleve</strong></p>
<pre class="brush: php">
    public function listeEleve()
    {
    	$this-&gt;load-&gt;model(&#039;ecoleMod&#039;);
	$aData[&#039;aEleve&#039;] = $this-&gt;ecoleMod-&gt;getEnfant();
    }
</pre>
<p><br/><br />
Voici le lien de notre contrôleur ; <a href='http://localhost/ecole/index.php/ecoleCtr/listeEleve'>http://localhost/ecole/index.php/ecoleCtr/listeEleve</a>.</p>
<p><strong><u>La vue</u></strong></p>
<p>On va pouvoir finaliser les traîtements de nos élèves en les affichant dans notre vue<strong> listeEleve.php	</strong> <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ecole -> system -> application -> views-> listeEleve.php</p>
<p>Voici l&#8217;arborescence que vous devriez avoir.</p>
<div id="attachment_1165" class="wp-caption alignnone" style="width: 351px"><a href="http://media.waanser.com/2009/03/code_igniter4.png"><img src="http://media.waanser.com/2009/03/code_igniter4.png" alt="code igniter" title="code_igniter4" width="341" height="373" class="size-full wp-image-1165" /></a><p class="wp-caption-text">code igniter</p></div>
<p>Nous allons pouvoir traiter notre vue. Il n&#8217;y a rien de nouveau ça reste traditionnel.</p>
<pre class="brush: html">
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;Bienvenue&lt;/h1&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Id&lt;/th&gt;&lt;th&gt;Nom&lt;/th&gt;&lt;th&gt;Prenom&lt;/th&gt;&lt;/tr&gt;
&lt;?php  foreach ($aEleve as $oEleve):	?&gt;
&lt;tr&gt;
	&lt;td&gt;&lt;?=$oEleve-&gt;id?&gt;&lt;/td&gt;
	&lt;td&gt;&lt;?=$oEleve-&gt;nom?&gt;&lt;/td&gt;
	&lt;td&gt;&lt;?=$oEleve-&gt;prenom?&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;?php endforeach;?&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Ce qui va donner :</p>
<div id="attachment_1168" class="wp-caption alignnone" style="width: 180px"><a href="http://media.waanser.com/2009/03/code_igniter5.png"><img src="http://media.waanser.com/2009/03/code_igniter5.png" alt="eh voila le chef d&#039;oeuvre !" title="code_igniter5" width="170" height="226" class="size-full wp-image-1168" /></a><p class="wp-caption-text">eh voila le chef d'oeuvre !</p></div>
<p>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 <a href='http://media.waanser.com/2009/03/ecole_ci.rar'>pack</a> qui continent tout le code source du site ecole.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/1080-un-simple-select-avec-code-igniter.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
