<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Blogs - Dendrite</title>
		<link>https://www.developpez.net/forums/blogs/244172-dendrite/</link>
		<description>Developpez.com, le Club des Développeurs et IT Pro</description>
		<language>fr</language>
		<lastBuildDate>Wed, 08 Apr 2026 17:54:23 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.jpg</url>
			<title>Forum du club des développeurs et IT Pro - Blogs - Dendrite</title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/</link>
		</image>
		<item>
			<title><![CDATA[PHP DateTime : exploiter une date à un mois d'intervalle...]]></title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b9873/php-datetime-exploiter-date-mois-d-intervalle/</link>
			<pubDate>Sun, 01 Nov 2020 14:03:40 GMT</pubDate>
			<description>Bonjour, 
 
Avec DateTime, on...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Bonjour,<br />
<br />
Avec DateTime, on se dit que c'est d'une facilité déconcertante.<br />
Eh bien pas tant que ça.<br />
Car si je vous dis le 14 juillet, &quot;Je vous livre vos courses dans un mois pile&quot;, vous m'attendrez de pied ferme le 14 août.<br />
Tandis que si je vous dis le 30 septembre, &quot;Je vous livre vos courses dans un mois pile&quot;, vous n'aurez aucun moyen de savoir si cela veut dire &quot;je vous les livre le 30 octobre, ou le 31 octobre&quot;... les deux sont justes.<br />
<br />
Pourquoi cela a-t-il sa petite importance ?<br />
<br />
<b>Car si vous tentez de soustraire un mois au 31/10, DateTime va soustraire 30 jours, et vous renvoyer le 1er octobre, tandis que vous attendiez le 30/09, de façon intuitive.</b><br />
Voici donc par quel moyen contourner le problème, quelle que soit la date en paramètre.<br />
<br />
<font size="4">Calculer la date du mois précédent</font><br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #0000ff;">function</span> return_one_month_earlier<span class="br0">&#40;</span><span style="color: #339933;">$cur_day</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span>
<span style="color: black;">  <span style="color: #339933;">$given_day</span>= <span style="color: #0000ff;">new</span> DateTime<span class="br0">&#40;</span><span style="color: #339933;">$cur_day</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span style="color: #339933;">$given_day</span>-&gt;modify<span class="br0">&#40;</span><span style="color: #FF0000;">'last day of'</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span style="color: #339933;">$the_other_day</span> = <span style="color: #0000ff;">new</span> DateTime<span class="br0">&#40;</span><span style="color: #339933;">$cur_day</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #339933;">$given_day</span>==<span style="color: #339933;">$the_other_day</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span>
<span style="color: black;">    <span style="color: #339933;">$the_other_day</span>-&gt;modify<span class="br0">&#40;</span><span style="color: #FF0000;">'last day of -1 month'</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span class="br0">&#125;</span></span>
<span style="color: black;">  <span style="color: #0000ff;">else</span><span class="br0">&#123;</span></span>
<span style="color: black;">    <span style="color: #339933;">$the_other_day</span>-&gt;modify<span class="br0">&#40;</span><span style="color: #FF0000;">'-1 month'</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span class="br0">&#125;</span></span>
<span style="color: black;">  <span style="color: #0000ff;">return</span> <span style="color: #339933;">$the_other_day</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span>
<span style="color: black;"><span style="color: #339933;">$day</span>=<span style="color: #FF0000;">'2020-12-31'</span>;<span style="color: #808080;">//retournera '2020-11-30'</span></span>
<span style="color: black;"><span style="color: #339933;">$day</span>=<span style="color: #FF0000;">'1789-08-14'</span>;<span style="color: #808080;">//retournera '1789-07-14'</span></span>
<span style="color: black;"><span style="color: #339933;">$day</span>=<span style="color: #FF0000;">'2008-01-31'</span>;<span style="color: #808080;">//retournera '2007-12-31'</span></span>
<span style="color: black;"><span style="color: #339933;">$day</span>=<span style="color: #FF0000;">'2020-03-31'</span>;<span style="color: #808080;">//retournera '2020-02-29'</span></span>
<span style="color: black;"><span style="color: #0000ff;">echo</span> <span style="color: #339933;">$day</span>.<span style="color: #FF0000;">'&lt;br/&gt;'</span>;</span>
<span style="color: black;"><span style="color: #339933;">$one_month_ago</span> = return_one_month_earlier<span class="br0">&#40;</span><span style="color: #339933;">$day</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span style="color: #0000ff;">echo</span> <span style="color: #339933;">$one_month_ago</span>-&gt;format<span class="br0">&#40;</span><span style="color: #FF0000;">'Y-m-d'</span><span class="br0">&#41;</span>;</span></pre></td></tr></table></pre>
</div><br />
<b>Explications de la fonction ci-dessus</b> <br />
<br />
<ol class="decimal"><li style="">Le paramètre est un chaîne de caractères au format &quot;YYYY-MM-DD&quot;.</li><li style="">On va devoir créer 2 objets DateTime à partir de la même date (au départ).</li><li style="">Sur le premier objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$given_day</span>, on le transforme pour aller chercher le dernier jour du mois fourni. ('last_day_of')</li><li style="">Si le jour saisi (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$the_other_day</span>) est le dernier jour du mois saisi alors on va chercher le dernier jour du mois précédent.</li><li style="">Sinon alors on retire un mois</li><li style="">On retourne l'objet DateTime</li></ol><br />
<br />
<br />
<br />
<br />
<font size="4">Calculer la date du mois suivant</font><br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #0000ff;">function</span> return_one_month_later<span class="br0">&#40;</span><span style="color: #339933;">$cur_day</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span>
<span style="color: black;">  <span style="color: #339933;">$given_day</span>= <span style="color: #0000ff;">new</span> DateTime<span class="br0">&#40;</span><span style="color: #339933;">$cur_day</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span style="color: #339933;">$given_day</span>-&gt;modify<span class="br0">&#40;</span><span style="color: #FF0000;">'last day of'</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span style="color: #339933;">$the_other_day</span> = <span style="color: #0000ff;">new</span> DateTime<span class="br0">&#40;</span><span style="color: #339933;">$cur_day</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #339933;">$given_day</span>==<span style="color: #339933;">$the_other_day</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span>
<span style="color: black;">    <span style="color: #339933;">$the_other_day</span>-&gt;modify<span class="br0">&#40;</span><span style="color: #FF0000;">'last day of next month'</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span class="br0">&#125;</span></span>
<span style="color: black;">  <span style="color: #0000ff;">else</span><span class="br0">&#123;</span></span>
<span style="color: black;">    <span style="color: #339933;">$the_other_day</span>-&gt;modify<span class="br0">&#40;</span><span style="color: #FF0000;">'+1 month'</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">  <span class="br0">&#125;</span></span>
<span style="color: black;">  <span style="color: #0000ff;">return</span> <span style="color: #339933;">$the_other_day</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span>
&nbsp;
<span style="color: black;"><span style="color: #808080;">//$day='2020-11-30';//retournera '2020-12-31'</span></span>
<span style="color: black;"><span style="color: #339933;">$day</span>=<span style="color: #FF0000;">'1789-07-14'</span>;<span style="color: #808080;">//retournera '1789-08-14'</span></span>
<span style="color: black;"><span style="color: #0000ff;">echo</span> <span style="color: #339933;">$day</span>.<span style="color: #FF0000;">'&lt;br/&gt;'</span>;</span>
<span style="color: black;"><span style="color: #339933;">$one_month_later</span> = return_one_month_later<span class="br0">&#40;</span><span style="color: #339933;">$day</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span style="color: #0000ff;">echo</span> <span style="color: #339933;">$one_month_later</span>-&gt;format<span class="br0">&#40;</span><span style="color: #FF0000;">'Y-m-d'</span><span class="br0">&#41;</span>;</span></pre></td></tr></table></pre>
</div><br />
<b>Explications de la fonction ci-dessus</b> <br />
<br />
<ol class="decimal"><li style="">Le paramètre est un chaîne de caractères au format &quot;YYYY-MM-DD&quot;.</li><li style="">On va devoir créer 2 objets DateTime à partir de la même date (au départ).</li><li style="">Sur le premier objet <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$given_day</span>, on le transforme pour aller chercher le dernier jour du mois fourni. ('last_day_of')</li><li style="">Si le jour saisi (<span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$the_other_day</span>) est le dernier jour du mois fourni alors on va chercher le dernier jour du mois suivant.</li><li style="">Sinon on ajoute un mois</li><li style="">On retourne l'objet DateTime</li></ol></blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b9873/php-datetime-exploiter-date-mois-d-intervalle/</guid>
		</item>
		<item>
			<title>my_memo : projet étape 2/3</title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b8052/my_memo-projet-etape-2-3/</link>
			<pubDate>Tue, 17 Sep 2019 18:58:31 GMT</pubDate>
			<description>Bonjour à toutes et à tous !...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">Bonjour à toutes et à tous !<br />
<br />
Petit rappel : Comment stocker des memos personnels dans une base ?<br />
Ca commence ici : par la modélisation en base<br />
<a href="https://www.developpez.net/forums/blogs/244172-dendrite/b7976/my_memo-projet-etape-1-3/" target="_blank">my_memo projet etape 1/3</a><br />
<br />
Et ça aboutit à ce schéma de la base de données :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p503841d1568741829/environnements-developpement/delphi/edi/kylix-j-fais-quoi-l-update-kylix-3/my_memo_db_scheme.jpg/" border="0" alt="Nom : my_memo_db_scheme.jpg
Affichages : 1648
Taille : 75,3 Ko"  style="float: CONFIG" /><br />
<br />
<font size="6">1) La base de données</font><br />
<br />
15 tables tout de même.<br />
<br />
<font size="4">A) Les 5 tables préfixées en a</font> sont remplies par moi, administratrice plénipotentiaire auto-proclamée démocratiquement :mrgreen:, et alimenterons des listes déroulantes.<br />
<br />
a_category_tag =&gt; Domicile, Famille, Finances, Loisirs, Santé, Travail, _Autre<br />
<br />
a_relative =&gt; nomenclature des liens que peuvent entretenir des personnes ou des animaux avec l'utilisateur, sera de plus en plus large sur suggestion sérieuse des utilisateurs<br />
<br />
a_class =&gt; Activité, Evénement, Fait, Mode de vie, Pensée, Projet, _Autre<br />
<br />
a_priority =&gt; Très important (10), Important (8), Assez important (6), Peu important (4), Sans grand intérêt (2)<br />
<br />
a_tempo =&gt; Futur, Passé, Permanent, Présent, Récurrent<br />
<br />
<font size="4">B) Les 3 tables indispensables</font> (inner join) pour constituer un memo<br />
<br />
cur_user<br />
cur_memo<br />
l_cur_memo_tag<br />
<br />
<font size="4">C) Les 7 tables optionnelles</font><br />
<br />
Si le memo convoque une <b>image</b> (une maxi par memo) alors 2 tables<br />
<br />
left join sur l_cur_memo_cur_image<br />
<div style="margin-left:40px">inner join sur cur_image</div><br />
Si le memo convoque une <b>personne ou un  animal</b> alors 3 tables<br />
<br />
left join sur cur_person (son identité)<br />
<div style="margin-left:40px">inner join sur a_relative =&gt; le type de lien entre cur_person et l'utilisateur</div><div style="margin-left:40px">inner join sur l_cur_memo_cur_person</div><br />
Si le memo convoque une <b>chose</b> alors 2 tables<br />
<br />
left join sur cur_thing (son identification)<br />
<div style="margin-left:40px">inner join sur l_cur_memo_cur_thing</div><br />
<font size="6">2) Choix de l'ergonomie pour la présentation des memos à l'utilisateur</font><br />
<br />
Prenons maintenant le problème par l'autre extrême, nous verrons les formulaires qui dialoguent avec la base en dernier, dans la partie 3.<br />
Comment présenter les infos principales de toute une vie, parfois longue, de manière simple et personnelle.<br />
Après réflexion, j'en suis venue à cette option : <br />
<br />
<a href="https://jqueryui.com/accordion/" target="_blank">https://jqueryui.com/accordion/</a><br />
<br />
L'utilisateur connecté arriverait sur les 7 catégories de tag fermées bien sûr.<br />
Et en ouvrant par exemple... santé, il trouverait tous ses memos liés à sa santé, dans l'ordre d'importance qu'il aura choisi auparavant.<br />
Avec le cas échéant les images, les choses ou les personnes concernées...<br />
<br />
Ajoutons à cela un moteur de recherche, au cas où l'approche par thématique ne soit pas la plus pratique pour tel memo...<br />
<br />
Et on a quelque chose qui devrait être bien pratique à l'arrivée.<br />
<br />
De plus, j'ai décidé que si l'utilisateur ne fait que se connecter pour consulter ses memos, cela me paraît plus propre de limiter les échanges avec la base de données. Autrement dit, le script exploite un fichier json pour permettre au navigateur client de fournir toute son ergonomie souple et claire. Nous verrons donc seulement à l'étape 3 comment, en cas d'écriture en base, re-générer le json.<br />
<br />
Comme je ne compte pas raconter ma vie privée ici, enfin, pas toute :zoubi:, je vais prendre pour exemple que je pourrai publier sans rougir la vie de quelqu'un que j'aime bien (via Wikipedia)... disons, Jodie Foster.<br />
<br />
<a href="https://fr.wikipedia.org/wiki/Jodie_Foster" target="_blank">Les grandes lignes de la vie de Jodie :heart:</a><br />
<br />
<font size="6">3) Développement de la vue finale memo.html pour Jodie Foster, et donc, sans connexion</font><br />
<br />
<br />
to be continued... :)</blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b8052/my_memo-projet-etape-2-3/</guid>
		</item>
		<item>
			<title>Filiation parentale et récursivité en MYSQL et PHP</title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b5651/filiation-parentale-recursivite-mysql-php/</link>
			<pubDate>Sun, 17 Jun 2018 12:33:56 GMT</pubDate>
			<description>1. Introduction 
