
<?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; code propre</title>
	<atom:link href="http://www.waanser.com/tag/code-propre/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>10</slash:comments>
		</item>
		<item>
		<title>tutoriel PhpDocumentor</title>
		<link>http://www.waanser.com/php/general-php/665-tutoriel-phpdocumentor.html</link>
		<comments>http://www.waanser.com/php/general-php/665-tutoriel-phpdocumentor.html#comments</comments>
		<pubDate>Fri, 30 Jan 2009 18:10:50 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[code propre]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=665</guid>
		<description><![CDATA[PhpDocumentor est une application qui sert à générer automatiquement une documentation php à partir des commentaires du code source. Nous allons apprendre à l&#8217;utiliser. Installation rapide de PhpDocumentor : Vous l&#8217;aurez deviné, il faut tout d&#8217;abord le télécharger C&#8217;est par ici. Une fois décompressé vous allez mettre votre dossier PhpDocumentor dans la racine de votre [...]]]></description>
			<content:encoded><![CDATA[<p>PhpDocumentor est une application qui sert à générer automatiquement une documentation php à partir des commentaires du code source. Nous allons apprendre à l&#8217;utiliser.<br />
<span id="more-665"></span></p>
<h2>Installation rapide de PhpDocumentor : </h2>
<p>Vous l&#8217;aurez deviné, il faut tout d&#8217;abord le télécharger <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  C&#8217;est par <a href='http://phpdoc.org/downloads.php'>ici</a>.</p>
<div id="attachment_668" class="wp-caption alignnone" style="width: 459px"><a href="http://media.waanser.com/2009/01/phpdocumentator.png"><img src="http://media.waanser.com/2009/01/phpdocumentator.png" alt="php documentator" title="phpdocumentator" width="449" height="108" class="size-full wp-image-668" /></a><p class="wp-caption-text">php documentator</p></div>
<p>Une fois décompressé vous allez mettre votre dossier PhpDocumentor dans la racine de votre dossier <strong>www</strong>.</p>
<p>Bravo vous avez installé PhpDocumentor <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Comme vous l&#8217;imagez PhpDocumentor met un certain temps pour générer toute la documentation d&#8217;une application php. Et apache par défaut limite le traitement du script php à 30 secondes. Ce qui bien évidement ne suffit pas pour faire tourner PhpDocumentor. Pour pallier ce problème il suffit de modifier fichier php.ini :</p>
<p>max_execution_time = 0;<br />
max_input_time = 0;</p>
<p>Comme ça on est tranquille il n&#8217;y a plus de limite <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Configuration de PhpDocumentator</h2>
<p>Il faut se rendre sur cette <a href='http://localhost/PhpDocumentor/docbuilder/'>adresse</a> pour arriver la page d&#8217;administration de PhpDocumentor.</p>
<p>En haut à gauche vous allez voir ce menu :</p>
<div id="attachment_674" class="wp-caption alignnone" style="width: 556px"><a href="http://media.waanser.com/2009/01/phpdocumentator1.png"><img src="http://media.waanser.com/2009/01/phpdocumentator1.png" alt="PhpDocumentor" title="phpdocumentor" width="546" height="80" class="size-full wp-image-674" /></a><p class="wp-caption-text">PhpDocumentator</p></div>
<p>C&#8217;est l&#8217;onglet <strong>Files</strong> qui va nous intéresser.</p>
<p><strong>Directory to parse</strong> : C&#8217;est le chemin du dossier où se situe votre application php (celui que phpDocumentor va traiter)</p>
<p><strong>Files to ignore</strong> : On doit indiquer les types de fichier à ne pas traiter (ex : *.png, *.jpg, *.css)</p>
<p>Passons maintenant à l&#8217;onglet <strong>Output</strong>.</p>
<p><strong>Target</strong>  : Nous allons indiquer l&#8217;adresse où notre documentation va être générée ( ex: C:wampwwwdoc)</p>
<p><strong>Output Format</strong> : C&#8217;est la forme que prendra votre doc (vous aurez le choix entre du xml , html ou pdf)</p>
<p>La dernière modification sera dans l&#8217;onglet Options.</p>
<p><strong>Generated Documentation Title</strong> : C&#8217;est le nom de votre documentation.</p>
<h2>Génération de la documentation</h2>
<p>La c&#8217;est le plus simple on a juste à cliquer sur un bouton :</p>
<div id="attachment_685" class="wp-caption alignnone" style="width: 160px"><a href="http://media.waanser.com/2009/01/documentor.png"><img src="http://media.waanser.com/2009/01/documentor.png" alt="php documentor" title="documentor" width="150" height="37" class="size-full wp-image-685" /></a><p class="wp-caption-text">php documentor</p></div>
<p>La il faut attendre un peu que le script se génère. La durée est relative à la taille de votre application.</p>
<p>Si vous voyez ça, c&#8217;est que votre doc est bien généré :</p>
<div id="attachment_687" class="wp-caption alignnone" style="width: 304px"><a href="http://media.waanser.com/2009/01/phpdocumentator2.png"><img src="http://media.waanser.com/2009/01/phpdocumentator2.png" alt="PhpDocumentor" title="phpdocumentator2" width="294" height="108" class="size-full wp-image-687" /></a><p class="wp-caption-text">PhpDocumentor</p></div>
<p>Oui, ma doc est bien formée, mais j&#8217;ai pratiquement pas d&#8217;information dessus.<br />
<strong>Mais comment cela se fait-il Roul ???  <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p>Si vous avez une documentation appauvrie, c&#8217;est que vous avez mal commenté vos fonctions dans votre code source php.</p>
<p>Voici un exemple qui devrait faire une documentation assez complète : </p>
<pre class="brush: php">
/**
 * @author Roul
 * @access public
 * @param float $fNombre
 * @todo double le nombre entré en paramètre
 * @return float
 */

 public function double(float $fNombre)
 {
 	return $fNombre*2;
 }
</pre>
<p>Si vous voulez plus d&#8217;indications sur le formatage des commentaires je vous conseille de lire <a href='http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html'> ceci </a> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/general-php/665-tutoriel-phpdocumentor.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

