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

<channel>
	<title>Awelty : société de création de site - Référencement - Amiens, Somme, Picardie &#187; sql</title>
	<atom:link href="http://www.awelty.fr/tag/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.awelty.fr</link>
	<description>Agence web à Amiens</description>
	<lastBuildDate>Fri, 16 Dec 2011 17:00:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>[PHP] Mise en cache d&#8217;un tableau de données SQL</title>
		<link>http://www.awelty.fr/developpement-web/php-mise-en-cache-d-un-tableau-de-donnees-sql/</link>
		<comments>http://www.awelty.fr/developpement-web/php-mise-en-cache-d-un-tableau-de-donnees-sql/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 19:00:00 +0000</pubDate>
		<dc:creator>Tony Samson</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[cache php]]></category>
		<category><![CDATA[mise en cache]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[serialize]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.awelty.fr/v5/e-monsite/php-mise-en-cache-d-un-tableau-de-donnees-sql/</guid>
		<description><![CDATA[Pour faire suite à mon billet sur l&#8217;optimisation PHP/SQL d&#8217;un site web, voici une méthode pour mettre en cache des données issues d&#8217;une requête SQL de type SELECT. Php propose deux fonctions aussi puissantes qu&#8217;utiles (mais aussi méconnues) : serialize et unserialize. Serialialize compresse (linéarise) un tableau Php Unserialize le décompresse (ou délinéarise), tout simplement. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Pour faire suite à mon billet sur l&#8217;<a href="/index.php?post/2008/04/09/Des-pistes-pour-optimiser-les-performances-dacces-dun-site-web">optimisation PHP/SQL d&#8217;un site web</a>, voici une méthode pour mettre en cache des données issues d&#8217;une requête SQL de type SELECT.</p>
<p>Php propose deux fonctions aussi puissantes qu&#8217;utiles (mais aussi méconnues) : serialize et unserialize.</p>
<ul>
<li><a href="http://fr.php.net/serialize">Serialialize</a> compresse (<em>linéarise</em>) un tableau Php</li>
<li><a href="http://fr.php.net/manual/fr/function.unserialize.php">Unserialize</a> le décompresse (ou <em>délinéarise</em>), tout simplement.</li>
</ul>
<p style="text-align: justify;"><strong>A partir de là, l&#8217;idée paraît s&#8217;imposer d&#8217;elle même : </strong>pour certaines requêtes qui sont énormément exécutées et/ou qui sont très lourdes (par exemple les données d&#8217;un membre utilisées sur toutes les pages d&#8217;un site), pourquoi ne pas mettre en cache le tableau issu d&#8217;un mysql_fetch_array() ? Ainsi, une fois que la requête a été exécuté on n&#8217;accède plus à la base de donnée, on récupère le tableau de données dans un fichier texte puis on le décompresse.</p>
<p>La première fonction permet, tout simplement, d&#8217;écrire dans un fichier (en le créant, le cas échéant) :</p>
<p><code>&lt;?<br />
function maj_fichier($file,$valeur)<br />
{<br />
$fp = fopen("$file","w+"); // ouverture du fichier en écriture (on le créé s'il n'existe pas)<br />
fputs($fp, $valeur); // on écrit dans le fichier<br />
fclose($fp);<br />
}<br />
?&gt;</code></p>
<p>La seconde &#8211; et c&#8217;est la fonction qui nous intéresse &#8211; est la fonction de mise en cache :</p>
<p>(pour l&#8217;utiliser vous aurez besoin de la fonction maj_fichier() ci-dessus et de la fonction requete_sql disponible sur <a href="/index.php?post/2008/07/23/4-fonctions-php-pour-effectuer-des-requetes-SQL">ce billet</a>)</p>
<p><code>&lt;?<br />
function MiseEnCache($nomFichier,$table,$where,$champs)<br />
{</code></p>
<p>if(file_exists($nomFichier)) // si les variables sont en cache<br />
{<br />
$requete = unserialize(lire_fichier($nomFichier)); // on utilise le fichier cache (unserialize = decompresser le tableau)<br />
}<br />
else // sinon on fait la requete sql<br />
{<br />
$requete = requete_sql($table, $champs, $where);<br />
maj_fichier($nomFichier, serialize($requete)); // on place le resultat du tableau dans un fichier (serialize = compresser le tableau)<br />
}</p>
<p>return $requete;<br />
}<br />
?&gt;</p>
<p>Exemple d&#8217;utilisation :</p>
<p><code>&lt;?<br />
$req_membre=MiseEnCache("/cache/membres/membre-".$id_membre.".txt","membres", "id='$id_membre'", "prenom,nom,date_inscription,login");</code></p>
<p>echo&nbsp;&raquo;Bienvenue &laquo;&nbsp;.$req_membre[prenom].&nbsp;&raquo; &laquo;&nbsp;.$req_membre[nom].&nbsp;&raquo; !&nbsp;&raquo;;<br />
?&gt;</p>
<p style="text-align: justify;">Cet exemple permet de pouvoir afficher sur toutes les pages le prénom et le nom du membre en effectuant la requête qu&#8217;une seule fois ! Malin n&#8217;est-ce pas ?</p>
<p style="text-align: justify;">Mais bien sur vous-vous dites : et si le membre modifie son nom, l&#8217;information sera erronée ?</p>
<p style="text-align: justify;">La réponse est simple : il suffit de supprimer le fichier texte lors de la modification des informations pour le régénérer avec les bonnes !!</p>
<p style="text-align: justify;">Il y a néanmoins une limitation à l&#8217;utilisation de ce procédé : ne l&#8217;utilisez pas pour des données sensibles (mot de passe, email, etc.) car un fichier texte est beaucoup plus facilement accessible pour un pirate qu&#8217;une base de données&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.awelty.fr/developpement-web/php-mise-en-cache-d-un-tableau-de-donnees-sql/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[PHP/SQL] Géolocalisation et distance entre des villes</title>
		<link>http://www.awelty.fr/developpement-web/php/</link>
		<comments>http://www.awelty.fr/developpement-web/php/#comments</comments>
		<pubDate>Wed, 24 Sep 2008 12:12:00 +0000</pubDate>
		<dc:creator>Tony Samson</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[api google map]]></category>
		<category><![CDATA[api yahoo map]]></category>
		<category><![CDATA[géolocalisation]]></category>
		<category><![CDATA[local]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[recherche de proximité]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.awelty.fr/v5/e-monsite/php/</guid>
		<description><![CDATA[<p><img style="margin: 0 auto; display: block;" alt="" src="../public/geolocalisation-proximite-php-sql.png" /></p> <p> J'ai besoin pour un développement spécifique mais aussi pour <a href="http://www.agendaculturel.fr/">Agenda Culturel</a> de pouvoir lister dans un script PHP les villes à proximité d'une ville donnée. Concrètement, cela signifie afficher les villes situées à l'intérieur d'un périmètre d'une distance de X kilomètres de la ville de référence.</p> <p>J'ai longuement cherché sur le web, et je n'ai trouvé que peu d'infos à ce sujet. Je vous livre ici le résultat de mes recherches et de mes multiples tests, de l'intégration des coordonnées de latitude/longitude à l'aide des API de géolocalisation google map et yahoo map jusqu'à la requête sql finale qui inclue la formule de calcul de distance à partir des coordonnées géolocalisées.</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">J&#8217;ai besoin pour un développement spécifique mais aussi pour <a href="http://www.agendaculturel.fr/">Agenda Culturel</a> de pouvoir lister dans un script PHP les villes à proximité d&#8217;une ville donnée. Concrètement, cela signifie afficher les villes situées à l&#8217;intérieur d&#8217;un périmètre d&#8217;une distance de X kilomètres de la ville de référence.</p>
<p style="text-align: justify;">J&#8217;ai longuement cherché sur le web, et je n&#8217;ai trouvé que peu d&#8217;infos à ce sujet. Je vous livre ici le résultat de mes recherches et de mes multiples tests, de l&#8217;intégration des coordonnées de latitude/longitude à l&#8217;aide des API de géolocalisation google map et yahoo map jusqu&#8217;à la requête sql finale qui inclue la formule de calcul de distance à partir des coordonnées géolocalisées.</p>
<p style="text-align: justify;"><img class="aligncenter size-full wp-image-1559" title="geolocalisation-proximite-php-sql" src="http://www.awelty.fr/wp-content/uploads/2008/09/geolocalisation-proximite-php-sql.png" alt="geolocalisation-proximite-php-sql" width="500" height="278" /></p>
<p style="text-align: justify;">
<h3 style="text-align: justify;"><strong>Une base de donnée fiable des villes associées à leurs coordonnées de latitude/longitude</strong></h3>
<p style="text-align: justify;">En premier lieu, il s&#8217;agit d&#8217;avoir une base de données de villes. Il en existe de nombreuses sur le net, <a href="http://www.galichon.com/codesgeo/">celle-ci</a> intègre même les coordonnées de latitude et de longitude.</p>
<p style="text-align: justify;">Dans mon cas, je possédais déjà une base de données de villes françaises mais sans ces coordonnées. La meilleure méthode pour y intégrer la latitude et la longitude de chaque ville est d&#8217;utiliser l&#8217;API de <a href="http://developer.yahoo.com/maps/rest/V1/geocode.html">Yahoo</a> ou de <a href="http://code.google.com/apis/maps/documentation/services.html#Geocoding/">google</a>.</p>
<p style="text-align: justify;">Ces deux API permettent de récupérer un flux XML correspondant à la recherche (ex : <a href="http://local.yahooapis.com/MapsService/V1/geocode?city=amiens&amp;country=france&amp;out=xml&amp;appid=BlocCleverAge">Amiens, France</a>) contenant la latitude et la longitude.</p>
<p style="text-align: justify;">Par exemple, voici le résultat de la recherche de la ville d&#8217;<a href="http://www.amiens-annuaire.fr/">Amiens</a> avec l&#8217;API de Yahoo :</p>
<p style="text-align: justify;"><code>&lt;ResultSet xsi:schemaLocation="urn:yahoo:maps http://api.local.yahoo.com/MapsService/V1/GeocodeResponse.xsd"&gt;<br />
&lt;Result precision="zip"&gt;<br />
&lt;Latitude&gt;49.896309&lt;/Latitude&gt;<br />
&lt;Longitude&gt;2.279720&lt;/Longitude&gt;<br />
&lt;City&gt;80000 Amiens&lt;/City&gt;<br />
&lt;State&gt;France&lt;/State&gt;<br />
&lt;Country&gt;FR&lt;/Country&gt;<br />
&lt;/Result&gt;<br />
&lt;/ResultSet&gt;</code></p>
<p style="text-align: justify;">Il n&#8217;y a donc plus qu&#8217;à faire une boucle sql sur la table des villes en parsant le flux de yahoo ou google correspondant (en indiquant la ville, le code postal et le pays) et intégrer à l&#8217;enregistrement de la ville la latitude et la longitude. Un vrai jeu d&#8217;enfant avec <a href="http://fr.php.net/simplexml">simplexml</a> en php5 ! Cependant, même si ces API sont puissantes, il se peut que parfois la ville ne soit pas trouvée, que la ville retournée ne soit pas la bonne ou que plusieurs résultats soient retournés. Pour plus d&#8217;informations, et pour choisir entre les API de Yahoo et de Google, je vous invite à lire cet article sur <a href="http://www.clever-age.com/veille/blog/geolocalisation-google-vs.-yahoo.html">la géolocalisation via yahoo et google map</a> très bien fait et qui m&#8217;a bien aidé.</p>
<p style="text-align: justify;">Vous avez à présent une table contenant les villes associées à leurs coordonnées géographique de latitude et de longitude.</p>
<p style="text-align: justify;"><strong><br />
</strong></p>
<h3 style="text-align: justify;"><strong>Il ne reste plus qu&#8217;à exploiter cela dans une requête SQL et afficher le tout en PHP.</strong></h3>
<p style="text-align: justify;">J&#8217;ai d&#8217;abord tenté une conversion des données latitude/longitude en points de coordonnées lambert 2 étendue (norme française) grâce à la fonction geos2lambert() disponible sur <a href="http://code.google.com/p/geocodage/source/browse/trunk/include/geocoding.class.php?r=8">google code</a> mais son exploitation s&#8217;est révélé compliquée et imprécise (ou alors c&#8217;est moi qui suis vraiment nul en maths !).</p>
<p style="text-align: justify;">Je suis donc reparti sur les données de latitude/longitude. Grâce à une formule mathématique complexe trouvée sur le net je suis arrivé au résultat suivant.</p>
<p style="text-align: justify;">Je reçois en variable GET les coordonnées de ma ville de référence :</p>
<p style="text-align: justify;"><code>$latitude=$_GET[lat];<br />
$longitude=$_GET[lon];</code></p>
<p style="text-align: justify;">La fameuse formule utilisant les colonnes lat et lon de ma table sql et les données de latitude et longitude de ma ville de référence :</p>
<p style="text-align: justify;"><code>$formule="(6366*acos(cos(radians($latitude))*cos(radians(`lat`))*cos(radians(`lon`) -radians($longitude))+sin(radians($latitude))*sin(radians(`lat`))))";</code></p>
<p style="text-align: justify;">Et la requête SQL prête à être exécutée :</p>
<p style="text-align: justify;"><code>$sql="SELECT ville,$formule AS dist FROM ville WHERE $formule&lt;='$_GET[distance]' ORDER by dist ASC";</code></p>
<ul style="text-align: justify;">
<li>le <em>SELECT $formule AS dist</em> permet de classer les villes de la plus proche à la plus éloignée avec <em>ORDER by dist ASC</em></li>
<li>le <em>WHERE $formule&lt;=&#8217;$_GET[distance]&#8216; </em> permet de définir un rayon en km (<em>$_GET[distance]</em>) à partir de la ville de référence</li>
</ul>
<p style="text-align: justify;">Je vous laisse coder l&#8217;éxécution de la requête sql et l&#8217;affichage des données en php, ce n&#8217;est pas vraiment le plus dur !</p>
<p style="text-align: justify;">Vous pouvez voir le résultat sur <a href="/immo80/dev/villesreq.php?distance=15&amp;lat=49.896309&amp;lon=2.27972">cette page</a>. La ville de référence est ici Amiens avec un périmètre de 15 km.</p>
<p style="text-align: justify;"><strong><br />
</strong></p>
<h3 style="text-align: justify;"><strong>En guise de conclusion&#8230;</strong></h3>
<p style="text-align: justify;">Il faut savoir que ce calcul et le résultat ne sont pas précis pour plusieurs raisons :</p>
<ul style="text-align: justify;">
<li>Le calcul ne tient pas compte de l&#8217;altitude, qui, dans certains endroits peut influer sur les distances</li>
<li>La formule a été simplifiée au maximum par souci de simplicité et d&#8217;efficacité.</li>
<li>La distance est &laquo;&nbsp;à vol d&#8217;oiseau&nbsp;&raquo; et non pas une distance routière</li>
<li>La localisation latitude/longitude d&#8217;une ville repose sur un point (généralement la mairie de la ville en question), donc la distance ne commence pas à la sortie de la ville mais du centre de la ville. Ainsi, par exemple, pour Paris cela ne sert à rien de vouloir localiser les villes à 5km&#8230;</li>
</ul>
<p style="text-align: justify;">Cependant, malgré l&#8217;imprécision cela fonctionne, car l&#8217;intérêt premier est d&#8217;afficher les villes proches et non de concurrencer google map ! Il convient juste de ne pas forcément afficher les distances en km qui sont souvent fausses (à quelques kilomètres près).</p>
<p style="text-align: justify;">L&#8217;utilisation de cette technique qui est finalement assez simple à mettre en place peut être très utile sur du web local afin d&#8217;élargir les recherches sur une ville aux villes à proximité (dans le cas où aucune réponse n&#8217;est disponible pour la ville concernée par exemple) ou proposer d&#8217;autres villes ou contenus (ou publicités géolocalisées !) à l&#8217;internautes en rapport avec sa requête.</p>
<p style="text-align: justify;"><strong>Si vous avez des questions sur la mise en place d&#8217;une recherche de proximité ou si cet article vous a aidé, n&#8217;hésitez pas, les commentaires sont fait pour ça !</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.awelty.fr/developpement-web/php/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>4 fonctions php pour effectuer des requêtes SQL</title>
		<link>http://www.awelty.fr/developpement-web/4-fonctions-php-pour-effectuer-des-requetes-sql/</link>
		<comments>http://www.awelty.fr/developpement-web/4-fonctions-php-pour-effectuer-des-requetes-sql/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 10:33:00 +0000</pubDate>
		<dc:creator>Tony Samson</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[astuces]]></category>
		<category><![CDATA[fonctions php]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.awelty.fr/v5/e-monsite/4-fonctions-php-pour-effectuer-des-requetes-sql/</guid>
		<description><![CDATA[<p>Je vais essayer de donner régulièrement des astuces de programmation php/sql sur ce blog. Ainsi, je vais m'éfforcer de publier les fonctions php que j'utilise pour me faciliter le développement, des astuces d'<a href="../index.php?post/2008/04/09/Des-pistes-pour-optimiser-les-performances-dacces-dun-site-web">optimisation</a>, des méthodes de développement, etc.</p> <p>Pour inaugurer cette partie, je vous fournis 4 fonctions (+ 2 variantes) bien utiles pour faire des traitements SQL de base à savoir : SELECT, INSERT, UPDATE et DELETE.</p> <p>Ces fonctions sont finalement assez simples, mais ça fait gagner du temps. De plus, ce genre de fonction permet d'opérer des changements sur toutes les requêtes identiques très simplement (ex : en cas de changement de système de base de données).</p> <p><strong>Insérer un enregistrement :</strong></p> <p><code>function inserer_sql($table,$champs,$donnees)<br />{<br />$sql = "INSERT INTO $table ($champs) ";<br />$sql .= "VALUES ($donnees)";<br /><br />&#160;&#160;&#160; if(mysql_query($sql))<br />&#160;&#160;&#160; {<br />&#160;&#160;&#160; return true;<br />&#160;&#160;&#160; }<br />&#160;&#160;&#160; else<br />&#160;&#160;&#160; {<br />&#160;&#160;&#160; return false;<br />&#160;&#160;&#160; }<br />}</code></p> <p>Et pour l'utiliser, c'est tout aussi simple. Par exemple :</p> <p><code>if(inserer_sql("utilisateurs","email,nom,prenom",<br />"'$_POST[email]','$_POST[nom]','$_POST[prenom]'"))<br />echo"L'ajout a été effectué avec succès";<br />else echo"L'ajout a échoué";</code></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Je vais essayer de donner régulièrement des astuces de programmation php/sql sur ce blog. Ainsi, je vais m&#8217;efforcer de publier les fonctions php que j&#8217;utilise pour me faciliter le développement, des astuces d&#8217;<a href="http://www.awelty.fr/developpement-web/des-pistes-pour-optimiser-les-performances-dacces-dun-site-web/">optimisation</a>, des méthodes de développement, etc.</p>
<p style="text-align: justify;">Pour inaugurer cette partie, je vous fournis 4 fonctions (+ 2 variantes) bien utiles pour faire des traitements SQL de base à savoir : SELECT, INSERT, UPDATE et DELETE.</p>
<p style="text-align: justify;">Ces fonctions sont finalement assez simples, mais ça fait gagner du temps. De plus, ce genre de fonction permet d&#8217;opérer des changements sur toutes les requêtes identiques très simplement (ex : en cas de changement de système de base de données).</p>
<p style="text-align: justify;"><strong>Insérer un enregistrement :</strong></p>
<p style="text-align: justify;"><code>function inserer_sql($table,$champs,$donnees)<br />
{<br />
$sql = "INSERT INTO $table ($champs) ";<br />
$sql .= "VALUES ($donnees)";</code></p>
<p style="text-align: justify;">if(mysql_query($sql))<br />
{<br />
return true;<br />
}<br />
else<br />
{<br />
return false;<br />
}<br />
}</p>
<p style="text-align: justify;">Et pour l&#8217;utiliser, c&#8217;est tout aussi simple. Par exemple :</p>
<p style="text-align: justify;"><code>if(inserer_sql("utilisateurs","email,nom,prenom",<br />
"'$_POST[email]','$_POST[nom]','$_POST[prenom]'"))<br />
echo"L'ajout a été effectué avec succès";<br />
else echo"L'ajout a échoué";</code></p>
<p style="text-align: justify;">Ensuite, pour gagner du temps j&#8217;utilise une autre fonction qui n&#8217;a comme arguments que le nom de la table et la liste des champs à ajouter (sous forme de tableau). Cela suppose bien sur une correspondance des champs du formulaire (données POST) et des champs de la table :</p>
<p style="text-align: justify;"><code>function inserer_sql_array($table,$array)<br />
{<br />
$req="";<br />
$i=1;<br />
foreach($array as $k)<br />
{</code></p>
<p>if($i!=&#8217;1&#8242;) { $req.=&nbsp;&raquo;, &laquo;&nbsp;; $req2.=&nbsp;&raquo;, &laquo;&nbsp;; }</p>
<p>$req.=&nbsp;&raquo;$k&nbsp;&raquo;;<br />
$req2.=&nbsp;&raquo;&#8216;$_POST[$k]&#8216;&nbsp;&raquo;;<br />
$i++;<br />
}</p>
<p style="text-align: justify;">return inserer_sql($table,$req,$req2);<br />
}</p>
<p style="text-align: justify;">Il suffit de l&#8217;utiliser comme ceci :</p>
<p style="text-align: justify;"><code>if(inserer_sql_array("utilisateurs",array("email,nom,prenom"))<br />
echo"L'ajout a été effectué avec succès";<br />
else echo"L'ajout a échoué";</code></p>
<p style="text-align: justify;"><strong>Modification de données :</strong></p>
<p style="text-align: justify;">Sur le même principe que pour l&#8217;ajout j&#8217;ai cette fonction :</p>
<p style="text-align: justify;"><code>function maj_sql($table,$action,$where)<br />
{<br />
if($where=='') { $where=1; }</code></p>
<p style="text-align: justify;">$sql = &laquo;&nbsp;UPDATE $table SET $action &laquo;&nbsp;;<br />
$sql .= &laquo;&nbsp;WHERE $where&nbsp;&raquo;;</p>
<p style="text-align: justify;">if(mysql_query($sql))<br />
{<br />
return true;<br />
}<br />
else<br />
{<br />
return false;<br />
}<br />
}</p>
<p style="text-align: justify;">Dans cette fonction, il est permis de modifier tous les enregistrements d&#8217;une table (en laissant l&#8217;argument $where à vide). Mais, par mesure de sécurité, on peut désactiver cela en testant la variable $where au début et en renvoyant <strong>false</strong> si elle est vide.</p>
<p style="text-align: justify;">Pour utiliser cette fonction, il suffit de tester que la fonction renvoie bien <strong>true.</strong></p>
<p style="text-align: justify;">La variante de cette fonction qui génère la requête à partir d&#8217;un tableau array() :</p>
<p style="text-align: justify;"><code>function maj_sql_array($table,$array,$where)<br />
{<br />
$req="";<br />
$i=1;<br />
foreach($array as $k)<br />
{<br />
if($i!='1') $req.=", ";</code></p>
<p>$req.=&nbsp;&raquo;$k=&#8217;$_POST[$k]&#8216;&nbsp;&raquo;;<br />
$i++;<br />
}</p>
<p style="text-align: justify;">maj_sql($table,$req,$where);<br />
}</p>
<p style="text-align: justify;"><strong>Suppression de données :</strong></p>
<p style="text-align: justify;">Cette fonction permet de supprimer un ou plusieurs enregistrements dans une table en précisant uniquement la table et la condition à remplir. Cependant, par mesure de sécurité, il est impossible de ne pas préciser de condition (cela supprimerait tous les enregistrements de la table) :</p>
<p style="text-align: justify;"><code>function sup_sql($table,$where)<br />
{</code></p>
<p style="text-align: justify;">if($where==&nbsp;&raquo;) {<br />
return false;<br />
}<br />
else<br />
{<br />
$sql = &laquo;&nbsp;DELETE FROM $table &laquo;&nbsp;;<br />
$sql .= &laquo;&nbsp;WHERE $where&nbsp;&raquo;;</p>
<p style="text-align: justify;">if(mysql_query($sql))<br />
{<br />
return true;<br />
}<br />
else<br />
{<br />
return false;<br />
}<br />
}<br />
}</p>
<p style="text-align: justify;"><strong>Lire une ligne d&#8217;une table</strong> :</p>
<p style="text-align: justify;">Enfin, la dernière fonction permet d&#8217;extraire les données d&#8217;un enregistrement d&#8217;une table. C&#8217;est bien sûr en fait un simple SELECT mais comme pour les autres fonctions, cela permet de gagner du temps.</p>
<p style="text-align: justify;"><code>function requete_sql($table,$champs,$where)<br />
{<br />
// si $where est vide on lui attribue une valeur par défaut<br />
if($where=='') { $where=1; }</code></p>
<p style="text-align: justify;">// en cas de jointure on utilise le nom de la première table pour le tri par ID.<br />
$tab=explode(&laquo;&nbsp;,&nbsp;&raquo;,$table);</p>
<p style="text-align: justify;">$sql = &laquo;&nbsp;select $champs from $table where $where ORDER by $tab[0].id DESC LIMIT 1&#8243;;<br />
$p = mysql_query($sql)OR DIE(&laquo;&nbsp;Erreur sur la requete SELECT $champs FROM $table WHERE $where&nbsp;&raquo;);<br />
return mysql_fetch_array($p);<br />
}</p>
<p style="text-align: justify;">Le résultat de cette fonction est un tableau contenant les données précisées dans l&#8217;argument $champs. Exemple :</p>
<p style="text-align: justify;"><code>$requete=requete_sql("utilisateurs","nom,prenom,email","id='$_GET[user]'");<br />
echo"Bonjour ".$requete[prenom]." !";</code></p>
<p style="text-align: justify;">En bonus, voici la fonction qui permet de compter le nombre d&#8217;enregistrements dans une table pour une condition précise. Cette fonction effectue un mysql_numrows sur une requête SELECT. Les puristes préféreraient sans doûte un SELECT count(id), cependant, il me semble que ma méthode est moins lourde :</p>
<p style="text-align: justify;"><code>function compter_sql($table,$where)<br />
{<br />
if($where=='') { $where=1; }<br />
$sql = "select id from $table where $where";<br />
$p = mysql_query($sql)OR DIE("Erreur sur la requete SELECT id FROM $table WHERE $where");<br />
return mysql_numrows($p);<br />
}</code></p>
<p style="text-align: justify;">Cette fonction suppose que vous avez une colonne <strong>id</strong> dans votre table puisque le SELECT est effectué dessus. Pour l&#8217;utiliser, rien de plus simple :</p>
<p style="text-align: justify;"><code>$nb_utilisateurs_hommes = compter_sql("utilisateurs","sexe='H'");</code></p>
<p style="text-align: justify;"><strong>Conclusion :</strong></p>
<p style="text-align: justify;">Ces petites fonctions ne sont pas révolutionnaires en soit puisqu&#8217;elles reprennent les principes de base de SQL. Cependant, et ce n&#8217;est pas négligeable, elles permettent réellement de gagner du temps car elles sont plus rapides à écrire et plus faciles à retenir (je retiens mieux des noms de fonction en français qu&#8217;en anglais).</p>
<p style="text-align: justify;">Bien sûr, elles ne sont pas parfaites, il faudrait protéger les données à insérer ou à modifier par des htmlspecialchars() et addslashes(). Mais pour ça, c&#8217;est à vous de jouer, je ne vais pas vous prémacher tout le travail non plus !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.awelty.fr/developpement-web/4-fonctions-php-pour-effectuer-des-requetes-sql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