2. SQL...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><ol class="decimal"><li style="">Introduction</li><li style="">SQL Comment organiser les données ?</li><li style="">SQL Quelle requête ?</li><li style="">PHP Comment produire une liste numérotée HTML ?</li></ol><br />
<br />
<font size="5">1) Introduction</font><br />
<br />
<font size="4">0, 1 ou 2 parents ?</font><br />
<br />
La généalogie est un bon exemple de <b>récursivité</b> pas artificiel du tout, puisqu'il s'appuie sur la biologie, ou en tout cas, sur la filiation parentale, qui n'a pas toujours à voir avec la filiation génétique.  La récursivité d'une arborescence hiérarchique comme <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">dossier / sous-dossier / sous-sous dossier / fichier</span> fonctionne sur 1 enfant qui appartient forcément à 1 et 1 seul parent, en dehors du noeud initial. Idem pour la récursivité de la hiérarchie d'une entreprise. Au contraire, dans le cas de la filiation parentale, un enfant hérite de 0, 1 ou 2 parents... car enfant de parent inconnu, ou enfant de parent solo, ou enfant de 2 parents...<br />
<br />
<font size="4">Où poser la récursivité ? dans le SQL ou dans le PHP ?</font><br />
<br />
Si notre technologie SQL est PostgreSQL ou DB2, on peut tout à fait organiser la <b>récursivité dès le SQL</b>, en faisant une vue par exemple qui utilise une requête récursive et je serais ravie que dans les commentaires, quelqu'un nous propose cette requête opérationnelle dans les 2 technologies, ou un lien vers un billet sur le sujet ! Car si SQL gère la récursivité, cela me paraît souhaitable de l'utiliser en priorité. Utiliser la puissance du SGBD au maximum, et ne traiter en PHP que ce qui n'est pas très bien traité par le SGBD me paraît une bonne pratique.<br />
<br />
Mais nous sommes en <b>MYSQL, qui ne gère pas les requêtes récursives</b> au jour où j'écris. Nous traiterons donc de la récursivité dans la fonction PHP finale.<br />
<br />
<font size="5">2) SQL Comment organiser les données ? </font><br />
<br />
Tous les individus tiennent sur une table, et 2 champs parent1 et parent2 (id de type numérique) qui peuvent donc être nuls, vont devoir, s'ils sont remplis, provenir obligatoirement d'un id de la présente table. On fait donc 2 clés étrangères en auto-jointure.<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p389247d1529239675/c-cpp/c/faire-calcules-temps-millisecondes/table.jpg/" border="0" alt="Nom : table.jpg
Affichages : 1008
Taille : 25,2 Ko"  style="float: CONFIG" /><br />
<br />
Je vous propose de créer la table geneal comme suit <br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span> <span style="color: #0000ff;">IF</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">EXISTS</span> <span style="color: #FF0000;">`geneal`</span> <span class="br0">&#40;</span>
  <span style="color: #FF0000;">`id`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">AUTO_INCREMENT</span>,
  <span style="color: #FF0000;">`genre`</span> enum<span class="br0">&#40;</span><span style="color: #FF0000;">'H'</span>,<span style="color: #FF0000;">'F'</span>,<span style="color: #FF0000;">'N'</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`nom_naissance`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`nom_usage`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`naissance`</span> <span style="color: #0000ff;">date</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`deces`</span> <span style="color: #0000ff;">date</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`parent_1`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`parent_2`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #0000ff;">PRIMARY</span> <span style="color: #0000ff;">KEY</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">UNIQUE</span> <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`unicite_1`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`nom_naissance`</span>,<span style="color: #FF0000;">`prenom`</span>,<span style="color: #FF0000;">`naissance`</span>,<span style="color: #FF0000;">`parent_1`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">UNIQUE</span> <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`unicite`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`nom_naissance`</span>,<span style="color: #FF0000;">`prenom`</span>,<span style="color: #FF0000;">`naissance`</span>,<span style="color: #FF0000;">`parent_2`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`genre`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`genre`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`prenom`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`prenom`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`deces`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`deces`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`parent_1`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`parent_1`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`parent_2`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`parent_2`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`nom_naissance`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`nom_naissance`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">USING</span> BTREE
<span class="br0">&#41;</span> <span style="color: #0000ff;">ENGINE</span>=InnoDB <span style="color: #0000ff;">AUTO_INCREMENT</span>=<span style="color: #cc66cc;">15</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">CHARSET</span>=utf8;
<span style="color: #0000ff;">ALTER</span> <span style="color: #0000ff;">TABLE</span> <span style="color: #FF0000;">`geneal`</span>
  <span style="color: #0000ff;">ADD</span> <span style="color: #0000ff;">CONSTRAINT</span> <span style="color: #FF0000;">`par1FK`</span> <span style="color: #0000ff;">FOREIGN</span> <span style="color: #0000ff;">KEY</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`parent_1`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">REFERENCES</span> <span style="color: #FF0000;">`geneal`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">ADD</span> <span style="color: #0000ff;">CONSTRAINT</span> <span style="color: #FF0000;">`par2FK`</span> <span style="color: #0000ff;">FOREIGN</span> <span style="color: #0000ff;">KEY</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`parent_2`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">REFERENCES</span> <span style="color: #FF0000;">`geneal`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
Dans cette table, nous saisirons les descendants de <b>Roland MARCI</b>, personnage de fiction de Plus Belle La Vie sur France 3.<br />
C'est un cas intéressant car cette famille a son lot de divorces, d'homo-parentalité, d'adoption, de famille recomposée... Toutes choses qu'on aimerait gérer.<br />
Et puis bon, j'aime bien Plus belle la vie, c'est ainsi. Il paraît d'ailleurs que l'actrice qui joue Blanche Marci regarde en cachette &quot;Demain nous appartient&quot; sur TF1. Je suis choquée ! :mouarf:<br />
Au passage, j'ai juste inventé une enfant supplémentaire à Roland, enfant décédée à 14 mois...<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> <span style="color: #FF0000;">`geneal`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span>, <span style="color: #FF0000;">`genre`</span>, <span style="color: #FF0000;">`nom_naissance`</span>, <span style="color: #FF0000;">`nom_usage`</span>, <span style="color: #FF0000;">`prenom`</span>, <span style="color: #FF0000;">`naissance`</span>, <span style="color: #FF0000;">`deces`</span>, <span style="color: #FF0000;">`parent_1`</span>, <span style="color: #FF0000;">`parent_2`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">VALUES</span>
<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Roland'</span>, <span style="color: #FF0000;">'1946-04-14'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'LENOIR'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Iris'</span>, <span style="color: #FF0000;">'1948-09-18'</span>, <span style="color: #FF0000;">'1980-12-14'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #FF0000;">'MARCI-RIVA'</span>, <span style="color: #FF0000;">'Thomas'</span>, <span style="color: #FF0000;">'1970-02-12'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">4</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'RIVA'</span>, <span style="color: #FF0000;">'MARCI-RIVA'</span>, <span style="color: #FF0000;">'Gabriel'</span>, <span style="color: #FF0000;">'1972-01-10'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'SIDIBE'</span>, <span style="color: #FF0000;">'MARCI-RIVA'</span>, <span style="color: #FF0000;">'Baptiste'</span>, <span style="color: #FF0000;">'1997-02-07'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">6</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'ALASSANE'</span>, <span style="color: #FF0000;">'MARCI-RIVA'</span>, <span style="color: #FF0000;">'Th&eacute;r&egrave;se'</span>, <span style="color: #FF0000;">'1999-03-30'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">7</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'JIMEZ'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Emma'</span>, <span style="color: #FF0000;">'1998-04-22'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">8</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'MARCI-JIMEZ'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Mathis'</span>, <span style="color: #FF0000;">'2018-01-07'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">5</span>, <span style="color: #cc66cc;">7</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">9</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'DUPONT'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #FF0000;">'Mireille'</span>, <span style="color: #FF0000;">'1947-05-12'</span>, <span style="color: #FF0000;">'1987-06-25'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">10</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'DUBOIS'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #FF0000;">'Blanche'</span>, <span style="color: #FF0000;">'1968-07-12'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #0000ff;">NULL</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">11</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Anne'</span>, <span style="color: #FF0000;">'1967-02-12'</span>, <span style="color: #FF0000;">'1968-04-12'</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">9</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">12</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Fran&ccedil;ois'</span>, <span style="color: #FF0000;">'1965-05-17'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">9</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">13</span>, <span style="color: #FF0000;">'H'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Lucas'</span>, <span style="color: #FF0000;">'1985-09-12'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">12</span>, <span style="color: #cc66cc;">10</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">14</span>, <span style="color: #FF0000;">'F'</span>, <span style="color: #FF0000;">'MARCI'</span>, <span style="color: #FF0000;">'REVEL'</span>, <span style="color: #FF0000;">'Johanna'</span>, <span style="color: #FF0000;">'1989-08-25'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #cc66cc;">12</span>, <span style="color: #cc66cc;">10</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
Ce qui nous donne<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p389246d1529239634/c-cpp/c/faire-calcules-temps-millisecondes/data2.jpg/" border="0" alt="Nom : data2.jpg
Affichages : 950
Taille : 108,7 Ko"  style="float: CONFIG" /><br />
<br />
<font size="5">3) SQL Quelle requête ?</font><br />
<br />
Nous parlons de la (relativement) simple requête qui permet de faire remonter le cas échéant <b>les enfants d'un seul parent</b> :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">select</span> id,
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>genre=<span style="color: #FF0000;">&quot;F&quot;</span>,<span style="color: #FF0000;">&quot;Mme&quot;</span>,<span style="color: #FF0000;">&quot;M&quot;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> civ,
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>nom_usage <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">NULL</span>,nom_naissance,concat<span class="br0">&#40;</span>nom_usage,<span style="color: #FF0000;">&quot; (&quot;</span>,nom_naissance,<span style="color: #FF0000;">&quot;)&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> nom,
prenom,
date_format<span class="br0">&#40;</span>naissance,<span style="color: #FF0000;">&quot;%d/%m/%Y&quot;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> naissance_fr,
<span style="color: #0000ff;">case</span>
  <span style="color: #0000ff;">when</span> deces <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">AND</span>  TIMESTAMPDIFF<span class="br0">&#40;</span>YEAR,naissance,CURRENT_DATE<span class="br0">&#41;</span>&gt;=<span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">then</span> concat<span class="br0">&#40;</span>TIMESTAMPDIFF<span class="br0">&#40;</span>YEAR,naissance,CURRENT_DATE<span class="br0">&#41;</span>,<span style="color: #FF0000;">&quot; ANS&quot;</span><span class="br0">&#41;</span>
  <span style="color: #0000ff;">when</span> deces <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">not</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">then</span> <span style="color: #0000ff;">NULL</span>
  <span style="color: #0000ff;">else</span> concat<span class="br0">&#40;</span> TIMESTAMPDIFF<span class="br0">&#40;</span>MONTH,naissance,CURRENT_DATE<span class="br0">&#41;</span>,<span style="color: #FF0000;">&quot; MOIS&quot;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">end</span> <span style="color: #0000ff;">as</span> age,
<span style="color: #0000ff;">case</span>
  <span style="color: #0000ff;">when</span> deces <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">AND</span> TIMESTAMPDIFF<span class="br0">&#40;</span>YEAR,naissance,deces<span class="br0">&#41;</span>&gt;=<span style="color: #cc66cc;">2</span> <span style="color: #0000ff;">then</span> concat<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;DCD LE &quot;</span>, date_format<span class="br0">&#40;</span>deces,<span style="color: #FF0000;">&quot;%d/%m/%Y&quot;</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">&quot; A &quot;</span>,TIMESTAMPDIFF<span class="br0">&#40;</span>YEAR,naissance,deces<span class="br0">&#41;</span>,<span style="color: #FF0000;">&quot; ANS&quot;</span><span class="br0">&#41;</span>
  <span style="color: #0000ff;">when</span> deces <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">then</span> <span style="color: #0000ff;">NULL</span>
  <span style="color: #0000ff;">else</span> concat<span class="br0">&#40;</span><span style="color: #FF0000;">&quot;DCD LE &quot;</span>, date_format<span class="br0">&#40;</span>deces,<span style="color: #FF0000;">&quot;%d/%m/%Y&quot;</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">&quot; A &quot;</span>, TIMESTAMPDIFF<span class="br0">&#40;</span>MONTH,naissance,deces<span class="br0">&#41;</span>,<span style="color: #FF0000;">&quot; MOIS&quot;</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">end</span> <span style="color: #0000ff;">as</span> deces_age
<span style="color: #0000ff;">from</span> geneal
<span style="color: #0000ff;">where</span> parent_1=? <span style="color: #0000ff;">OR</span> parent_2=?
<span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> naissance, prenom;</pre></td></tr></table></pre>
</div><br />
Qui nous retournera pour Roland Marci ses 2 enfants adultes et son enfant (ajoutée par moi) décédée en bas âge :<br />
<br />
<img src="https://www.developpez.net/forums/attachments/p389249d1529240900/c-cpp/c/faire-calcules-temps-millisecondes/enfants_marci.jpg/" border="0" alt="Nom : enfants_marci.jpg
Affichages : 856
Taille : 31,2 Ko"  style="float: CONFIG" /><br />
<br />
<font size="5">4) PHP Comment produire une liste numérotée HTML ?</font><br />
<br />
C'est ici que nous aurons besoin de gérer la <b>récursivité</b>. Comment gère-t-on cela ? <br />
En faisant une <b>fonction qui... s'appelle elle-même</b>.<br />
Prenons l'image du miroir qui renvoie un miroir etc. etc. etc. C'est une forme de récurrence. Ce qu'il importe de savoir avant de se pencher sur la récursivité, c'est de savoir 1) Quand entre-t-on ? 2) Quand sort-on ? pour ne pas commettre... une récurrence infinie.<br />
Notre fonction récurrente nous retourne les enfants (via une connexion à notre table geneal) d'un parent via son id.<br />
<br />
1er tour : on entre au point de l'id parent pour retourner ses enfants.<br />
Dernier tour : on sort quand parmi toute la descendance possible et imaginable, on aboutit à des gens qui n'ont pas d'enfant, cul de sac de tous les chemins, si on veut.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">function</span> fetch_children_list<span class="br0">&#40;</span>PDO <span style="color: #339933;">$db</span>,<span style="color: #339933;">$parent_id</span>=<span style="color: #cc66cc;">0</span>,<span style="color: #339933;">$ol</span>=<span style="color: #FF0000;">''</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'select id,</span>
<span style="color: #FF0000;">  if(genre=&quot;F&quot;,&quot;Mme&quot;,&quot;M&quot;) as civ,</span>
<span style="color: #FF0000;">  if(nom_usage is NULL,nom_naissance,concat(nom_usage,&quot; (&quot;,nom_naissance,&quot;)&quot;)) as nom,</span>
<span style="color: #FF0000;">  prenom,</span>
<span style="color: #FF0000;">  date_format(naissance,&quot;%d/%m/%Y&quot;) as naissance_fr,</span>
<span style="color: #FF0000;">  case</span>
<span style="color: #FF0000;">    when deces is NULL AND  TIMESTAMPDIFF(YEAR,naissance,CURRENT_DATE)&gt;=2 then concat(TIMESTAMPDIFF(YEAR,naissance,CURRENT_DATE),&quot; ANS&quot;)</span>
<span style="color: #FF0000;">    when deces is not NULL then NULL</span>
<span style="color: #FF0000;">    else concat( TIMESTAMPDIFF(MONTH,naissance,CURRENT_DATE),&quot; MOIS&quot;)</span>
<span style="color: #FF0000;">  end as age,</span>
<span style="color: #FF0000;">  case</span>
<span style="color: #FF0000;">    when deces is NOT NULL AND TIMESTAMPDIFF(YEAR,naissance,deces)&gt;=2 then concat(&quot;DCD LE &quot;, date_format(deces,&quot;%d/%m/%Y&quot;),&quot; A &quot;,TIMESTAMPDIFF(YEAR,naissance,deces),&quot; ANS&quot;)</span>
<span style="color: #FF0000;">    when deces is NULL then NULL</span>
<span style="color: #FF0000;">    else concat(&quot;DCD LE &quot;, date_format(deces,&quot;%d/%m/%Y&quot;),&quot; A &quot;, TIMESTAMPDIFF(MONTH,naissance,deces),&quot; MOIS&quot;)</span>
<span style="color: #FF0000;">  end as deces_age</span>
<span style="color: #FF0000;">  from geneal</span>
<span style="color: #FF0000;">  where parent_1='</span>.<span style="color: #339933;">$parent_id</span>.<span style="color: #FF0000;">' OR parent_2='</span>.<span style="color: #339933;">$parent_id</span>.<span style="color: #FF0000;">' </span>
<span style="color: #FF0000;">  order by naissance, prenom'</span>;
  <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;query<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;
  <span style="color: #339933;">$data</span>=<span style="color: #339933;">$stmt</span>-&gt;fetchAll<span class="br0">&#40;</span><span class="br0">&#41;</span>;
  <span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #0000ff;">isset</span><span class="br0">&#40;</span><span style="color: #339933;">$data</span><span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span style="color: #808080;">//si enfant(s) seulement</span>
    <span style="color: #339933;">$ol</span> .= <span style="color: #FF0000;">'&lt;ol&gt;'</span>;
    <span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$data</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$row</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
      <span style="color: #339933;">$ol</span> .=<span style="color: #FF0000;">'&lt;li&gt;'</span>. <span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'civ'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'nom'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'prenom'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'naissance_fr'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'age'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'deces_age'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&lt;/li&gt;'</span>;
      <span style="color: #339933;">$ol</span> = fetch_children_list<span class="br0">&#40;</span><span style="color: #339933;">$db</span>,<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'id'</span><span class="br0">&#93;</span>, <span style="color: #339933;">$ol</span><span class="br0">&#41;</span>;<span style="color: #808080;">//la fonction s'appelle elle-m&ecirc;me &agrave; l'int&eacute;rieur de son premier appel</span>
    <span class="br0">&#125;</span>
    <span style="color: #339933;">$ol</span> .=<span style="color: #FF0000;">'&lt;/ol&gt;'</span>;
  <span class="br0">&#125;</span>
  <span style="color: #0000ff;">return</span> <span style="color: #339933;">$ol</span>;
<span class="br0">&#125;</span>
<span style="color: #808080;">//pour tester</span>
<span style="color: #339933;">$eldest_id</span>=<span style="color: #cc66cc;">1</span>;
<span style="color: #339933;">$params</span>=<span style="color: #0000ff;">array</span><span class="br0">&#40;</span>
  PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_EMULATE_PREPARES =&gt; <span style="color: #0080ff;">false</span>
<span class="br0">&#41;</span>;
<span style="color: #339933;">$pdo</span> = <span style="color: #0000ff;">new</span> PDO<span class="br0">&#40;</span><span style="color: #FF0000;">'mysql:host=localhost;port=3306;dbname=entrepot;charset=utf8'</span>,<span style="color: #FF0000;">'root'</span>, <span style="color: #FF0000;">''</span>, <span style="color: #339933;">$params</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$liste_recursive</span>=fetch_children_list<span class="br0">&#40;</span><span style="color: #339933;">$pdo</span>,<span style="color: #339933;">$eldest_id</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$pdo</span>=<span style="color: #339933;">NULL</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #339933;">$liste_recursive</span>;</pre></td></tr></table></pre>
</div><br />
Générera ce code source :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code HTML :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI Fran&ccedil;ois 17/05/1965 53 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI Lucas 12/09/1985 32 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Mme REVEL (MARCI) Johanna 25/08/1989 28 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Mme MARCI Anne 12/02/1967  DCD LE 12/04/1968 A 14 MOIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI-RIVA (MARCI) Thomas 12/02/1970 48 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI-RIVA (SIDIBE) Baptiste 07/02/1997 21 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI-JIMEZ Mathis 07/01/2018 5 MOIS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Mme MARCI-RIVA (ALASSANE) Th&eacute;r&egrave;se 30/03/1999 19 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span></pre>
</div><br />
Ce qui est parfait pour un site en production...<br />
<br />
Mais comme vous êtes joueur, vous aimeriez bien savoir s'il est correct.<br />
Alors voici la même fonction en mode dev, qui vous retournera le HTML indenté comme il faut, pour vérifier que tout est parfait.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">function</span> fetch_children_list_dev<span class="br0">&#40;</span>PDO <span style="color: #339933;">$db</span>,<span style="color: #339933;">$parent_id</span>=<span style="color: #cc66cc;">0</span>,<span style="color: #339933;">$ol</span>=<span style="color: #FF0000;">''</span>,<span style="color: #339933;">$tabul</span>=-<span style="color: #cc66cc;">1</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'select id,</span>
<span style="color: #FF0000;">  if(genre=&quot;F&quot;,&quot;Mme&quot;,&quot;M&quot;) as civ,</span>
<span style="color: #FF0000;">  if(nom_usage is NULL,nom_naissance,concat(nom_usage,&quot; (&quot;,nom_naissance,&quot;)&quot;)) as nom,</span>
<span style="color: #FF0000;">  prenom,</span>
<span style="color: #FF0000;">  date_format(naissance,&quot;%d/%m/%Y&quot;) as naissance_fr,</span>
<span style="color: #FF0000;">  case</span>
<span style="color: #FF0000;">    when deces is NULL AND  TIMESTAMPDIFF(YEAR,naissance,CURRENT_DATE)&gt;=2 then concat(TIMESTAMPDIFF(YEAR,naissance,CURRENT_DATE),&quot; ANS&quot;)</span>
<span style="color: #FF0000;">    when deces is not NULL then NULL</span>
<span style="color: #FF0000;">    else concat( TIMESTAMPDIFF(MONTH,naissance,CURRENT_DATE),&quot; MOIS&quot;)</span>
<span style="color: #FF0000;">  end as age,</span>
<span style="color: #FF0000;">  case</span>
<span style="color: #FF0000;">    when deces is NOT NULL AND TIMESTAMPDIFF(YEAR,naissance,deces)&gt;=2 then concat(&quot;DCD LE &quot;, date_format(deces,&quot;%d/%m/%Y&quot;),&quot; A &quot;,TIMESTAMPDIFF(YEAR,naissance,deces),&quot; ANS&quot;)</span>
<span style="color: #FF0000;">    when deces is NULL then NULL</span>
<span style="color: #FF0000;">    else concat(&quot;DCD LE &quot;, date_format(deces,&quot;%d/%m/%Y&quot;),&quot; A &quot;, TIMESTAMPDIFF(MONTH,naissance,deces),&quot; MOIS&quot;)</span>
<span style="color: #FF0000;">  end as deces_age</span>
<span style="color: #FF0000;">  from geneal</span>
<span style="color: #FF0000;">  where parent_1='</span>.<span style="color: #339933;">$parent_id</span>.<span style="color: #FF0000;">' OR parent_2='</span>.<span style="color: #339933;">$parent_id</span>.<span style="color: #FF0000;">' </span>
<span style="color: #FF0000;">  order by naissance, prenom'</span>;
  <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;query<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;
  <span style="color: #339933;">$data</span>=<span style="color: #339933;">$stmt</span>-&gt;fetchAll<span class="br0">&#40;</span><span class="br0">&#41;</span>;
  <span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #0000ff;">isset</span><span class="br0">&#40;</span><span style="color: #339933;">$data</span><span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span><span style="color: #808080;">//si enfant(s) seulement</span>
    <span style="color: #339933;">$tabul</span>++;
    <span style="color: #339933;">$indentation</span>=<span style="color: #FF0000;">''</span>;
    <span style="color: #0000ff;">for</span><span class="br0">&#40;</span><span style="color: #339933;">$i</span>=<span style="color: #cc66cc;">0</span>;<span style="color: #339933;">$i</span>&lt;<span style="color: #339933;">$tabul</span>;<span style="color: #339933;">$i</span>++<span class="br0">&#41;</span><span class="br0">&#123;</span>
      <span style="color: #339933;">$indentation</span> .=<span style="color: #FF0000;">&quot;<span style="color: #800000;">\t</span>&quot;</span>;
    <span class="br0">&#125;</span>
    <span style="color: #339933;">$ol</span> .= <span style="color: #339933;">$indentation</span>.<span style="color: #FF0000;">&quot;&lt;ol&gt;<span style="color: #800000;">\n</span>&quot;</span>;
    <span style="color: #339933;">$indentation_li</span> =<span style="color: #339933;">$indentation</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\t</span>&quot;</span>;
    <span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$data</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$row</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
       <span style="color: #339933;">$ol</span> .=<span style="color: #339933;">$indentation_li</span>.<span style="color: #FF0000;">'&lt;li&gt;'</span>. <span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'civ'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'nom'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'prenom'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'naissance_fr'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'age'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">' '</span>.<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'deces_age'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&lt;/li&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
      <span style="color: #339933;">$ol</span> = fetch_children_list_dev<span class="br0">&#40;</span><span style="color: #339933;">$db</span>,<span style="color: #339933;">$row</span><span class="br0">&#91;</span><span style="color: #FF0000;">'id'</span><span class="br0">&#93;</span>, <span style="color: #339933;">$ol</span>,<span style="color: #339933;">$tabul</span><span class="br0">&#41;</span>;<span style="color: #808080;">//la fonction s'appelle elle-m&ecirc;me &agrave; l'int&eacute;rieur de son premier appel</span>
    <span class="br0">&#125;</span>
    <span style="color: #339933;">$ol</span> .= <span style="color: #339933;">$indentation</span>.<span style="color: #FF0000;">&quot;&lt;/ol&gt;<span style="color: #800000;">\n</span>&quot;</span>;
  <span class="br0">&#125;</span>
  <span style="color: #0000ff;">return</span> <span style="color: #339933;">$ol</span>;
<span class="br0">&#125;</span>
<span style="color: #339933;">$eldest_id</span>=<span style="color: #cc66cc;">1</span>;
<span style="color: #339933;">$params</span>=<span style="color: #0000ff;">array</span><span class="br0">&#40;</span>
  PDO::ATTR_ERRMODE =&gt; PDO::ERRMODE_EXCEPTION,
  PDO::ATTR_EMULATE_PREPARES =&gt; <span style="color: #0080ff;">false</span>
<span class="br0">&#41;</span>;
<span style="color: #339933;">$pdo</span> = <span style="color: #0000ff;">new</span> PDO<span class="br0">&#40;</span><span style="color: #FF0000;">'mysql:host=localhost;port=3306;dbname=entrepot;charset=utf8'</span>,<span style="color: #FF0000;">'root'</span>, <span style="color: #FF0000;">''</span>, <span style="color: #339933;">$params</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$liste_recursive</span>=fetch_children_list_dev<span class="br0">&#40;</span><span style="color: #339933;">$pdo</span>,<span style="color: #339933;">$eldest_id</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$pdo</span>=<span style="color: #339933;">NULL</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #339933;">$liste_recursive</span>;</pre></td></tr></table></pre>
</div><br />
générera<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code HTML :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI Fran&ccedil;ois 17/05/1965 53 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI Lucas 12/09/1985 32 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Mme REVEL (MARCI) Johanna 25/08/1989 28 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Mme MARCI Anne 12/02/1967  DCD LE 12/04/1968 A 14 MOIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI-RIVA (MARCI) Thomas 12/02/1970 48 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI-RIVA (SIDIBE) Baptiste 07/02/1997 21 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
			<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>M MARCI-JIMEZ Mathis 07/01/2018 5 MOIS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
		<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>Mme MARCI-RIVA (ALASSANE) Th&eacute;r&egrave;se 30/03/1999 19 ANS <span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">li</span><span style="color: #0000ff;">&gt;</span></span>
	<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">ol</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div></blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b5651/filiation-parentale-recursivite-mysql-php/</guid>
		</item>
		<item>
			<title><![CDATA[SQL : Calculer le temps d'activité des personnes dans une structure]]></title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b5621/sql-calculer-temps-d-activite-structure/</link>
			<pubDate>Tue, 12 Jun 2018 08:50:28 GMT</pubDate>
			<description>Introduction 
 
1) Que l’on...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="4">Introduction</font><br />
<br />
1) Que l’on soit une entreprise ou une association (structure), on a souvent besoin de stocker les heures faites par les personnes, et que cela puisse ensuite lancer tous les calculs de cumuls horaires que l’on veut (par personne, jour – par personne, semaine – par personne, mois – par personne, an ) et on multiplie ça par 2, car on veut la même chose par structure.<br />
<br />
2) On aimerait ensuite que ces saisies soient sécurisées :<br />
a) pas de fin &gt;= début<br />
b) pas de chevauchement horaire pour une même personne.<br />
<br />
Bonne nouvelle, pour ces problématiques complexes, SQL sait faire !<br />
<br />
<font size="4">1 a) Schéma de la base de données </font><br />
<br />
<img src="https://www.developpez.net/forums/attachments/p388040d1528794424/environnements-developpement/delphi/composants-vcl/traduction/schema.jpg/" border="0" alt="Nom : schema.jpg
Affichages : 546
Taille : 47,3 Ko"  style="float: CONFIG" /><br />
<br />
<br />
2 petites tables au centre s’occupent de tout.<br />
J’ai mis des double underscore entre horaire et saisie pour permettre (dans PHPMyAdmin seulement) de créer un folder horaire. Ca n’a aucun intérêt si votre base ne contient que ces 2 tables.<br />
Les 4 vues à gauche sont les vues pour la structure, les 4 à droite sont les vues pour les personnes.<br />
<br />
<font size="4">1 b) Création des 2 tables centrales</font><br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span> <span style="color: #0000ff;">IF</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">EXISTS</span> <span style="color: #FF0000;">`horaire__personne`</span> <span class="br0">&#40;</span>
  <span style="color: #FF0000;">`id`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">AUTO_INCREMENT</span>,
  <span style="color: #FF0000;">`civ`</span> enum<span class="br0">&#40;</span><span style="color: #FF0000;">'M'</span>,<span style="color: #FF0000;">'Mme'</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`nom_naissance`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`nom_usage`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">200</span><span class="br0">&#41;</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`naissance`</span> <span style="color: #0000ff;">date</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`mail`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">200</span><span class="br0">&#41;</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`inscription`</span> timestamp <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">DEFAULT</span> CURRENT_TIMESTAMP,
  <span style="color: #0000ff;">PRIMARY</span> <span style="color: #0000ff;">KEY</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`mail`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`mail`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`nom_naissance`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`nom_naissance`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">USING</span> BTREE,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`nom_usage`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span> <span style="color: #0000ff;">ENGINE</span>=InnoDB <span style="color: #0000ff;">AUTO_INCREMENT</span>=<span style="color: #cc66cc;">4</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">CHARSET</span>=utf8;
&nbsp;
<span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> <span style="color: #FF0000;">`horaire__personne`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span>, <span style="color: #FF0000;">`civ`</span>, <span style="color: #FF0000;">`nom_naissance`</span>, <span style="color: #FF0000;">`nom_usage`</span>, <span style="color: #FF0000;">`prenom`</span>, <span style="color: #FF0000;">`naissance`</span>, <span style="color: #FF0000;">`mail`</span>, <span style="color: #FF0000;">`inscription`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">VALUES</span>
<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'Mme'</span>, <span style="color: #FF0000;">'DUPONT'</span>, <span style="color: #FF0000;">'ZARMA'</span>, <span style="color: #FF0000;">'Corinne'</span>, <span style="color: #FF0000;">'1965-12-31'</span>, <span style="color: #FF0000;">'cdupont@gmail.com'</span>, <span style="color: #FF0000;">'2018-06-06 06:41:30'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">'M'</span>, <span style="color: #FF0000;">'ZARMA'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Kamel'</span>, <span style="color: #FF0000;">'1972-04-01'</span>, <span style="color: #FF0000;">'cdupont@gmail.com'</span>, <span style="color: #FF0000;">'2018-06-06 06:48:45'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">'Mme'</span>, <span style="color: #FF0000;">'POPEYE'</span>, <span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'Louise'</span>, <span style="color: #FF0000;">'2000-01-01'</span>, <span style="color: #FF0000;">'popeye@numericable.fr'</span>, <span style="color: #FF0000;">'2018-06-06 06:50:12'</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span> <span style="color: #0000ff;">IF</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">EXISTS</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span class="br0">&#40;</span>
  <span style="color: #FF0000;">`id`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">UNSIGNED</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">AUTO_INCREMENT</span>,
  <span style="color: #FF0000;">`personne_id`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">date</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`debut`</span> time <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`fin`</span> time <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #0000ff;">PRIMARY</span> <span style="color: #0000ff;">KEY</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`personne_id`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`personne_id`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`jour`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`jour`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`debut`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`fin`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`fin`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`periode`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`jour`</span>,<span style="color: #FF0000;">`debut`</span>,<span style="color: #FF0000;">`fin`</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span> <span style="color: #0000ff;">ENGINE</span>=InnoDB <span style="color: #0000ff;">AUTO_INCREMENT</span>=<span style="color: #cc66cc;">9</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">CHARSET</span>=utf8 ROW_FORMAT=COMPRESSED;
&nbsp;
<span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span>, <span style="color: #FF0000;">`personne_id`</span>, <span style="color: #FF0000;">`jour`</span>, <span style="color: #FF0000;">`debut`</span>, <span style="color: #FF0000;">`fin`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">VALUES</span>
<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'2018-06-01'</span>, <span style="color: #FF0000;">'09:30:00'</span>, <span style="color: #FF0000;">'14:00:00'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'2018-06-01'</span>, <span style="color: #FF0000;">'14:00:00'</span>, <span style="color: #FF0000;">'18:00:00'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'2018-06-04'</span>, <span style="color: #FF0000;">'08:00:00'</span>, <span style="color: #FF0000;">'11:50:00'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">4</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'2018-06-04'</span>, <span style="color: #FF0000;">'13:00:00'</span>, <span style="color: #FF0000;">'18:15:00'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">'2018-06-01'</span>, <span style="color: #FF0000;">'05:00:00'</span>, <span style="color: #FF0000;">'13:00:00'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">6</span>, <span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">'2018-06-04'</span>, <span style="color: #FF0000;">'13:00:00'</span>, <span style="color: #FF0000;">'21:00:00'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">7</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">'2018-06-01'</span>, <span style="color: #FF0000;">'08:00:00'</span>, <span style="color: #FF0000;">'23:59:59'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">8</span>, <span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">'2018-05-31'</span>, <span style="color: #FF0000;">'08:00:00'</span>, <span style="color: #FF0000;">'20:00:00'</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
<b>Table horaire__personne</b> : Pourquoi s’embarrasser de nom_de_naissance et de nom_usage ? Parce que bien des femmes font le choix de changer de nom à l’occasion d’un mariage ou d’un divorce. Bien entendu, on a tous des noms de naissance, et on a… ou pas, un jour, des noms d’usage. Donc le SQL de la requête se réduira à <br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">if</span><span class="br0">&#40;</span>nom_usage <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">not</span> <span style="color: #0000ff;">null</span>, nom_usage, nom_naissance<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> nom</pre>
</div><br />
<font size="4">1 c) Comment faire la requête <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">group by</span> pour les cumuls ?</font><br />
<br />
On est au coeur de la problématique.<br />
Nous allons simplement détailler la requête de la vue v_jour_personne, le reste coule (relativement) de source.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span> h.personne_id,
p.civ,
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>p.nom_usage <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">NULL</span>, p.nom_naissance, p.nom_usage<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> nom,
p.prenom,
timestampdiff<span class="br0">&#40;</span>year, p.naissance,h.jour<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> age, 
p.mail,
h.jour,
sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span>h.fin,h.debut<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> cumul
<span style="color: #0000ff;">from</span> horaire__saisie h
<span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> horaire__personne p <span style="color: #0000ff;">on</span> h.personne_id=p.id
<span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> h.personne_id, h.jour
<span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> nom,p.prenom, h.jour <span style="color: #0000ff;">desc</span></pre></td></tr></table></pre>
</div><br />
C’est bien sûr la <b>ligne de cumul</b> qui mérite quelques explications :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;">timediff<span class="br0">&#40;</span>h.fin,h.debut<span class="br0">&#41;</span></pre>
</div>Facile… puisque les champs sont de type time, on fait un timediff<br />
puis on repasse tout en secondes avant de les cumuler (ici par personne, jour)<br />
puis on repasse tout ce cumul en type time, car les humains risquent de trouver un peu complexe une durée exprimée en secondes…<br />
<br />
Si l’on a compris cette requête, on peut se lancer dans la création de toutes les vues.<br />
<br />
<br />
Ah non, il y avait encore un petit truc piégeux. <b>Le group by semaine</b>…<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span> h.personne_id,
p.civ,
<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>p.nom_usage <span style="color: #0000ff;">is</span> <span style="color: #0000ff;">NULL</span>, p.nom_naissance, p.nom_usage<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> nom,
p.prenom,
timestampdiff<span class="br0">&#40;</span>year, p.naissance,h.jour<span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> age, 
p.mail,
concat<span class="br0">&#40;</span>substr<span class="br0">&#40;</span>YEARWEEK<span class="br0">&#40;</span>jour,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">'-'</span>,substr<span class="br0">&#40;</span>YEARWEEK<span class="br0">&#40;</span>jour,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,<span style="color: #cc66cc;">5</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> semaine,
sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span>h.fin,h.debut<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">as</span> cumul
<span style="color: #0000ff;">from</span> horaire__saisie h
<span style="color: #0000ff;">inner</span> <span style="color: #0000ff;">join</span> horaire__personne p <span style="color: #0000ff;">on</span> h.personne_id=p.id
<span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> h.personne_id,YEARWEEK<span class="br0">&#40;</span>jour,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>
<span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> nom,p.prenom,YEARWEEK<span class="br0">&#40;</span>jour,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">desc</span>;</pre></td></tr></table></pre>
</div><br />
Quand on repère les semaines de l’année, <b>fonction YEARWEEK</b>, on ne doit pas oublier qu’une semaine peut enjamber 2 mois, et plus filou encore, qu’elle peut enjamber 2 années… La semaine qui contient le 1er janvier est très particulière, toutes les fois où elle ne commence pas un Lundi en tout cas ! Et du coup, que va-t-on afficher à l’humain ? <b>Surtout pas une concaténation YEAR + MONTH </b>ou YEAR + WEEK, du coup, car ça créerait 2 lignes cette fameuse première semaine de l’année ! Donc on doit bien penser à <b>manipuler la fonction YEARWEEK pour l’affichage</b>, et rien d’autre, sinon le résultat va être pour le moins faussé.<br />
<br />
Voici le code de construction des 8 vues <br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_an`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_an`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> date_format<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #FF0000;">'%Y'</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`an`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`an`</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`an`</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_an_personne`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_an_personne`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`civ`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`civ`</span>,<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>isnull<span class="br0">&#40;</span><span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_naissance`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`prenom`</span>,timestampdiff<span class="br0">&#40;</span>YEAR,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`naissance`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`age`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`mail`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`mail`</span>,date_format<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #FF0000;">'%Y'</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`an`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">join</span> <span style="color: #FF0000;">`horaire__personne`</span> <span style="color: #FF0000;">`p`</span> <span style="color: #0000ff;">on</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> = <span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`an`</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span>,<span style="color: #FF0000;">`an`</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_jour`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_jour`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`jour`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_jour_personne`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_jour_personne`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`civ`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`civ`</span>,<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>isnull<span class="br0">&#40;</span><span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_naissance`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`prenom`</span>,timestampdiff<span class="br0">&#40;</span>YEAR,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`naissance`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`age`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`mail`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`mail`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`jour`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">join</span> <span style="color: #FF0000;">`horaire__personne`</span> <span style="color: #FF0000;">`p`</span> <span style="color: #0000ff;">on</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> = <span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_mois`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_mois`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> date_format<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #FF0000;">'%Y-%m'</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`mois`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`mois`</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`mois`</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_mois_personne`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_mois_personne`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`civ`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`civ`</span>,<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>isnull<span class="br0">&#40;</span><span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_naissance`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`prenom`</span>,timestampdiff<span class="br0">&#40;</span>YEAR,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`naissance`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`age`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`mail`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`mail`</span>,date_format<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #FF0000;">'%Y-%m'</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`mois`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">join</span> <span style="color: #FF0000;">`horaire__personne`</span> <span style="color: #FF0000;">`p`</span> <span style="color: #0000ff;">on</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> = <span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`mois`</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span>,<span style="color: #FF0000;">`mois`</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_semaine`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_semaine`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span> concat<span class="br0">&#40;</span>substr<span class="br0">&#40;</span>yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">'-'</span>,substr<span class="br0">&#40;</span>yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,<span style="color: #cc66cc;">5</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`semaine`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">desc</span> ;
&nbsp;
<span style="color: #808080;">-- --------------------------------------------------------</span>
&nbsp;
<span style="color: #808080;">--</span>
<span style="color: #808080;">-- Structure de la vue `v_semaine_personne`</span>
<span style="color: #808080;">--</span>
&nbsp;
<span style="color: #0000ff;">CREATE</span> ALGORITHM=UNDEFINED DEFINER=<span style="color: #FF0000;">`root`</span>@<span style="color: #FF0000;">`localhost`</span> SQL SECURITY DEFINER <span style="color: #0000ff;">VIEW</span> <span style="color: #FF0000;">`v_semaine_personne`</span>  <span style="color: #0000ff;">AS</span>  <span style="color: #0000ff;">select</span> <span style="color: #0000ff;">distinct</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`personne_id`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`civ`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`civ`</span>,<span style="color: #0000ff;">if</span><span class="br0">&#40;</span>isnull<span class="br0">&#40;</span><span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_naissance`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`nom_usage`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`prenom`</span>,timestampdiff<span class="br0">&#40;</span>YEAR,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`naissance`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`age`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`mail`</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`mail`</span>,concat<span class="br0">&#40;</span>substr<span class="br0">&#40;</span>yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,<span style="color: #cc66cc;">1</span>,<span style="color: #cc66cc;">4</span><span class="br0">&#41;</span>,<span style="color: #FF0000;">'-'</span>,substr<span class="br0">&#40;</span>yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span>,<span style="color: #cc66cc;">5</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`semaine`</span>,sec_to_time<span class="br0">&#40;</span><span style="color: #0000ff;">sum</span><span class="br0">&#40;</span>time_to_sec<span class="br0">&#40;</span>timediff<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`fin`</span>,<span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`debut`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">AS</span> <span style="color: #FF0000;">`cumul`</span> <span style="color: #0000ff;">from</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #FF0000;">`h`</span> <span style="color: #0000ff;">join</span> <span style="color: #FF0000;">`horaire__personne`</span> <span style="color: #FF0000;">`p`</span> <span style="color: #0000ff;">on</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span> = <span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span style="color: #0000ff;">group</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`personne_id`</span>,yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">order</span> <span style="color: #0000ff;">by</span> <span style="color: #FF0000;">`nom`</span>,<span style="color: #FF0000;">`p`</span>.<span style="color: #FF0000;">`prenom`</span>,yearweek<span class="br0">&#40;</span><span style="color: #FF0000;">`h`</span>.<span style="color: #FF0000;">`jour`</span>,<span style="color: #cc66cc;">2</span><span class="br0">&#41;</span> <span style="color: #0000ff;">desc</span> ;</pre></td></tr></table></pre>
</div><br />
<font size="4">2 a) Trigger d’insert</font><br />
<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">USE</span> horaire ;<span style="color: #808080;">/*le nom de ma base de donn&eacute;es*/</span>
<span style="color: #0000ff;">DROP</span> <span style="color: #0000ff;">TRIGGER</span> <span style="color: #0000ff;">IF</span> <span style="color: #0000ff;">EXISTS</span> <span style="color: #FF0000;">`insert_erreur`</span>;
DELIMITER $$
<span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TRIGGER</span> <span style="color: #FF0000;">`insert_erreur`</span> BEFORE <span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">ON</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #0000ff;">FOR</span> EACH ROW <span style="color: #0000ff;">BEGIN</span>
  <span style="color: #0000ff;">DECLARE</span> _msg  <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">255</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>new.debut &gt;= new.fin<span class="br0">&#41;</span> <span style="color: #0000ff;">then</span>
        <span style="color: #0000ff;">set</span> _msg = concat<span class="br0">&#40;</span><span style="color: #FF0000;">'Insertion interdite ! horaire debut plus grand que horaire fin !'</span><span class="br0">&#41;</span>;
     <span style="color: #0000ff;">SIGNAL</span> <span style="color: #0000ff;">SQLSTATE</span> VALUE <span style="color: #FF0000;">'08888'</span> <span style="color: #0000ff;">SET</span> MESSAGE_TEXT = _msg, MYSQL_ERRNO = <span style="color: #cc66cc;">8888</span>;
  <span style="color: #0000ff;">end</span> <span style="color: #0000ff;">if</span>;
  <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">exists</span> <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">from</span> horaire__saisie <span style="color: #0000ff;">where</span> personne_id = new.personne_id <span style="color: #0000ff;">and</span> jour = new.jour <span style="color: #0000ff;">and</span> fin &gt; new.debut <span style="color: #0000ff;">and</span> debut &lt; new.fin<span class="br0">&#41;</span> <span style="color: #0000ff;">then</span>
		<span style="color: #0000ff;">set</span> _msg = concat<span class="br0">&#40;</span><span style="color: #FF0000;">'Insertion interdite ! La p&eacute;riode saisie recoupe une p&eacute;riode d&eacute;j&agrave; saisie !'</span><span class="br0">&#41;</span>;
     <span style="color: #0000ff;">SIGNAL</span> <span style="color: #0000ff;">SQLSTATE</span> VALUE <span style="color: #FF0000;">'07777'</span> <span style="color: #0000ff;">SET</span> MESSAGE_TEXT = _msg, MYSQL_ERRNO = <span style="color: #cc66cc;">7777</span>;
  <span style="color: #0000ff;">end</span> <span style="color: #0000ff;">if</span>;
<span style="color: #0000ff;">END</span>
$$
DELIMITER ;</pre></td></tr></table></pre>
</div><font size="4">2 b) Trigger d’update</font><br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">USE</span> horaire;<span style="color: #808080;">/*le nom de ma base de donn&eacute;es*/</span>
<span style="color: #0000ff;">DROP</span> <span style="color: #0000ff;">TRIGGER</span> <span style="color: #0000ff;">IF</span> <span style="color: #0000ff;">EXISTS</span> <span style="color: #FF0000;">`update_erreur`</span>;
DELIMITER $$
<span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TRIGGER</span> <span style="color: #FF0000;">`update_erreur`</span> BEFORE <span style="color: #0000ff;">UPDATE</span> <span style="color: #0000ff;">ON</span> <span style="color: #FF0000;">`horaire__saisie`</span> <span style="color: #0000ff;">FOR</span> EACH ROW <span style="color: #0000ff;">BEGIN</span>
  <span style="color: #0000ff;">DECLARE</span> _msg  <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">255</span><span class="br0">&#41;</span>;
&nbsp;
  <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span>new.debut &gt;= new.fin<span class="br0">&#41;</span> <span style="color: #0000ff;">then</span>
         <span style="color: #0000ff;">set</span> _msg = concat<span class="br0">&#40;</span><span style="color: #FF0000;">'Modification interdite ! horaire debut plus grand que horaire fin !'</span><span class="br0">&#41;</span>;
     <span style="color: #0000ff;">SIGNAL</span> <span style="color: #0000ff;">SQLSTATE</span> VALUE <span style="color: #FF0000;">'08888'</span> <span style="color: #0000ff;">SET</span> MESSAGE_TEXT = _msg, MYSQL_ERRNO = <span style="color: #cc66cc;">8888</span>;
  <span style="color: #0000ff;">end</span> <span style="color: #0000ff;">if</span>;
  <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">exists</span> <span class="br0">&#40;</span><span style="color: #0000ff;">select</span> <span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">from</span> horaire__saisie <span style="color: #0000ff;">where</span> id != new.id <span style="color: #0000ff;">and</span> personne_id=new.personne_id <span style="color: #0000ff;">and</span> jour = new.jour <span style="color: #0000ff;">and</span> fin &gt; new.debut <span style="color: #0000ff;">and</span> debut &lt; new.fin<span class="br0">&#41;</span> <span style="color: #0000ff;">then</span>
        <span style="color: #0000ff;">set</span> _msg = concat<span class="br0">&#40;</span><span style="color: #FF0000;">'Modification interdite ! La p&eacute;riode saisie recoupe une p&eacute;riode d&eacute;j&agrave; saisie !'</span><span class="br0">&#41;</span>;
     <span style="color: #0000ff;">SIGNAL</span> <span style="color: #0000ff;">SQLSTATE</span> VALUE <span style="color: #FF0000;">'07777'</span> <span style="color: #0000ff;">SET</span> MESSAGE_TEXT = _msg, MYSQL_ERRNO = <span style="color: #cc66cc;">7777</span>;
  <span style="color: #0000ff;">end</span> <span style="color: #0000ff;">if</span>;
&nbsp;
<span style="color: #0000ff;">END</span>
$$
DELIMITER ;</pre></td></tr></table></pre>
</div><br />
Voilà ! Enjoy !<br />
Et si mes explications sont un peu trop expéditives, n'oubliez pas les commentaires. Je me ferai un plaisir de développer au besoin tel ou tel point.<br />
<br />
<br />
<font size="4">Remerciements</font><br />
<br />
Mes chaleureux remerciements à <b>Artemus24 du forum developpez</b>, pour ses compétences techniques, pour sa propension à les partager avec beaucoup de gentillesse ! Merci, merci, Artemus Agent secret au service du président Ulysses S. Grant !</blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b5621/sql-calculer-temps-d-activite-structure/</guid>
		</item>
		<item>
			<title>De belles boucles sans frisottis !</title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b5600/belles-boucles-frisottis/</link>
			<pubDate>Sat, 09 Jun 2018 12:34:21 GMT</pubDate>
			<description>Introduction 
 
 
Nous...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><font size="4">Introduction</font><br />
<br />
<br />
Nous faisons de l'informatique de gestion, la plupart du temps. Donc 90% des tableaux PHP que nous avons à gérer sont des tableaux de tableaux associatifs générés via notre base de données. <br />
On pourrait donc penser que seule la boucle foreach est vraiment utile...<br />
C'est plus subtile que cela.<br />
Je vais tenter de mettre ici mon expérience sur le sujet. Toutes les remarques seront les bienvenues, comme d'habitude !<br />
<br />
Et si vous vous dites : &quot;Elle est bien gentille Dendrite, mais ça me dit pas comment je me connecte en base de données pour récupérer un tableau associatif PHP !&quot;.<br />
C'est par ici, le billet précédent :<br />
<a href="https://www.developpez.net/forums/blogs/244172-dendrite/b5417/pdo-soupe-lit/" target="_blank">PDO une soupe et au lit !</a><br />
<br />
<b>Nous allons voir des exemples pratiques de boucles foreach et do...while.</b><br />
<br />
Partons du tableau PHP suivant :<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">$contacts</span> = <span style="color: #0000ff;">array</span><span class="br0">&#40;</span>
<span style="color: #cc66cc;">0</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'BELGIQUE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'BRUXELLES'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Aline'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">1</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'BELGIQUE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LIEGE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Bernie'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">2</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'BELGIQUE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LIEGE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Charlie'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">3</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'BELGIQUE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LIEGE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'D&eacute;d&eacute;'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">4</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'BELGIQUE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LIEGE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Esat'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">5</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'BELGIQUE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LIEGE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Framboise'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">6</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'AMIENS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Gus'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">7</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'AMIENS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Helma'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">8</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'BORDEAUX'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Isidore'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">9</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Jacqueline'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">10</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Kev'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">11</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Lolo'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">12</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Momo'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">13</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'N&eacute;nesse'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">14</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Otto'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">15</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'FRANCE'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PARIS'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Pat'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">16</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PORT-GENTIL'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Quat'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">17</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PORT-GENTIL'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Rania'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">18</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'PORT-GENTIL'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Sembene'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">19</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'FRANCEVILLE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Tia'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">20</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LAMBARENE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Ugo'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">21</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LAMBARENE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Vasco'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">22</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LAMBARENE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Wemba'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">23</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LAMBARENE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Xenia'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">24</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LAMBARENE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Yam'</span><span class="br0">&#41;</span>,
<span style="color: #cc66cc;">25</span> =&gt; <span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #FF0000;">'pays'</span> =&gt; <span style="color: #FF0000;">'GABON'</span>, <span style="color: #FF0000;">'ville'</span> =&gt; <span style="color: #FF0000;">'LAMBARENE'</span>, <span style="color: #FF0000;">'login'</span> =&gt; <span style="color: #FF0000;">'Zelda'</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
<br />
<font size="4">1 ) On veut simplement scanner le tableau PHP : foreach</font><br />
<br />
Pour alimenter un tableau HTML ici : Je vous propose 2 méthodes :<br />
<br />
<font size="3">1 A) Boucle foreach =&gt; un enregistrement complet par tour de boucle, plus compréhensible pour les débutants</font><br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">$table</span>=<span style="color: #FF0000;">'&lt;table&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;caption&gt;Contacts&lt;/caption&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;thead&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;tr&gt;&lt;th&gt;Pays&lt;/th&gt;&lt;th&gt;Ville&lt;/th&gt;&lt;th&gt;Login&lt;/th&gt;&lt;/tr&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/thead&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;tbody&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$contacts</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$contact</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;tr&gt;&lt;td&gt;'</span>.<span style="color: #339933;">$contact</span><span class="br0">&#91;</span><span style="color: #FF0000;">'pays'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&lt;/td&gt;&lt;td&gt;'</span>.<span style="color: #339933;">$contact</span><span class="br0">&#91;</span><span style="color: #FF0000;">'ville'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&lt;/td&gt;&lt;td&gt;'</span>.<span style="color: #339933;">$contact</span><span class="br0">&#91;</span><span style="color: #FF0000;">'login'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&lt;/td&gt;&lt;/tr&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span class="br0">&#125;</span>
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/tbody&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/table&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #339933;">$table</span>;</pre></td></tr></table></pre>
</div>donnera :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code HTML :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">table</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">caption</span><span style="color: #0000ff;">&gt;</span></span>Contacts<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">caption</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">thead</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">th</span><span style="color: #0000ff;">&gt;</span></span>Pays<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">th</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">th</span><span style="color: #0000ff;">&gt;</span></span>Ville<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">th</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">th</span><span style="color: #0000ff;">&gt;</span></span>Login<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">th</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">thead</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tbody</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BELGIQUE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BRUXELLES<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Aline<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BELGIQUE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LIEGE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Bernie<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BELGIQUE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LIEGE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Charlie<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BELGIQUE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LIEGE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>D&eacute;d&eacute;<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BELGIQUE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LIEGE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Esat<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BELGIQUE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LIEGE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Framboise<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>AMIENS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Gus<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>AMIENS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Helma<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>BORDEAUX<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Isidore<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Jacqueline<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Kev<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Lolo<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Momo<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>N&eacute;nesse<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Otto<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PARIS<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Pat<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PORT-GENTIL<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Quat<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PORT-GENTIL<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Rania<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>PORT-GENTIL<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Sembene<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>FRANCEVILLE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Tia<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LAMBARENE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Ugo<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LAMBARENE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Vasco<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LAMBARENE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Wemba<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LAMBARENE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Xenia<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LAMBARENE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Yam<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>GABON<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>LAMBARENE<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span>Zelda<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">td</span><span style="color: #0000ff;">&gt;</span></span><span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tr</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">tbody</span><span style="color: #0000ff;">&gt;</span></span>
<span style="color: #339933;"><span style="color: #0000ff;">&lt;/</span><span style="color: #0000ff;">table</span><span style="color: #0000ff;">&gt;</span></span></pre></td></tr></table></pre>
</div><br />
Admirez ces balises <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;thead&gt;</span> et <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">&lt;tbody&gt;</span> qui permettent par exemple quand on lance une impression via la page web de reproduire le nom des champs à chaque page !<br />
Admirez la coquetterie qui consiste à retourner à la ligne au bon moment pour avoir le plus joli des codes sources ! <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">\n</span> :mrgreen:<br />
<font size="3"><br />
1 B) Boucle foreach =&gt; 2 boucles imbriquées : plus abstrait, donc réutilisable sans rien changer, quelle que soit la requête en base à l'origine du tableau PHP</font><br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">$caption</span>=<span style="color: #FF0000;">'Contacts'</span>;<span style="color: #808080;">//le seul truc &agrave; changer</span>
<span style="color: #339933;">$keys</span>=array_keys<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$table</span>=<span style="color: #FF0000;">'&lt;table&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;caption&gt;'</span>.<span style="color: #339933;">$caption</span>.<span style="color: #FF0000;">'&lt;/caption&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;thead&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;tr&gt;'</span>;
<span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$keys</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$key</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;th&gt;'</span>.ucfirst<span class="br0">&#40;</span><span style="color: #339933;">$key</span><span class="br0">&#41;</span>.<span style="color: #FF0000;">'&lt;/th&gt;'</span>;
<span class="br0">&#125;</span>
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/tr&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/thead&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;tbody&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$contacts</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$contact</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;tr&gt;'</span>;
  <span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$contact</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$key</span>=&gt;<span style="color: #339933;">$value</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;td&gt;'</span>.<span style="color: #339933;">$value</span>.<span style="color: #FF0000;">'&lt;/td&gt;'</span>;
  <span class="br0">&#125;</span>
  <span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/tr&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span class="br0">&#125;</span>
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/tbody&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #339933;">$table</span>.=<span style="color: #FF0000;">'&lt;/table&gt;'</span>.<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span>&quot;</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #339933;">$table</span>;<span style="color: #808080;">//donnera EXACTEMENT le m&ecirc;me code HTML que ci-dessus...</span></pre></td></tr></table></pre>
</div><br />
<font size="4">2) Boucle do... while =&gt; On veut MODIFIER le tableau PHP</font><br />
<font size="3">2 A) On veut scanner le tableau PHP pour le modifier en ajoutant un champ en dernier</font><br />
<br />
Ici par exemple, on s'aperçoit qu'il faut afficher le genre des contacts, élément qu'on n'a pas en base de données !<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">$i</span>=<span style="color: #cc66cc;">0</span>;
<span style="color: #0000ff;">do</span><span class="br0">&#123;</span>
  <span style="color: #808080;">//patch compl&egrave;tement empirique !</span>
  <span style="color: #339933;">$femme</span>=substr<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'login'</span><span class="br0">&#93;</span>,-<span style="color: #cc66cc;">3</span><span class="br0">&#41;</span>==<span style="color: #FF0000;">'ine'</span> || substr<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'login'</span><span class="br0">&#93;</span>,-<span style="color: #cc66cc;">3</span><span class="br0">&#41;</span>==<span style="color: #FF0000;">'ise'</span> || substr<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'login'</span><span class="br0">&#93;</span>,-<span style="color: #cc66cc;">1</span><span class="br0">&#41;</span>==<span style="color: #FF0000;">'a'</span>;
  <span style="color: #0000ff;">if</span><span class="br0">&#40;</span><span style="color: #339933;">$femme</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'genre'</span><span class="br0">&#93;</span>=<span style="color: #FF0000;">'F'</span>;
  <span class="br0">&#125;</span>
  <span style="color: #0000ff;">else</span><span class="br0">&#123;</span>
    <span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'genre'</span><span class="br0">&#93;</span>=<span style="color: #FF0000;">'H'</span>;
  <span class="br0">&#125;</span>
  <span style="color: #339933;">$i</span>++;
<span class="br0">&#125;</span><span style="color: #0000ff;">while</span><span class="br0">&#40;</span><span style="color: #339933;">$i</span>&lt;count<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp;
<span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;pre&gt;'</span>;
print_r<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;/pre&gt;'</span>;
<span style="color: #808080;">//donnera</span>
<span style="color: #808080;">/*</span>
<span style="color: #808080;">Array</span>
<span style="color: #808080;">(</span>
<span style="color: #808080;">&nbsp;   [0] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; BRUXELLES</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Aline</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [1] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Bernie</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [2] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Charlie</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [3] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; D&eacute;d&eacute;</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [4] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Esat</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [5] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Framboise</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [6] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; AMIENS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Gus</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [7] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; AMIENS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Helma</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [8] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; BORDEAUX</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Isidore</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [9] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Jacqueline</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [10] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Kev</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [11] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Lolo</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [12] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Momo</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [13] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; N&eacute;nesse</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [14] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Otto</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [15] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Pat</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [16] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PORT-GENTIL</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Quat</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [17] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PORT-GENTIL</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Rania</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [18] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PORT-GENTIL</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Sembene</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [19] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; FRANCEVILLE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Tia</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [20] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Ugo</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [21] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Vasco</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [22] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Wemba</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [23] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Xenia</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [24] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Yam</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [25] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Zelda</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">)</span></pre></td></tr></table></pre>
</div><br />
<font size="3">2 B) on veut scanner le tableau PHP pour le modifier en ajoutant un champ ailleurs qu'en dernier</font><br />
<br />
Ici par exemple, on s'aperçoit qu'il faut afficher en premier le continent, élément qu'on n'a pas en base de données !<br />
On passe alors par une copie de <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$contacts</span>.<br />
<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="40"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />249<br />250<br />251<br />252<br />253<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">$copy</span>=<span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$keys</span>=array_keys<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #cc66cc;">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$i</span>=<span style="color: #cc66cc;">0</span>;
<span style="color: #0000ff;">do</span><span class="br0">&#123;</span>
  <span style="color: #808080;">//patch compl&egrave;tement empirique !</span>
  <span style="color: #339933;">$copy</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'continent'</span><span class="br0">&#93;</span>=<span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #FF0000;">'pays'</span><span class="br0">&#93;</span>==<span style="color: #FF0000;">'GABON'</span>?<span style="color: #FF0000;">'AFRIQUE'</span>:<span style="color: #FF0000;">'EUROPE'</span>;
  <span style="color: #0000ff;">foreach</span><span class="br0">&#40;</span><span style="color: #339933;">$keys</span> <span style="color: #0000ff;">as</span> <span style="color: #339933;">$key</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span style="color: #339933;">$copy</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #339933;">$key</span><span class="br0">&#93;</span>=<span style="color: #339933;">$contacts</span><span class="br0">&#91;</span><span style="color: #339933;">$i</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span style="color: #339933;">$key</span><span class="br0">&#93;</span>;
  <span class="br0">&#125;</span>
  <span style="color: #339933;">$i</span>++;
<span class="br0">&#125;</span><span style="color: #0000ff;">while</span><span class="br0">&#40;</span><span style="color: #339933;">$i</span>&lt;count<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
<span style="color: #339933;">$contacts</span>=<span style="color: #339933;">$copy</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;pre&gt;'</span>;
print_r<span class="br0">&#40;</span><span style="color: #339933;">$contacts</span><span class="br0">&#41;</span>;
<span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;/pre&gt;'</span>;
<span style="color: #808080;">/*</span>
<span style="color: #808080;">Array</span>
<span style="color: #808080;">(</span>
<span style="color: #808080;">&nbsp;   [0] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; BRUXELLES</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Aline</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [1] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Bernie</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [2] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Charlie</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [3] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; D&eacute;d&eacute;</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [4] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Esat</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [5] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; BELGIQUE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LIEGE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Framboise</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [6] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; AMIENS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Gus</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [7] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; AMIENS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Helma</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [8] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; BORDEAUX</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Isidore</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [9] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Jacqueline</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [10] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Kev</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [11] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Lolo</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [12] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Momo</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [13] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; N&eacute;nesse</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [14] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Otto</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [15] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; EUROPE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; FRANCE</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PARIS</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Pat</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [16] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PORT-GENTIL</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Quat</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [17] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PORT-GENTIL</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Rania</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [18] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; PORT-GENTIL</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Sembene</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [19] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; FRANCEVILLE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Tia</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [20] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Ugo</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [21] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Vasco</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [22] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Wemba</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [23] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Xenia</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [24] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Yam</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; H</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">&nbsp;   [25] =&gt; Array</span>
<span style="color: #808080;">&nbsp;       (</span>
<span style="color: #808080;">&nbsp;           [continent] =&gt; AFRIQUE</span>
<span style="color: #808080;">&nbsp;           [pays] =&gt; GABON</span>
<span style="color: #808080;">&nbsp;           [ville] =&gt; LAMBARENE</span>
<span style="color: #808080;">&nbsp;           [login] =&gt; Zelda</span>
<span style="color: #808080;">&nbsp;           [genre] =&gt; F</span>
<span style="color: #808080;">&nbsp;       )</span>
&nbsp;
<span style="color: #808080;">)</span></pre></td></tr></table></pre>
</div></blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b5600/belles-boucles-frisottis/</guid>
		</item>
		<item>
			<title><![CDATA[SQL : TD pour débutant : RAP : L'énoncé]]></title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b5418/sql-td-debutant-rap-l-enonce/</link>
			<pubDate>Sun, 20 May 2018 14:52:44 GMT</pubDate>
			<description>SQL : TD pour débutant :...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore">SQL : TD pour débutant : L'énoncé<br />
<br />
Votre tante, Nathalie CAVELIER née le 12/02/1975 est présidente d'un club de randonnées qui s'appelle le RAP (randonner autour de Paris).<br />
Elle vous demande de lui fournir grâcieusement une base de données et une application web.<br />
Dans ce TD, nous ne traiterons que la partie base de données, car les enjeux de la modélisation, ce sont les enjeux de la base de données.<br />
Pour l'application, nous verrons cela plus tard, dans un TD sur le développement web (qui traitera donc d'algorithmique).<br />
<br />
Après de longues explications avec Nathalie, vous comprenez ceci :<br />
Il y a des randonneurs, (presque un millier !) obligatoirement inscrits avec un mail, et c'est important de savoir leur sexe et leur âge, et si leur cotisation est à jour. La cotisation unique est de 100 euros par an, par année glissante. Mais bien sûr, le montant augmente de temps en temps.<br />
Il y a des organisateurs, ceux qui organisent les randos, qui les préparent avec leur degré de difficulté (&quot;promenade&quot;, &quot;randonnée&quot;, &quot;expert&quot;), puis qui les encadrent le jour J. Les organisateurs sont au nombre de 20 environ.<br />
Les randonneurs abonnés n'ont pas besoin de s'inscrire à une randonnée, ils se présentent directement au rendez-vous avec une pièce d'identité.<br />
Une fois la randonnée terminée, l'organisateur rentré chez lui doit saisir qui a participé à sa randonnée et le cas échéant, faire un commentaire sur la randonnée.<br />
Bien sûr, il faut gérer le fait qu'il y a un turn-over de randonneurs, un turn-over d'organisateurs, rien ni personne n'est éternel.<br />
<br />
L'application devra à terme faire tout ceci :<br />
- Relancer par mail les abonnés un mois avant que leur abonnement arrive à échéance.<br />
- Relancer par mail tous les 15 du mois les abonnés pour leur fournir un mail avec en pièce jointe l'excel de la liste des randonnées proposées le mois suivant(une chaque dimanche, mais Nathalie espère qu'on accélèrera bientôt la fréquence des randonnées proposées).<br />
Cet excel comprend évidemment un descriptif détaillé de chaque rando proposée : quel jour ? quelle heure ? intulé de la rando, difficulté, heure de départ, lieu de départ, temps de trajet aller, temps de trajet retour, temps de rando, heure de retour prévue, organisateur, coût estimé, apporter son pique-nique ou non, quelles chaussures sont recommandées...<br />
- Relancer par mail tous les 10 du mois les organisateurs pour leur demander de proposer des randonnées pour les 3 mois à venir.<br />
- Proposer aux organisateurs une interface pour saisir le compte-rendu de rando.<br />
<br />
C'est déjà pas mal non ?<br />
<br />
Si vous êtes intéressés par ce TD, je vous laisse une semaine pour faire une base de données rap, et vous servir de votre bon sens pour modéliser toutes ces données. Bonne chance, on se revoit la semaine prochaine pour en discuter ! Et je vous proposerai une solution.</blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b5418/sql-td-debutant-rap-l-enonce/</guid>
		</item>
		<item>
			<title>PDO une soupe et au lit !</title>
			<link>https://www.developpez.net/forums/blogs/244172-dendrite/b5417/pdo-soupe-lit/</link>
			<pubDate>Sun, 20 May 2018 11:33:42 GMT</pubDate>
			<description>1. Introduction 
 2. Exemple...</description>
			<content:encoded><![CDATA[<blockquote class="blogcontent restore"><ol class="decimal"><li style="">Introduction</li><li style="">Exemple pratique : structure de la table SQL</li><li style="">PDO Script de connexion à la base de données</li><li style="">Le bloc try &amp; catch : afficher les exceptions</li><li style="">Requête SELECT sans filtre : lister tous les enregistrements</li><li style="">Requête SELECT avec filtre : lister les enregistrements selon critères</li><li style="">Requête INSERT : ajouter un enregistrement</li><li style="">Requête UPDATE : modifier un enregistrement</li><li style="">Requête DELETE : supprimer un enregistrement</li><li style="">Astuces et erreurs courantes</li><li style="">Pour aller plus loin</li><li style="">Les participants à ce billet collaboratif</li></ol><br />
<br />
<font size="5">1 - Introduction</font><br />
<br />
PDO est une classe d’objets tout particulièrement dédiée à générer des variables PHP dynamiques (<b>ici nous ne traiterons que des tableaux associatifs</b>) en accédant à la base de données.<br />
PDO permet d’utiliser des requêtes préparées, et utilisées à bon escient, les requêtes préparées permettent d’éviter une attaque de votre base par un navigateur client (injection SQL). Pour les mêmes raisons, PDO gère proprement l’échappement.<br />
<br />
Ici, vous ne verrez <b>QUE la technique des requêtes préparées par marqueurs anonymes</b>. Pour utiliser la technique des requêtes préparées par marqueurs nommés, sauter au paragraphe 11 !<br />
<br />
Et si vous vous dites : elle est bien gentille, Dendrite, mais j'en fais quoi moi après, de son tableau PHP hein ? <br />
Ca me dit pas comment je vais le transformer en tableau HTML !<br />
C'est par ici, la suite logique de ce billet...<br />
<br />
<a href="https://www.developpez.net/forums/blogs/244172-dendrite/b5600/belles-boucles-frisottis/" target="_blank">De belles boucles sans frisottis</a><br />
<br />
<font size="5">2 - Exemple pratique : structure de la table SQL</font><br />
<br />
<font size="4">A - un identifiant unique</font><br />
<br />
L'id ou identifiant, c'est une information unique pour reconnaître facilement un enregistrement. Dans la réalité, ça peut être votre numéro de Sécu, votre login sur Developpez ou le numéro de ticket que vous prenez pour faire la queue chez le boucher. <br />
La façon la plus simple d'avoir un identifiant unique, c'est d'utiliser un chiffre et de faire ‘+1’ à chaque fois qu'une ligne est créée. Par défaut, un champ entier (INT) peut aller jusqu'à 2 147 483 647 (oui, plus de 2 milliards), ce qui veut dire qu'on peut créer une ligne toutes les secondes pendant 68 ans avant d'être à court de nombres.<br />
<br />
<font size="4">B – auto-incrémentation</font><br />
<br />
&quot;auto-incrémenté&quot;, ça veut tout simplement dire qu'on va demander à la base de faire le ‘+1’ à notre place. Pas besoin de réfléchir et de chercher quel est le numéro de la dernière ligne enregistrée, ça se fait automatiquement.<br />
<br />
<font size="4">C – La table contact</font><br />
<br />
Si vous n’avez pas de base disponible, créez une base nommée ma_base dans votre PHPMYADMIN.<br />
Et copiez-collez ce code SQL (dans la console SQL de PHPMYADMIN) qui vous construit et vous remplit une petite table de contacts.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span> <span style="color: #0000ff;">IF</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">EXISTS</span> <span style="color: #FF0000;">`contact`</span> <span class="br0">&#40;</span>
  <span style="color: #FF0000;">`id`</span> <span style="color: #0000ff;">int</span><span class="br0">&#40;</span><span style="color: #cc66cc;">11</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span> <span style="color: #0000ff;">AUTO_INCREMENT</span>,
  <span style="color: #FF0000;">`nom`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`prenom`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">100</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #FF0000;">`mail`</span> <span style="color: #0000ff;">varchar</span><span class="br0">&#40;</span><span style="color: #cc66cc;">200</span><span class="br0">&#41;</span> <span style="color: #0000ff;">NOT</span> <span style="color: #0000ff;">NULL</span>,
  <span style="color: #0000ff;">PRIMARY</span> <span style="color: #0000ff;">KEY</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span><span class="br0">&#41;</span>,
  <span style="color: #0000ff;">KEY</span> <span style="color: #FF0000;">`nom`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`nom`</span><span class="br0">&#41;</span>
<span class="br0">&#41;</span> <span style="color: #0000ff;">ENGINE</span>=InnoDB <span style="color: #0000ff;">AUTO_INCREMENT</span>=<span style="color: #cc66cc;">1</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">CHARSET</span>=utf8;
&nbsp;
<span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> <span style="color: #FF0000;">`contact`</span> <span class="br0">&#40;</span><span style="color: #FF0000;">`id`</span>, <span style="color: #FF0000;">`nom`</span>, <span style="color: #FF0000;">`prenom`</span>, <span style="color: #FF0000;">`mail`</span><span class="br0">&#41;</span> <span style="color: #0000ff;">VALUES</span>
<span class="br0">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #FF0000;">'ACCOYER'</span>, <span style="color: #FF0000;">'Alain'</span>, <span style="color: #FF0000;">'alain.accoyer@gmail.com'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #FF0000;">'BRABOIS'</span>, <span style="color: #FF0000;">'Bernard'</span>, <span style="color: #FF0000;">'bbrabois@yahoo.fr'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #FF0000;">'CHAZAL'</span>, <span style="color: #FF0000;">'Claire'</span>, <span style="color: #FF0000;">'chaz@wanadoo.fr'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">4</span>, <span style="color: #FF0000;">'DENDRITE'</span>, <span style="color: #FF0000;">'Daisy'</span>, <span style="color: #FF0000;">'dendy@gmail.com'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">5</span>, <span style="color: #FF0000;">'CHAZAL'</span>, <span style="color: #FF0000;">'Etienne'</span>, <span style="color: #FF0000;">'chazet@gmail.com'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">6</span>, <span style="color: #FF0000;">'CHAZAL'</span>, <span style="color: #FF0000;">'Chantal'</span>, <span style="color: #FF0000;">'chacha@monfai.fr'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">7</span>, <span style="color: #FF0000;">'CHAZAL'</span>, <span style="color: #FF0000;">'Kevin'</span>, <span style="color: #FF0000;">'kevcha@noos.fr'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">8</span>, <span style="color: #FF0000;">'ZANZIBAR'</span>, <span style="color: #FF0000;">'Zo&eacute;'</span>, <span style="color: #FF0000;">'zanzo@orange.ocm'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">9</span>, <span style="color: #FF0000;">'CASERATI'</span>, <span style="color: #FF0000;">'Michel'</span>, <span style="color: #FF0000;">'michoucase@voila.fr'</span><span class="br0">&#41;</span>,
<span class="br0">&#40;</span><span style="color: #cc66cc;">10</span>, <span style="color: #FF0000;">'FRIPON'</span>, <span style="color: #FF0000;">'Fran&ccedil;oise'</span>, <span style="color: #FF0000;">'francoise.fripon@gmail.com'</span><span class="br0">&#41;</span>;</pre></td></tr></table></pre>
</div><br />
<font size="5">3a - PDO - Script de connexion à la base de donnees</font><br />
<br />
A la racine de votre site, dans le répertoire www si vous êtes sous WAMP, vous créez un fichier db_mysql.php.<br />
Et vous collez le code suivant :<br />
Bien sûr, vous changez ce qui a besoin de l’être dans les valeurs de votre connexion.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #808080;">// @author : rawsrc - 2018 - Pour DVP</span></span>
<span style="color: black;"><span style="color: #808080;">// on v&eacute;rifie si la fonction de connexion a d&eacute;j&agrave; &eacute;t&eacute; d&eacute;finie afin d'&eacute;viter de la red&eacute;finir</span></span>
<span style="color: black;"><span style="color: #0000ff;">if</span> <span class="br0">&#40;</span> ! function_exists<span class="br0">&#40;</span><span style="color: #FF0000;">'db_connexion'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #0000ff;">function</span> db_connexion<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">      <span style="color: #808080;">// une fois ouverte, on renvoie toujours la m&ecirc;me connexion</span></span>
<span style="color: black;">      <span style="color: #0000ff;">static</span> <span style="color: #339933;">$pdo</span>;</span>
<span style="color: black;">      <span style="color: #808080;">// on v&eacute;rifie si la connexion n'a pas d&eacute;j&agrave; &eacute;t&eacute; initialis&eacute;e</span></span>
<span style="color: black;">      <span style="color: #0000ff;">if</span> <span class="br0">&#40;</span> ! <span class="br0">&#40;</span><span style="color: #339933;">$pdo</span> <span style="color: #0000ff;">instanceof</span> PDO<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">         <span style="color: #808080;">// tentative d'ouverture de la connexion MySQL</span></span>
<span style="color: black;">         <span style="color: #0000ff;">try</span> <span class="br0">&#123;</span></span>
<span style="color: black;">            <span style="color: #339933;">$pdo</span> = <span style="color: #0000ff;">new</span> PDO<span class="br0">&#40;</span><span style="color: #FF0000;">'mysql:host=localhost;port=3306;dbname=ma_base;charset=utf8'</span>,<span style="color: #FF0000;">'root'</span>, <span style="color: #FF0000;">''</span>, <span class="br0">&#91;</span></span>
<span style="color: black;">            PDO::ATTR_ERRMODE            =&gt; PDO::ERRMODE_EXCEPTION,</span>
<span style="color: black;">            PDO::ATTR_EMULATE_PREPARES   =&gt; <span style="color: #0080ff;">false</span></span>
<span style="color: black;">            <span class="br0">&#93;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">         <span class="br0">&#125;</span> </span>
<span style="color: black;">         <span style="color: #0000ff;">catch</span> <span class="br0">&#40;</span>PDOException <span style="color: #339933;">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">            <span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> InvalidArgumentException<span class="br0">&#40;</span><span style="color: #FF0000;">'Erreur connexion &agrave; la base de donn&eacute;es : '</span>.<span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">            <span style="color: #0000ff;">exit</span>;</span>
<span style="color: black;">         <span class="br0">&#125;</span></span>
<span style="color: black;">      <span class="br0">&#125;</span></span>
<span style="color: black;">      <span style="color: #808080;">// renvoi de la ressource : connexion &agrave; la base de donn&eacute;es</span></span>
<span style="color: black;">      <span style="color: #0000ff;">return</span> <span style="color: #339933;">$pdo</span>;</span>
<span style="color: black;">   <span class="br0">&#125;</span></span>
<span style="color: black;"><span class="br0">&#125;</span></span>
<span style="color: black;"><span style="color: #0000ff;">return</span> db_connexion<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span></pre></td></tr></table></pre>
</div><br />
Comment tester votre connexion maintenant ?<br />
En mettant juste cette ligne, sur un fichier test.php au même niveau que votre fichier db_mysql.php :<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #339933;">$db</span> = <span style="color: #0000ff;">include</span> <span style="color: #FF0000;">'db_mysql.php'</span>;</pre>
</div>S'il ne génère rien, c'est à dire pas d'erreur : C'est que la connexion est bonne !<br />
Vous pouvez supprimer le fichier test.php et passer à la suite...<br />
<br />
<font size="5">3b - PDO - fermer la connexion, c'est bien.</font><br />
Et c'est tout simple en plus !<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">unset</span><span class="br0">&#40;</span><span style="color: #339933;">$db</span><span class="br0">&#41;</span>;</pre>
</div>Là, pour les exemples, j'ouvre et je ferme à chaque requête parce que je souhaite vous livrer un code directement fonctionnel.<br />
Mais comprenez-bien que sur un script, vous ouvrirez la connexion, vous ferez peut-être dix requêtes, de select, d'update, d'insert, toujours avec la même connexion et vous ne la fermerez qu'en fin de page.<br />
<br />
<font size="5">4 – Le bloc try catch : afficher les exceptions</font><br />
<br />
Maintenant, vous pouvez mettre ceci sur un nouveau fichier test.php, pour comprendre à quoi sert un bloc try and catch, et la gestion des exceptions (messages d'erreurs).<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:180px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">try</span><span class="br0">&#123;</span> 
   <span style="color: #808080;">//ici vous &eacute;crivez tout votre script</span>
   <span style="color: #808080;">//jusqu&#146;&agrave; la fin, s&#146;il y a une exception, elle sera intercept&eacute;e par le catch</span>
   <span style="color: #808080;">//on fait expr&egrave;s d'&eacute;crire une b&ecirc;tise ici</span>
   <span style="color: #808080;">//$i=0;</span>
   <span style="color: #0000ff;">echo</span> <span style="color: #339933;">$i</span>;
<span class="br0">&#125;</span> 
<span style="color: #0000ff;">catch</span><span class="br0">&#40;</span>Exception <span style="color: #339933;">$e</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
   <span style="color: #808080;">//s'il y a un probleme PHP ou SQL, que ce soit un warning ou une erreur fatale, tout s'affichera ici</span>
   <span style="color: #0000ff;">print</span> <span style="color: #FF0000;">&quot;Erreur ! &quot;</span> . <span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> . <span style="color: #FF0000;">&quot;&lt;br/&gt;&quot;</span>;
<span class="br0">&#125;</span></pre></td></tr></table></pre>
</div><br />
<font size="5">5 - Requête SELECT sans filtre : lister tous les enregistrements</font><br />
<br />
Testez bien la requête dans votre PHPMYADMIN d’abord !<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:72px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">SELECT</span> *
<span style="color: #0000ff;">FROM</span> contact
<span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> nom, prenom;</pre></td></tr></table></pre>
</div><br />
Quand tout fonctionne, on crée une page &quot;contact.php&quot; que l'on positionne à la racine de notre site (toujours au même niveau que notre autre page &quot;db_mysql.php&quot;. Elle contient ceci :<br />
On n’a que la variable $sql à changer.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #808080;">//pas de filtre</span></span>
<span style="color: black;"><span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'SELECT *</span></span>
<span style="color: black;"><span style="color: #FF0000;">FROM contact</span></span>
<span style="color: black;"><span style="color: #FF0000;">ORDER BY nom, prenom;'</span>;</span>
<span style="color: black;"><span style="color: #808080;">//on initialise notre tableau PHP</span></span>
<span style="color: black;"><span style="color: #339933;">$data</span>=<span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span style="color: #339933;">$db</span> = <span style="color: #0000ff;">include</span> <span style="color: #FF0000;">'db_mysql.php'</span>; </span>
<span style="color: black;"><span style="color: #0000ff;">try</span><span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//la ligne qui lance la requ&ecirc;te pr&eacute;par&eacute;e</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;prepare<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//pas de filtres donc pas de param&egrave;tres</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span>-&gt;execute<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//$data est un tableau de tableaux associatifs directement exploitable ensuite dans une boucle foreach</span></span>
<span style="color: black;">   <span style="color: #339933;">$data</span>= <span style="color: #339933;">$stmt</span>-&gt;fetchAll<span class="br0">&#40;</span>PDO::FETCH_ASSOC<span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">unset</span><span class="br0">&#40;</span><span style="color: #339933;">$db</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//$data est complet</span></span>
<span style="color: black;">   <span style="color: #0000ff;">if</span><span class="br0">&#40;</span>count<span class="br0">&#40;</span><span style="color: #339933;">$data</span><span class="br0">&#41;</span>&gt;<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span>
<span style="color: black;">      <span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;pre&gt;'</span>;</span>
<span style="color: black;">      print_r<span class="br0">&#40;</span><span style="color: #339933;">$data</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">      <span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;/pre&gt;'</span>;</span>
<span style="color: black;">   <span class="br0">&#125;</span></span>
<span style="color: black;">   <span style="color: #808080;">//ceci n'est pas une exception </span></span>
<span style="color: black;">   <span style="color: #808080;">//il n'y a peut-etre pas encore de donnees dans la table !</span></span>
<span style="color: black;">   <span style="color: #0000ff;">else</span><span class="br0">&#123;</span></span>
<span style="color: black;">      <span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'Aucun resultat pour cette requete'</span>;</span>
<span style="color: black;">   <span class="br0">&#125;</span></span>
<span style="color: black;"><span class="br0">&#125;</span> </span>
<span style="color: black;"><span style="color: #0000ff;">catch</span> <span class="br0">&#40;</span>Exception <span style="color: #339933;">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//s'il y a un probleme PHP ou SQL, tout s'affichera ici</span></span>
<span style="color: black;">   <span style="color: #0000ff;">print</span> <span style="color: #FF0000;">&quot;Erreur ! &quot;</span> . <span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> . <span style="color: #FF0000;">&quot;&lt;br/&gt;&quot;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span></pre></td></tr></table></pre>
</div><br />
<font size="5">6 - Requête SELECT avec filtre : lister les enregistrements selon critères</font><br />
<br />
Si par ailleurs, vous souhaitez introduire des filtres à votre requête, votre page contact.php devra être construite comme suit :<br />
On veut faire remonter tous les contacts dont le nom est « CHAZAL » et dont le prénom commence par « C » et dont l’id est strictement supérieur à 2, ce qui doit nous retourner 2 enregistrements :<br />
Testez bien la requête dans votre PHPMYADMIN d’abord !<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">SELECT</span> id, nom, prenom, mail
<span style="color: #0000ff;">FROM</span> contact
<span style="color: #0000ff;">WHERE</span> nom=<span style="color: #FF0000;">&quot;CHAZAL&quot;</span> <span style="color: #0000ff;">and</span> prenom <span style="color: #0000ff;">like</span> <span style="color: #FF0000;">&quot;C%&quot;</span> <span style="color: #0000ff;">and</span> id &gt; <span style="color: #cc66cc;">2</span>
<span style="color: #0000ff;">ORDER</span> <span style="color: #0000ff;">BY</span> nom, prenom;</pre></td></tr></table></pre>
</div><br />
On positionne la page contact.php à la racine de notre site. Elle contient ceci :<br />
On doit changer la variable $sql et la ligne $stmt-&gt;execute pour placer les valeurs précises de filtres dans l’ordre.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #808080;">//on supprime les guillemets d&#146;une cha&icirc;ne SQL, PDO s&#146;en occupera</span></span>
<span style="color: black;"><span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'SELECT id, nom, prenom, mail</span></span>
<span style="color: black;"><span style="color: #FF0000;">FROM contact</span></span>
<span style="color: black;"><span style="color: #FF0000;">WHERE nom= ? and prenom like ? and id &gt; ?</span></span>
<span style="color: black;"><span style="color: #FF0000;">ORDER BY nom, prenom;'</span>;</span>
<span style="color: black;"><span style="color: #808080;">//on initialise notre tableau PHP</span></span>
<span style="color: black;"><span style="color: #339933;">$data</span>=<span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span style="color: #339933;">$db</span> = <span style="color: #0000ff;">include</span> <span style="color: #FF0000;">'db_mysql.php'</span>; </span>
<span style="color: black;"><span style="color: #0000ff;">try</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//la ligne qui lance la requ&ecirc;te pr&eacute;par&eacute;e</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;prepare<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//on affecte les marqueurs pr&eacute;cis sur les filtres</span></span>
<span style="color: black;">   <span style="color: #808080;">//en vrai, vous aurez plut&ocirc;t des variables de type POST envoy&eacute;es par un formulaire</span></span>
<span style="color: black;">   <span style="color: #339933;">$nom</span>=<span style="color: #FF0000;">'CHAZAL'</span>;</span>
<span style="color: black;">   <span style="color: #339933;">$prenom_debut</span>=<span style="color: #FF0000;">'C%'</span>;</span>
<span style="color: black;">   <span style="color: #339933;">$id_superieur_a</span>=<span style="color: #cc66cc;">2</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//Attention, bien mettre dans l'ordre de la requ&ecirc;te ! nom puis prenom_debut puis $id_superieur_a</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span>-&gt;execute<span class="br0">&#40;</span><span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #339933;">$nom</span>,<span style="color: #339933;">$prenom_debut</span>,<span style="color: #339933;">$id_superieur_a</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//$data est un tableau de tableaux associatifs directement exploitable ensuite dans une boucle foreach</span></span>
<span style="color: black;">   <span style="color: #339933;">$data</span>= <span style="color: #339933;">$stmt</span>-&gt;fetchAll<span class="br0">&#40;</span>PDO::FETCH_ASSOC<span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">unset</span><span class="br0">&#40;</span><span style="color: #339933;">$db</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//$data est complet</span></span>
<span style="color: black;">   <span style="color: #0000ff;">if</span><span class="br0">&#40;</span>count<span class="br0">&#40;</span><span style="color: #339933;">$data</span><span class="br0">&#41;</span>&gt;<span style="color: #cc66cc;">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span></span>
<span style="color: black;">      <span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;pre&gt;'</span>;</span>
<span style="color: black;">      print_r<span class="br0">&#40;</span><span style="color: #339933;">$data</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">      <span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'&lt;/pre&gt;'</span>;</span>
<span style="color: black;">   <span class="br0">&#125;</span></span>
<span style="color: black;">   <span style="color: #808080;">//ceci n'est pas une exception </span></span>
<span style="color: black;">   <span style="color: #808080;">//il n'y a peut etre pas de CHAZAL avec un pr&eacute;nom qui commence par un C et dont l&#146;id est strictement sup&eacute;rieur &agrave; 2</span></span>
<span style="color: black;">   <span style="color: #0000ff;">else</span><span class="br0">&#123;</span></span>
<span style="color: black;">      <span style="color: #0000ff;">echo</span> <span style="color: #FF0000;">'Aucun resultat pour cette requete'</span>;</span>
<span style="color: black;">   <span class="br0">&#125;</span></span>
<span style="color: black;"><span class="br0">&#125;</span> <span style="color: #0000ff;">catch</span> <span class="br0">&#40;</span>Exception <span style="color: #339933;">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//s'il y a un probl&egrave;me PHP ou SQL, tout s'affichera ici</span></span>
<span style="color: black;">   <span style="color: #0000ff;">print</span> <span style="color: #FF0000;">&quot;Erreur ! &quot;</span> . <span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> . <span style="color: #FF0000;">&quot;&lt;br/&gt;&quot;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span></pre></td></tr></table></pre>
</div><br />
<font size="5">7 - Requête INSERT : ajouter un enregistrement</font><br />
<br />
Si par ailleurs, vous souhaitez insérer des données dans votre table, votre page contact.php devra être construite comme suit.<br />
<br />
On veut insérer un nouveau contact.<br />
Testez bien la requête dans votre PHPMYADMIN d’abord !<br />
Si la requête SQL fonctionne, pensez-bien à supprimer Mme GAILLARD de votre table via PHPMYADMIN, avant de passer à la suite.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">INSERT</span> <span style="color: #0000ff;">INTO</span> contact <span class="br0">&#40;</span>id, nom, prenom, mail<span class="br0">&#41;</span> <span style="color: #0000ff;">VALUES</span> <span class="br0">&#40;</span><span style="color: #0000ff;">NULL</span>, <span style="color: #FF0000;">'GAILLARD'</span>, <span style="color: #FF0000;">'Genevi&egrave;ve'</span>, <span style="color: #FF0000;">'genevieve.gaillard@gmail.com'</span><span class="br0">&#41;</span>;</pre>
</div>On positionne la page contact.php à la racine de notre site. Elle contient ceci :<br />
On doit changer la variable $sql et la ligne $stmt-&gt;execute pour placer les valeurs précises de filtres dans l’ordre.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #808080;">//on supprime les guillemets d&#146;une cha&icirc;ne SQL, PDO s&#146;en occupera</span></span>
<span style="color: black;"><span style="color: #808080;">//on remplace l&#146;id auto-increment par NULL, la table s&#146;en chargera</span></span>
<span style="color: black;"><span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'INSERT INTO contact (id, nom, prenom, mail) VALUES (NULL, ?, ?, ?)'</span>;</span>
<span style="color: black;"><span style="color: #339933;">$db</span> = <span style="color: #0000ff;">include</span> <span style="color: #FF0000;">'db_mysql.php'</span>;</span>
<span style="color: black;"><span style="color: #0000ff;">try</span> <span class="br0">&#123;</span> </span>
<span style="color: black;">   <span style="color: #808080;">//la ligne qui lance la requ&ecirc;te pr&eacute;par&eacute;e</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;prepare<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//on affecte les marqueurs pr&eacute;cis sur les filtres</span></span>
<span style="color: black;">   <span style="color: #808080;">//en vrai, vous aurez plut&ocirc;t des variables de type POST envoy&eacute;es par un formulaire</span></span>
<span style="color: black;">   <span style="color: #339933;">$nom</span>=<span style="color: #FF0000;">'GAILLARD'</span>;</span>
<span style="color: black;">   <span style="color: #339933;">$prenom</span>=<span style="color: #FF0000;">'Genevi&egrave;ve'</span>;</span>
<span style="color: black;">   <span style="color: #339933;">$mail</span>=<span style="color: #FF0000;">'genevieve.gaillard@gmail.com'</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//Attention, bien mettre dans l'ordre de la requ&ecirc;te ! Nom puis prenom puis mail</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span>-&gt;execute<span class="br0">&#40;</span><span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #339933;">$nom</span>,<span style="color: #339933;">$prenom</span>,<span style="color: #339933;">$mail</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ;</span>
<span style="color: black;">   <span style="color: #808080;">// on peut r&eacute;cup&eacute;rer le nombre de lignes affect&eacute;es </span></span>
<span style="color: black;">   <span style="color: #339933;">$nb_insert</span> = <span style="color: #339933;">$stmt</span>-&gt;rowCount<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">echo</span> <span style="color: #339933;">$nb_insert</span>.<span style="color: #FF0000;">' insertion effectu&eacute;e&lt;br/&gt;'</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">unset</span><span class="br0">&#40;</span><span style="color: #339933;">$db</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span> </span>
<span style="color: black;"><span style="color: #0000ff;">catch</span> <span class="br0">&#40;</span>Exception <span style="color: #339933;">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//s'il y a un probl&egrave;me PHP ou SQL, tout s'affichera ici</span></span>
<span style="color: black;">   <span style="color: #0000ff;">print</span> <span style="color: #FF0000;">&quot;Erreur ! &quot;</span> . <span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> . <span style="color: #FF0000;">&quot;&lt;br/&gt;&quot;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span></pre></td></tr></table></pre>
</div><br />
<font size="5">8 - Requête UPDATE : modifier un enregistrement</font><br />
<br />
Si par ailleurs, vous souhaitez modifier des données existantes dans votre table, votre page contact.php devra être construite comme suit.<br />
<br />
On veut corriger le mail de Mme ZANZIBAR, car on a mis .ocm au lieu de .com.<br />
Testez bien la requête dans votre PHPMYADMIN d’abord !<br />
Si la requête SQL fonctionne, pensez-bien ensuite à remette l’erreur ‘orange.ocm’ via PHPMYADMIN, avant de passer à la suite.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">UPDATE</span> contact <span style="color: #0000ff;">SET</span> mail = <span style="color: #FF0000;">'zanzo@orange.com'</span> <span style="color: #0000ff;">WHERE</span> contact.id = <span style="color: #cc66cc;">8</span>;</pre>
</div>On positionne la page contact.php à la racine de notre site. Elle contient ceci :<br />
On doit changer la variable $sql et la ligne $stmt-&gt;execute pour placer les valeurs précises de filtres dans l’ordre.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #808080;">//on supprime les guillemets d&#146;une cha&icirc;ne SQL, PDO s&#146;en occupera</span></span>
<span style="color: black;"><span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'UPDATE contact SET mail = ? WHERE contact.id = ?;'</span>;</span>
<span style="color: black;"><span style="color: #339933;">$db</span> = <span style="color: #0000ff;">include</span> <span style="color: #FF0000;">'db_mysql.php'</span>;</span>
<span style="color: black;"><span style="color: #0000ff;">try</span> <span class="br0">&#123;</span> </span>
<span style="color: black;">   <span style="color: #808080;">//la ligne qui lance la requ&ecirc;te pr&eacute;par&eacute;e</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;prepare<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//on affecte les marqueurs pr&eacute;cis sur les filtres</span></span>
<span style="color: black;">   <span style="color: #808080;">//en vrai, vous aurez plut&ocirc;t des variables de type POST envoy&eacute;es par un formulaire</span></span>
<span style="color: black;">   <span style="color: #339933;">$mail</span>=<span style="color: #FF0000;">'zanzo@orange.com'</span>;</span>
<span style="color: black;">   <span style="color: #339933;">$id</span>=<span style="color: #cc66cc;">8</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//Attention, bien mettre dans l'ordre de la requ&ecirc;te !  mail puis id</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span>-&gt;execute<span class="br0">&#40;</span><span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #339933;">$mail</span>,<span style="color: #339933;">$id</span><span class="br0">&#41;</span><span class="br0">&#41;</span> ;</span>
<span style="color: black;">   <span style="color: #808080;">// on peut r&eacute;cup&eacute;rer le nombre de lignes affect&eacute;es </span></span>
<span style="color: black;">   <span style="color: #339933;">$nb_update</span> = <span style="color: #339933;">$stmt</span>-&gt;rowCount<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">echo</span> <span style="color: #339933;">$nb_update</span>.<span style="color: #FF0000;">' modif effectu&eacute;e&lt;br/&gt;'</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">unset</span><span class="br0">&#40;</span><span style="color: #339933;">$db</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span> <span style="color: #0000ff;">catch</span> <span class="br0">&#40;</span>Exception <span style="color: #339933;">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//s'il y a un probl&egrave;me PHP ou SQL, tout s'affichera ici</span></span>
<span style="color: black;">   <span style="color: #0000ff;">print</span> <span style="color: #FF0000;">&quot;Erreur ! &quot;</span> . <span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> . <span style="color: #FF0000;">&quot;&lt;br/&gt;&quot;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span></pre></td></tr></table></pre>
</div><br />
<font size="5">9 - Requête DELETE : supprimer un enregistrement</font><br />
<br />
Si par ailleurs, vous souhaitez supprimer des données dans votre table, votre page contact.php devra être construite comme suit.<br />
<br />
On veut supprimer l’enregistrement Chantal CHAZAL, car son mail n’existe pas.<br />
Testez bien la requête dans votre PHPMYADMIN d’abord !<br />
Si la requête SQL fonctionne, pensez-bien à remettre Chantal CHAZAL dans votre table via PHPMYADMIN, avant de passer à la suite, et repérez son nouvel id !<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code SQL :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:36px;"><span style="color: #0000ff;">DELETE</span> <span style="color: #0000ff;">FROM</span> contact <span style="color: #0000ff;">WHERE</span> contact.id = <span style="color: #cc66cc;">6</span>;</pre>
</div>On positionne la page contact.php à la racine de notre site. Elle contient ceci :<br />
On doit changer la variable $sql et la ligne $stmt-&gt;execute pour placer les valeurs précises de filtres dans l’ordre.<br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:204px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: black;"><span style="color: #0080ff;">&lt;?php</span></span>
<span style="color: black;"><span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'DELETE FROM contact WHERE contact.id = ?;'</span>;</span>
<span style="color: black;"><span style="color: #339933;">$db</span> = <span style="color: #0000ff;">include</span> <span style="color: #FF0000;">'db_mysql.php'</span>;</span>
<span style="color: black;"><span style="color: #0000ff;">try</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//la ligne qui lance la requ&ecirc;te pr&eacute;par&eacute;e</span></span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span> = <span style="color: #339933;">$db</span>-&gt;prepare<span class="br0">&#40;</span><span style="color: #339933;">$sql</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">//on affecte le marqueur pr&eacute;cis sur le filtre</span></span>
<span style="color: black;">   <span style="color: #808080;">//en vrai, vous aurez plut&ocirc;t des variables de type POST envoy&eacute;es par un formulaire</span></span>
<span style="color: black;">   <span style="color: #339933;">$id</span>=<span style="color: #cc66cc;">6</span>;</span>
<span style="color: black;">   <span style="color: #339933;">$stmt</span>-&gt;execute<span class="br0">&#40;</span><span style="color: #0000ff;">array</span><span class="br0">&#40;</span><span style="color: #339933;">$id</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #808080;">// on peut r&eacute;cup&eacute;rer le nombre de lignes affect&eacute;es </span></span>
<span style="color: black;">   <span style="color: #339933;">$nb_delete</span> = <span style="color: #339933;">$stmt</span>-&gt;rowCount<span class="br0">&#40;</span><span class="br0">&#41;</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">echo</span> <span style="color: #339933;">$nb_delete</span>.<span style="color: #FF0000;">' suppression effectu&eacute;e&lt;br/&gt;'</span>;</span>
<span style="color: black;">   <span style="color: #0000ff;">unset</span><span class="br0">&#40;</span><span style="color: #339933;">$db</span><span class="br0">&#41;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span> </span>
<span style="color: black;"><span style="color: #0000ff;">catch</span> <span class="br0">&#40;</span>Exception <span style="color: #339933;">$e</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>
<span style="color: black;">   <span style="color: #808080;">//s'il y a un probl&egrave;me PHP ou SQL, tout s'affichera ici</span></span>
<span style="color: black;">   <span style="color: #0000ff;">print</span> <span style="color: #FF0000;">&quot;Erreur ! &quot;</span> . <span style="color: #339933;">$e</span>-&gt;getMessage<span class="br0">&#40;</span><span class="br0">&#41;</span> . <span style="color: #FF0000;">&quot;&lt;br/&gt;&quot;</span>;</span>
<span style="color: black;"><span class="br0">&#125;</span></span></pre></td></tr></table></pre>
</div><br />
<font size="5">10 - Astuces et erreurs courantes</font><br />
<br />
<font size="4"><font color="#FF0000">1 - A proscrire totalement et pour toujours</font></font><br />
<div class="bbcode_container">
	<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr>
	<td style="border: 0; padding: 0; text-align: left">Code PHP :</td>
	<td style="border: 0; padding: 0; text-align: right"><a href="#" onclick="return ano_selectionnerCode(this);">Sélectionner tout</a> -
	<a href="#" onclick="return ano_etendreCode(this);">Visualiser dans une fenêtre à part</a></td></tr></table>
	<pre class="bbcode_code" style="height:84px;"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">$sql</span>=<span style="color: #FF0000;">'SELECT id, nom, prenom, mail</span>
<span style="color: #FF0000;">FROM contact</span>
<span style="color: #FF0000;">WHERE nom=&quot;'</span>.<span style="color: #339933;">$_POST</span><span class="br0">&#91;</span><span style="color: #FF0000;">'nom'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&quot; and prenom like &quot;'</span>.<span style="color: #339933;">$_POST</span><span class="br0">&#91;</span><span style="color: #FF0000;">'prenom_debut'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'&quot; and id &gt; '</span>.<span style="color: #339933;">$_POST</span><span class="br0">&#91;</span><span style="color: #FF0000;">'id_min'</span><span class="br0">&#93;</span>.<span style="color: #FF0000;">'</span>
<span style="color: #FF0000;">ORDER BY nom, prenom;'</span>;</pre></td></tr></table></pre>
</div>Ceci est la porte ouverte aux injections SQL. PDO en soi ne prévient pas les injections SQL.<br />
<a href="https://fr.wikipedia.org/wiki/Injection_SQL" target="_blank">https://fr.wikipedia.org/wiki/Injection_SQL</a><br />
Il vous faut utiliser PDO + les requêtes préparées telles qu’exposées ci-dessus.<br />
<br />
2  - PDO plus obscur ?<br />
On peut se dire la chose suivante : Ce qui était bien avec la requête ci-dessus, c’est qu’un simple <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">echo $sql;</span> nous permettait de copier-coller et de tester dans phpmyadmin que tout était bon. Et ça, ce n’est plus possible avec PDO, le rendant plus obscur. <br />
Pourtant, il faut juste inverser la démarche, et ça reste aussi simple. Comme montré dans cet article, on commence par une requête qui fonctionne dans phpmyadmin. Dans <span style="font-family: monospace; padding: 2px; background: #ddd; display: inline-block">$sql</span>, on met des points d’interrogation à la place des valeurs en dur… et enfin, on reporte les valeurs variables PHP dans le array() des paramètres.<br />
<br />
<font size="5">11 – Pour aller plus loin</font><br />
<br />
Ici nous avons fait le choix de n’utiliser QUE des marqueurs anonymes (points d’interrogation).<br />
Pour utiliser des marqueurs nommés, car nombre de développeurs trouvent cette méthode plus lisible, merci de lire ce tutoriel qui va bien plus loin que ce petit article d’initiation:<br />
PDO niveau 2 (placeholders)<br />
<a href="https://fmaz.developpez.com/tutoriels/php/comprendre-pdo/" target="_blank">https://fmaz.developpez.com/tutoriel...omprendre-pdo/</a><br />
<br />
<font size="5">12 – Les participants à ce billet collaboratif</font><br />
<br />
Ceci est un billet collaboratif : Un grand merci donc à tous les participants !<br />
Dans l’ordre alphabétique :<br />
- Andry.ayme<br />
- Celira<br />
- Dendrite<br />
- Jreaux62<br />
- MaitrePylos<br />
- ProgElect<br />
- Rawsrc<br />
- Willy_k<br />
Et merci à LaurentSc pour avoir testé les codes !</blockquote>

]]></content:encoded>
			<dc:creator>Dendrite</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/blogs/244172-dendrite/b5417/pdo-soupe-lit/</guid>
		</item>
	</channel>
</rss>
