<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://arts-numeriques.codedrops.net/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Arts num&#233;riques</title>
	<link>https://arts-numeriques.codedrops.net/</link>
	<description>artsnumeriques est le support des cours de St&#233;phane Noel, professeur &#224; l'&#233;cole de recherche graphique.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://arts-numeriques.codedrops.net/spip.php?id_mot=26&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Ecrire un fichier de log</title>
		<link>https://arts-numeriques.codedrops.net/Plus-ecrire-un-fichier-de-log</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-ecrire-un-fichier-de-log</guid>
		<dc:date>2009-11-17T15:07:46Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Un fichier de log est un fichier qui contient une s&#195;&#169;rie de donn&#195;&#169;es permettant de conserver des donn&#195;&#169;es de mani&#195;&#168;re assez brute. On peut conserver ces informations dans une base de donn&#195;&#169;e, ici on fait une lecture et &#195;&#169;criture directement dans un fichier txt sur le serveur. &lt;br class='autobr' /&gt; Voici le code : &lt; ?php function ecrire_log($errtxt) $fp = fopen('log.txt','a+') ; // ouvrir le fichier ou le cr&#195;&#169;er fseek($fp,SEEK_END) ; // poser le point de lecture &#195; la fin du fichier (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Un fichier de log est un fichier qui contient une s&#195;&#169;rie de donn&#195;&#169;es permettant de conserver des donn&#195;&#169;es de mani&#195;&#168;re assez brute. On peut conserver ces informations dans une base de donn&#195;&#169;e, ici on fait une lecture et &#195;&#169;criture directement dans un fichier txt sur le serveur.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Voici le code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php function ecrire_log($errtxt){ $fp = fopen('log.txt','a+'); // ouvrir le fichier ou le cr&#195;&#169;er fseek($fp,SEEK_END); // poser le point de lecture &#195; la fin du fichier $nouverr=$errtxt.&#034;\r\n&#034;; // ajouter un retour &#195; la ligne au fichier fputs($fp,$nouverr); // ecrire ce texte fclose($fp); //fermer le fichier } ecrire_log(&#034;test&#034;); echo &#034;je viens d'updater le fichier&#034;; ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Attention, pour une utilisation de ce script sur un serveur distant, attention aux droits d'&#195;&#169;criture.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>R&#195;&#169;cup&#195;&#169;rer le contenu d'un tag avec une expression r&#195;&#169;guli&#195;&#168;re</title>
		<link>https://arts-numeriques.codedrops.net/Plus-recuperer-le-contenu-d-un-tag</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-recuperer-le-contenu-d-un-tag</guid>
		<dc:date>2009-11-17T13:42:17Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Les expressions r&#195;&#169;guli&#195;&#168;res sont un outil puissant pour rechercher des &#195;&#169;l&#195;&#169;ments pr&#195;&#169;cis dans un code compliqu&#195;&#169;. Ici un script simple qui permet de rechercher des tags particuliers, et de les lister. &lt;br class='autobr' /&gt; Ce script r&#195;&#169;cup&#195;&#168;re le contenu du body d'une autre page, et l'affiche dans la page. &lt;br class='autobr' /&gt; &lt; ?php // cette fonction t&#195;&#169;cup&#195;&#168;re le contenu d'un document distant function geturl($laurl) $data=null ; if($http= fopen($laurl,&#034;r&#034;)) while(!feof($http)) $data .=fgets($http,1024) ; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les expressions r&#195;&#169;guli&#195;&#168;res sont un outil puissant pour rechercher des &#195;&#169;l&#195;&#169;ments pr&#195;&#169;cis dans un code compliqu&#195;&#169;. Ici un script simple qui permet de rechercher des tags particuliers, et de les lister.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce script r&#195;&#169;cup&#195;&#168;re le contenu du body d'une autre page, et l'affiche dans la page.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // cette fonction t&#195;&#169;cup&#195;&#168;re le contenu d'un document distant function geturl($laurl){ $data=null; if($http= fopen($laurl,&#034;r&#034;)){ while(!feof($http)){ $data .=fgets($http,1024); } fclose($http); } return($data); } // cette fonction r&#195;&#169;cup&#195;&#168;re le contenu des tags s&#195;&#169;lectionn&#195;&#169;s function get_tag($file,$tag=&#034;body&#034;){ preg_match_all(&#034;/(&lt;&#034;.$tag.&#034;.*&gt;)(\w.*)(&lt;\/&#034;.$tag.&#034;&gt;)/ismU&#034;,$file,$patterns); return $patterns; } ?&gt; &lt;!DOCTYPE html PUBLIC &#034;-//W3C//DTD XHTML 1.0 Transitional//EN&#034; &#034;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#034;&gt; &lt;html xmlns=&#034;http://www.w3.org/1999/xhtml&#034;&gt; &lt;head&gt; &lt;meta http-equiv=&#034;Content-Type&#034; content=&#034;text/html;charset=utf-8&#034;/&gt; &lt;title&gt;Je pompe cette page&lt;/title&gt; &lt;/head&gt; &lt;?php // recuperer le contenu de cette page $data=geturl(&#034;http://codedrops.net/&#034;); // r&#195;&#169;cup&#195;&#168;re le contenu du tag, tag compris $extrait=get_tag($data,&#034;body&#034;); // ce qui revient est un tableau, on liste tous les r&#195;&#169;sultats avec foreach foreach($extrait[0] as $contenu){ echo $contenu; } ?&gt; &lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La fonction preg_match_all permet de rechercher dans une chaine de caract&#195;&#168;res un &#034;pattern&#034;, une structure de texte, et met le r&#195;&#169;sultat dans un tableau, dans un ordre particulier si on le lui demande. Apr&#195;&#168;s avoir trouv&#195;&#169; un premier r&#195;&#169;sultat, la recherche continue jusqu'&#195; la fin de la cha&#195;&#174;ne. &lt;br class='manualbr' /&gt;Ici, le pattern est un tag ouvrant et fermant, qui est fourni par la fonction.&lt;br class='manualbr' /&gt;preg_match_all fournit un tableau avec les &#195;&#169;l&#195;&#169;ments qui correspondent &#195; la recherche.&lt;/p&gt;
&lt;p&gt;Construire une expression r&#195;&#169;guli&#195;&#168;re requiert parfois de l'acharnement, pas mal d'aide en ligne se trouve via moteur de recherche. Ce script peut servir de point de d&#195;&#169;part.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Explode, shuffle, implode</title>
		<link>https://arts-numeriques.codedrops.net/Plus-explode-shuffle-implode</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-explode-shuffle-implode</guid>
		<dc:date>2009-11-17T13:25:24Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Il ne s'agit pas de terrorisme mais de fonctions php utiles pour manipuler des chaines et des variables tableaux (array). Un petit script vaut mieux qu'un long discours. &lt;br class='autobr' /&gt; Voici un code qui r&#195;&#169;cup&#195;&#168;re une page distante, en r&#195;&#169;cup&#195;&#168;re le texte, puis en m&#195;&#169;lange le contenu : &lt; ?php // cette fonction r&#195;&#169;cup&#195;&#168;re une page sur le net function geturl($laurl) $data=null ; if($http= fopen($laurl,&#034;r&#034;)) while(!feof($http)) $data .=fgets($http,1024) ; fclose($http) ; return($data) ; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Il ne s'agit pas de terrorisme mais de fonctions php utiles pour manipuler des chaines et des variables tableaux (array). Un petit script vaut mieux qu'un long discours.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Voici un code qui r&#195;&#169;cup&#195;&#168;re une page distante, en r&#195;&#169;cup&#195;&#168;re le texte, puis en m&#195;&#169;lange le contenu :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php
// cette fonction r&#195;&#169;cup&#195;&#168;re une page sur le net
function geturl($laurl){ $data=null; if($http= fopen($laurl,&#034;r&#034;)){ while(!feof($http)){ $data .=fgets($http,1024); } fclose($http); } return($data);
}
// appel de la fonction avec l'adresse choisie
$data=geturl(&#034;http://codedrops.net/&#034;); // on enl&#195;&#168;ve tous les tags sauf les liens
$data=strip_tags($data,&#034;&lt;a&gt;&#034;);
?&gt;
&lt;!DOCTYPE html PUBLIC &#034;-//W3C//DTD XHTML 1.0 Transitional//EN&#034; &#034;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#034;&gt;
&lt;html xmlns=&#034;http://www.w3.org/1999/xhtml&#034;&gt;
&lt;head&gt;
&lt;meta http-equiv=&#034;Content-Type&#034; content=&#034;text/html;charset=utf-8&#034;/&gt;
&lt;title&gt;Un texte m&#195;&#169;lang&#195;&#169;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Le texte original&lt;/h1&gt;
&lt;?php // le texte original, sans les tags &#195; part les liens
echo $data;
?&gt;
&lt;h1&gt;Le texte m&#195;&#169;lang&#195;&#169;&lt;/h1&gt;
&lt;?php
// on s&#195;&#169;pare en utilisant les espaces dans un array
$data=explode(&#034; &#034;,$data);
// on melange l'array
shuffle($data);
// on r&#195;&#169;assemble le array en string en s&#195;&#169;parant par un espace
$mix=implode(&#034; &#034;,$data);
echo $mix;
?&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La fonction geturl() sert &#195; r&#195;&#169;cup&#195;&#169;rer le code d'une page distante. Une fois ce code brut r&#195;&#169;cup&#195;&#169;r&#195;&#169;, la fonction strip_tags() va permettre d'en expurger tous les tags. Un argument optionnel peut &#195;&#170;tre ajout&#195;&#169; &#195; la fonction pour garder certains tags sp&#195;&#169;cifiques. Ici, les liens.&lt;/p&gt;
&lt;p&gt;Apr&#195;&#168;s avoir affich&#195;&#169; le r&#195;&#169;sultat de ces deux op&#195;&#169;rations, le script va faire trois choses :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Utiliser explode() pour transformer le texte (techniquement c'est une chaine de caract&#195;&#168;re ou string) en une variable tableau (une liste num&#195;&#169;rot&#195;&#169;es d'&#195;&#169;l&#195;&#169;ments), en utilisant comme crit&#195;&#168;re de coupure entre les &#195;&#169;l&#195;&#169;ments de la chaine ce qui se trouve entre les guillemets, ici un espace.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; La fonction shuffle() est faite pour m&#195;&#169;langer un tableau.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; la fonction implode() fait l'inverse de explode : elle fabrique une chaine de caract&#195;&#168;res &#195; partir d'un tableau, en intercalant ce qui se trouve entre guillements entre chaque &#195;&#169;l&#195;&#169;ment du tableau.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Boucles for et while</title>
		<link>https://arts-numeriques.codedrops.net/Boucles-for-et-while</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Boucles-for-et-while</guid>
		<dc:date>2009-11-10T13:17:08Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Pourquoi utiliser les boucles Les boucles sont un outil fondamental pour r&#195;&#169;p&#195;&#169;ter une op&#195;&#169;ration un certain nombre de fois, pour parcourir un ensemble de donn&#195;&#169;es dans un tableau. &lt;br class='autobr' /&gt;
Imaginons que l'on veut cr&#195;&#169;er 10 &#195;&#169;l&#195;&#169;ments de type &#034;div&#034; carr&#195;&#169;s dans une page html. On pourra &#195;&#169;crire. &lt;br class='autobr' /&gt; 1 2 3 4 5 6 7 8 9 10 &lt;br class='autobr' /&gt;
Fastidieux. Mais si on vous demande d'en faire 200, &#195;&#8225;a devient l'enfer. &lt;br class='autobr' /&gt;
Avec une boucle, ce sera le m&#195;&#170;me travail d'en faire 20 ou 300. Voici : &lt; ?php for($a=1 ;$a&#034;.$a.&#034;&#034; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Tutorial-" rel="directory"&gt;Tutorial&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pourquoi utiliser les boucles&lt;/h2&gt;
&lt;p&gt;Les boucles sont un outil fondamental pour r&#195;&#169;p&#195;&#169;ter une op&#195;&#169;ration un certain nombre de fois, pour parcourir un ensemble de donn&#195;&#169;es dans un tableau.&lt;/p&gt;
&lt;p&gt;Imaginons que l'on veut cr&#195;&#169;er 10 &#195;&#169;l&#195;&#169;ments de type &#034;div&#034; carr&#195;&#169;s dans une page html. On pourra &#195;&#169;crire.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;1&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;2&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;3&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;4&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;5&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;6&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;7&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;8&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;9&lt;/div&gt; &lt;div style=&#034;width:100px;height:100px;background-color:red&#034;&gt;10&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Fastidieux. Mais si on vous demande d'en faire 200, &#195;&#8225;a devient l'enfer.&lt;/p&gt;
&lt;p&gt;Avec une boucle, ce sera le m&#195;&#170;me travail d'en faire 20 ou 300. Voici :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php for($a=1;$a&lt;30;$a++){ echo &#034;&lt;div style=\&#034;width:100px;height:100px;background-color:red\&#034;&gt;&#034;.$a.&#034;&lt;/div&gt;&#034; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Remarquez que la variable qui sert &#195; d&#195;&#169;terminer le nombre de r&#195;&#169;p&#195;&#169;titions sert &#195; l'int&#195;&#169;rieur de la boucle, c'est une variable comme une autre.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Principe des boucles&lt;/h2&gt;
&lt;p&gt;Une boucle r&#195;&#169;p&#195;&#168;te les instructions contenues entre les accolades tant que la condition entre les parenth&#195;&#168;ses est vraie. &lt;br class='manualbr' /&gt;Dans l'exemple ci dessus, la boucle se r&#195;&#169;p&#195;&#168;te tant que $a est inf&#195;&#169;rieur &#195; 30. Cette variable $a est initialis&#195;&#169;e avec la valeur 1, et sa valeur augmentera de 1 &#195; chaque fois que la boucle est r&#195;&#169;p&#195;&#169;t&#195;&#169; ($a++ signifie &#034;incr&#195;&#169;menter $a&#034; de 1).&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Attention&lt;/h2&gt;
&lt;p&gt; donc &#195; ce que la condition puisse &#195;&#170;tre remplie &#195; un moment donn&#195;&#169;, sans quoi la boucle va se r&#195;&#169;p&#195;&#169;ter &#195; l'infini et votre code va planter...&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;la boucle for&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // Boucle for echo &#034;&lt;h2&gt;Boucle for&lt;/h2&gt;&#034;; for ($i=0;$i&lt;15; $i++){ echo $i.&#034;&lt;br /&gt;&#034;; } ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;La boucle while&lt;/h2&gt;
&lt;p&gt;Ici, le code est plus simple, et donc plus dangereux. La boucle se r&#195;&#169;p&#195;&#168;te tant que la condition entre parenth&#195;&#168;ses est vraie, et c'est &#195; vous, entre les accolades, qui devez rendre fausse cette condition, sous peine de voir la boucle tourner folle.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // boucle while echo &#034;&lt;h2&gt;Boucle while&lt;/h2&gt;&#034;; $i=0; while($i!=30){ $i++; echo $i.&#034;&lt;br /&gt;&#034;; } ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;La boucle foreach&lt;/h2&gt;
&lt;p&gt;La boucle foreach permet de parcourir une variable tableau &#195;&#169;l&#195;&#169;ment par &#195;&#169;l&#195;&#169;ment. Elle est tr&#195;&#168;s pratique notamment pour afficher des r&#195;&#169;sultats sortant d'une base de donn&#195;&#169;e.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$liste=array(&#034;un&#034;,&#034;jour&#034;,&#034;mon&#034;,&#034;prince&#034;,&#034;viendra&#034;); foreach($liste as $element){ echo $element.&#034;&lt;br /&gt;&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;$liste, qui est un tableau d'&#195;&#169;l&#195;&#169;ment, est parcouru par la boucle foreach, la variable $element re&#195;&#167;oit chaque &#195;&#169;l&#195;&#169;ment de la liste dans l'ordre, &#195; chaque tour. La boucle s'arr&#195;&#170;te apr&#195;&#168;s avoir list&#195;&#169; le dernier &#195;&#169;l&#195;&#169;ment.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>G&#195;&#169;n&#195;&#169;rer un pdf avec FPDF</title>
		<link>https://arts-numeriques.codedrops.net/Plus-generer-un-pdf-avec-FPDF</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-generer-un-pdf-avec-FPDF</guid>
		<dc:date>2008-12-11T00:22:02Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>
		<dc:subject>Open Source</dc:subject>
		<dc:subject>Big book</dc:subject>

		<description>
&lt;p&gt;Fpdf est une classe qui permet de g&#195;&#169;n&#195;&#169;rer des pdf sans librairie additionnelle. La documentation est en fran&#195;&#167;ais pour une fois alors profitons-en. &lt;br class='autobr' /&gt; Fpdf est une classe assez puissante qui permet de cr&#195;&#169;er des pdf, d'y incorporer du texte, des images, ainsi que des &#195;&#169;l&#195;&#169;ments de types lignes, cercles, etc. Quelques contributions permettent d'&#195;&#169;tendre ses fonctionnalit&#195;&#169;s, pour faire des doubles pages notamment. &lt;br class='autobr' /&gt;
Ici le script que nous allons faire va g&#195;&#169;n&#195;&#169;rer un pdf de jaquette dvd, (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Open-Source-+" rel="tag"&gt;Open Source&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Big-book,62-+" rel="tag"&gt;Big book&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Fpdf est une classe qui permet de g&#195;&#169;n&#195;&#169;rer des pdf sans librairie additionnelle. La documentation est en fran&#195;&#167;ais pour une fois alors profitons-en.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Fpdf est une classe assez puissante qui permet de cr&#195;&#169;er des pdf, d'y incorporer du texte, des images, ainsi que des &#195;&#169;l&#195;&#169;ments de types lignes, cercles, etc. Quelques contributions permettent d'&#195;&#169;tendre ses fonctionnalit&#195;&#169;s, pour faire des doubles pages notamment.&lt;/p&gt;
&lt;p&gt;Ici le script que nous allons faire va g&#195;&#169;n&#195;&#169;rer un pdf de jaquette dvd, avec une tranche, une image d'illustration, un titre, un texte de pr&#195;&#169;sentation, etc.&lt;/p&gt;
&lt;p&gt;Le script complet est fourni en bas de cette page, il est comment&#195;&#169;. N'oubliez pas d'aller voir pour plus d'information &lt;a href=&#034;http://www.fpdf.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;la partie &#034;manuel&#034; du site de fpdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le script envoie directement le pdf vers le navigateur, ce qui signifie qu'aucun fichier n'est cr&#195;&#169;&#195;&#169; sur le serveur. Sauver le document sur le serveur est &#195;&#169;videmment possible.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // on va faire une pochette de dvd, avec la tranche et tout require('fpdf.php'); // creer le pdf en mode portrait, unites en mm, de 270 sur 180 mm $pdf=new FPDF('P','mm',array(270,180)); $pdf-&gt;SetAutoPageBreak(0); // importer la police sf_old_republic $pdf-&gt;AddFont('sf_old_republic','','92d32b2fabae934a986869823839779b_sf_old_republic.php'); // cree une page dans le document, sinon vide $pdf-&gt;AddPage(); // couleur de remplissage : noir $pdf-&gt;SetFillColor(0,0,0); // on cr&#195;&#169;e la tranche avec un rectangle noir $pdf-&gt;Rect(127.5, 0, 15, 180, &#034;F&#034;); // importation de l'image en couverture en for&#195;&#167;ant la taille $pdf-&gt;Image('Will_code_HTML_for_food.jpg',142.5,45,127.5,170); // definir la police : sf_old_republic en 45 points // placement du pointeur et ecriture du titre $pdf-&gt;SetFont('sf_old_republic','',45); $pdf-&gt;SetXY(150,8); $pdf-&gt;MultiCell(100,15,'Will code PHP for food',0,&#034;L&#034;); // importation de l'image en couverture arriere $pdf-&gt;Image('Will_code_HTML_for_food.jpg',10,10,50,70); // descriptif // placer le pointeur pour le texte // definir le texte // ecrire le titre et texte avec multicell $pdf-&gt;SetXY(30,90); $pdf-&gt;SetFont('Arial','B',12); $pdf-&gt;MultiCell(100,5,'Will code PHP for food',0,&#034;L&#034;); $pdf-&gt;SetX(30); $pdf-&gt;SetFont('Arial','',9); $texte=&#034;Un film inoubliable, avec de vrais tramps et de vraies page en html 4, du php, du javascript, et du d&#195;&#169;buggage pour compatibilit&#195;&#169; avec les principaux navigateurs.\nLe sous-prol&#195;&#169;tariat gagne ce qui &#195;&#169;tait encore recemment des metiers &#195; haut potentiel, que fait la profession ? Elle brade son savoir faire. \n\n'Epatant', nous dit le magasine Premiere.&#034;; $pdf-&gt;MultiCell(80,4,utf8_decode($texte)); // placer le copyright $pdf-&gt;SetXY(10,-10); $pdf-&gt;SetFont('Arial','I',8); $texte=&#034;Copyright Workplace testing crew&#034;; $pdf-&gt;Cell(120,2,$texte); // le titre sur la tranche // couleur : blanc $pdf-&gt;SetTextColor(255,255,255); $pdf-&gt;SetXY(129.5,17); $pdf-&gt;SetFont('Arial','B',18); // moche bidouille : placer des retour chariot pour la tranche $texte=&#034;W\ni\nl\nl\n\nc\no\nd\ne\n\nP\nH\nP\n\nf\no\nr\n\nf\no\no\nd&#034;; $pdf-&gt;MultiCell(10,7,strtoupper($texte),0,&#034;C&#034;); // sortir le pdf vers le navigateur $pdf-&gt;Output(); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Plus : le texte &#195; angle droit&lt;/h2&gt;
&lt;p&gt;La tranche utilise un texte mis &#195; la ligne &#195; chaque lettre. On pourrait cette partie plus &#195;&#169;l&#195;&#169;gante en op&#195;&#169;rant une rotation sur le bloc texte, ce qui est possible moyennant l'int&#195;&#169;gration d'un fonction suppl&#195;&#169;mentaire &lt;a href=&#034;http://beerbytes.blogspot.com/2007/07/pdf-trials.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;disponible ici&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;G&#195;&#169;n&#195;&#169;rer des fichiers de police utilisables avec Fpdf&lt;/h2&gt;
&lt;p&gt;Pour utiliser des polices diff&#195;&#169;rentes que les polices de base, il faut les transformer et les d&#195;&#169;poser dans le dossier contenant la classe. Un peu compliqu&#195;&#169;, mais une page de traitement a &#195;&#169;t&#195;&#169; mise &#195; disposition pour faciliter le travail de conversion &#195; partir d'une police ttf :&lt;br class='manualbr' /&gt;&lt;a href=&#034;http://fpdf.fruit-lab.de/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;G&#195;&#169;n&#195;&#169;rer les fichiers .php et .afm &#195; partir d'un fichier .ttf&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://arts-numeriques.codedrops.net/IMG/pdf/doc-1.pdf" length="66323" type="application/pdf" />
		
		<enclosure url="https://arts-numeriques.codedrops.net/IMG/zip/generer_pdf.zip" length="141556" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Ecrire des graffittis avec jquery, php et mysql</title>
		<link>https://arts-numeriques.codedrops.net/Plus-ecrire-des-graffittis-avec</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-ecrire-des-graffittis-avec</guid>
		<dc:date>2008-12-08T23:27:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Javascript</dc:subject>
		<dc:subject>(X)html</dc:subject>
		<dc:subject>Php</dc:subject>
		<dc:subject>CSS</dc:subject>
		<dc:subject>Ajax</dc:subject>

		<description>
&lt;p&gt;Un exemple simple et complet : intervenir sur une page en cliquant dessus, sauvegarder le r&#195;&#169;sultat dans une base de donn&#195;&#169;e pour pouvoir les afficher au rechargement de la page. &lt;br class='autobr' /&gt; Ce code est perfectible : on peut imaginer pouvoir demander une image au lieu d'&#195;&#169;crire du texte, de fabriquer une texte en image avec gd2, de choisir une couleur, de naviguer dans la profondeur des messages, de recharger r&#195;&#169;guli&#195;&#168;rement la page en ajax pour en faire un esp&#195;&#168;ce de chat... &lt;br class='autobr' /&gt;
1) La page (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Javascript-+" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-X-html-+" rel="tag"&gt;(X)html&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-CSS-+" rel="tag"&gt;CSS&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Ajax-+" rel="tag"&gt;Ajax&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Un exemple simple et complet : intervenir sur une page en cliquant dessus, sauvegarder le r&#195;&#169;sultat dans une base de donn&#195;&#169;e pour pouvoir les afficher au rechargement de la page.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce code est perfectible : on peut imaginer pouvoir demander une image au lieu d'&#195;&#169;crire du texte, de fabriquer une texte en image avec gd2, de choisir une couleur, de naviguer dans la profondeur des messages, de recharger r&#195;&#169;guli&#195;&#168;rement la page en ajax pour en faire un esp&#195;&#168;ce de chat...&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;1) La page d'initialisation de la base de donn&#195;&#169;e&lt;/h2&gt;
&lt;p&gt;On externalise cette part du code pour la r&#195;&#169;employer 2 fois.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // ouverture de la connexion - ici pour mamp - $hote=&#034;localhost&#034;; $utilisateur=&#034;root&#034;; $password=&#034;root&#034;; // ouverture de la connexion $connexion = mysql_connect($hote,$utilisateur,$password); // ici il faudrait pour &#195;&#170;tre complet tester que la base existe, au besoin la creer // si vous utilisez ce script, vous devez donc cr&#195;&#169;er manuellement la table mysql_tests dans phpmyadmin mysql_select_db('mysql_page',$connexion); // on teste pour voir si la base existe $requete=&#034;SELECT * FROM elements;&#034;; $requete=mysql_query($requete,$connexion); // si la table n'existe pas, la cr&#195;&#169;er if (!$requete){ // contient un id auto-incrementiel, $requete=&#034;CREATE TABLE elements (id int(7) NOT NULL auto_increment, type varchar(255), contenu TEXT, style varchar(255), date datetime, PRIMARY KEY (id))&#034;; mysql_query($requete,$connexion); } ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;2) La page elle-m&#195;&#170;me&lt;/h2&gt;
&lt;p&gt;Contient les fonctions qui cr&#195;&#169;e le formulaire et fait la requ&#195;&#170;te ajax, plus le listage des messages d&#195;&#169;j&#195; &#195;&#169;crit au chargement.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;!DOCTYPE html PUBLIC &#034;-//W3C//DTD XHTML 1.0 Transitional//EN&#034; &#034;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#034;&gt; &lt;html xmlns=&#034;http://www.w3.org/1999/xhtml&#034;&gt; &lt;head&gt; &lt;meta http-equiv=&#034;Content-Type&#034; content=&#034;text/html;charset=utf-8&#034; /&gt; &lt;title&gt;Add your comment on the metawall&lt;/title&gt; &lt;link rel=&#034;stylesheet&#034; type=&#034;text/css&#034; href=&#034;style.css&#034; /&gt; &lt;script type=&#034;text/javascript&#034; src=&#034;jquery.js&#034;&gt;&lt;/script&gt; &lt;script type=&#034;text/javascript&#034;&gt; $(document).ready(function(){ $(&#034;html&#034;).click(function(coordonees){ $(&#034;.clicform&#034;).remove(); $(&#034;body&#034;).append(&#034;&lt;div class='clicform contenu' style='top:&#034; + coordonees.pageY + &#034;px;left:&#034; + coordonees.pageX + &#034;px'&gt;&lt;textarea id='letexte'&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;div class='validbutton' onClick='javascript:soumettexte();'&gt;Envoyer&lt;/div&gt;&lt;/div&gt;&#034;); $(&#034;.clicform textarea&#034;).focus(); $(&#034;body .clicform&#034;).click(function(){ return false; }); }); }); function soumettexte(){ var contenu=$(&#034;.clicform textarea&#034;).attr(&#034;value&#034;); if(contenu !=&#034;&#034;){ style=$(&#034;.clicform&#034;).attr(&#034;style&#034;); $.ajax({ type: &#034;POST&#034;, url: &#034;update_page.php&#034;, data: &#034;style=&#034; + style + &#034;&amp;entrer=oui&amp;contenu=&#034; + contenu, success: function(msg){ //alert( &#034;Data Saved: &#034; + msg ); } }); } $(&#034;.clicform&#034;).each(function(){ $(this).html(contenu); $(this).removeClass(&#034;clicform&#034;); }); return false; } &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;?php include('init_base.php'); $larequete=&#034;SELECT * FROM elements&#034;; $requete = mysql_query($larequete,$connexion); $total = mysql_num_rows($requete); if ($total) { while($row = mysql_fetch_array($requete)) { // ecriture les elements depuis la db echo &#034;&lt;div class=\&#034;contenu\&#034; style=\&#034;&#034;.$row['style'].&#034;\&#034; &gt;&#034;.stripslashes($row['contenu']).&#034;&lt;/div&gt;\n&#034;; } } ?&gt; &lt;/body&gt; &lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;3) La page qui entre les message dans la db&lt;/h2&gt;
&lt;p&gt;Cette page est appell&#195;&#169;e par jquery. Ce code de d&#195;&#169;mo n'est pas d&#195;&#169;gradable. Son activation par cliquer-pointer est trop appuy&#195;&#169; sur le javascript pour l'&#195;&#170;tre...&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php include('init_base.php'); // initialiser la variable message $message=&#034;&#034;; // tester que post contient ce qui nous interesse, c'est &#195; dire au moins une array associative &#034;entrer&#034; // traiter ce qui a &#195;&#169;t&#195;&#169; envoy&#195;&#169; par le formulaire if(isset($_POST['entrer'])){ // on s&#195;&#169;curise le contenu avec addslashes $contenu=addslashes($_POST['contenu']); $style=addslashes($_POST['style']); // on pr&#195;&#169;pare une date $date = date(&#034;Y-m-d H:m:s&#034;); // on ins&#195;&#168;re $requete=&#034;INSERT INTO elements ( type,contenu,style,date ) VALUES ('texte','$contenu', '$style', '$date')&#034;; $envoi=mysql_query($requete,$connexion); // si c'est reussi, le dire dans le message if($envoi){ echo &#034;Nouveau contenu entr&#195;&#169;&#034;; } } ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;4) Les styles css&lt;/h2&gt;
&lt;p&gt;Dans le fichier style.css, quelques lignes.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;body { font-family:arial, sans-serif; font-size:11px; } .clicform { background-color:#fff; border:1px solid #ccc; } .clicform textarea{ heigth:4em; } .contenu { position:absolute; } .clicform textarea, .contenu { font-size:21px; font-weight:bold; color: #666; width:200px; } .validbutton { font-size:12px; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ajouter &#195; ceci &#195;&#169;videmment la librairie &lt;a href='https://arts-numeriques.codedrops.net/jQuery'&gt;http://jquery.com&lt;/a&gt;...&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://arts-numeriques.codedrops.net/IMG/zip/infinite_grafitti_wall.zip" length="19813" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Pense b&#234;te php</title>
		<link>https://arts-numeriques.codedrops.net/Pense-bete-php</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Pense-bete-php</guid>
		<dc:date>2008-11-30T19:45:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Les codes que l'on doit avoir en t&#234;te et sous la main &lt;br class='autobr' /&gt; D&#233;clarer du PHP Ne pas oublier de mettre votre code php entre les bons tags &lt;br class='autobr' /&gt; &lt; ?php // ici votre code php - double slashe pour commenter ?&gt; &lt;br class='autobr' /&gt;
ecrire quelque chose dans la page Le code php s'execute mais n'est &#233;videmment pas vu dans la page envoy&#233;e vers le navigatuer. Pour qu'il &#233;crive quelque chose dans la page il faut lui specifier : $lavariable=&#034;est belle&#034; ; echo &#034;ma phrase &#034;.$lavariable.&#034; &#034; ; &lt;br class='autobr' /&gt;
D&#233;clarer une variable en php Ne (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Tutorial-" rel="directory"&gt;Tutorial&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Les codes que l'on doit avoir en t&#234;te et sous la main&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;D&#233;clarer du PHP&lt;/h2&gt;
&lt;p&gt;Ne pas oublier de mettre votre code php entre les bons tags&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // ici votre code php - double slashe pour commenter ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;ecrire quelque chose dans la page&lt;/h2&gt;
&lt;p&gt;Le code php s'execute mais n'est &#233;videmment pas vu dans la page envoy&#233;e vers le navigatuer. Pour qu'il &#233;crive quelque chose dans la page il faut lui specifier :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;$lavariable=&#034;est belle&#034;; echo &#034;ma phrase &#034;.$lavariable.&#034;&lt;br /&gt;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;D&#233;clarer une variable en php&lt;/h2&gt;
&lt;p&gt;Ne pas oublier bien s&#251;r de terminer chaque instruction par &#034; ;&#034;, bien s&#251;r.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php $mavariable=7; $ma_phrase=&#034;ma phrase&#034;; ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Boucle for&lt;/h2&gt;
&lt;p&gt;La boucle for permet de repeter une portion de code un certain nombre de fois, et d'utiliser le &#034;pas&#034; de la boucle gr&#226;ce &#224; la variable qui sert de test.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for($i=0;$i&lt;60;$i++) { // ceci se repete tant que la condition est vraie // dans ce cas de 0 &#224; 59 echo $i; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Boucle while&lt;/h2&gt;
&lt;p&gt;Plus d&#233;licate, la boucle for se p&#233;p&#232;re tant que la condition est vraie, il faut que le code de la boucle permette de rendre faux le test sinon c'est le plantage.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;while($i=0:$i=60;$i++){ echo $i; $i++; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;inclure une autre page&lt;/h2&gt;
&lt;p&gt;Inclure une autre page est utile pour centraliser un code dans un fichier s&#233;par&#233; que l'on appelle, plut&#244;t que de le r&#233;&#233;crire dans plusieurs pages.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php include(&#034;monfichier.php&#034;); ?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un navigateur automatique avec opendir et jquery</title>
		<link>https://arts-numeriques.codedrops.net/Plus-un-navigateur-automatique</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-un-navigateur-automatique</guid>
		<dc:date>2008-11-26T00:11:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Javascript</dc:subject>
		<dc:subject>(X)html</dc:subject>
		<dc:subject>Php</dc:subject>
		<dc:subject>Ajax</dc:subject>

		<description>&lt;p&gt;Une application simple, melant php et jquery, permettant avec un seul fichier de naviguer dans les pages html d'un dossier. Ce script fabrique un menu d&#195;&#169;roulant comprenant toutes les pages html trouv&#195;&#169;es dans le dossier o&#195;&#185; il est d&#195;&#169;pos&#195;&#169; avec php, et permet d'afficher le contenu de ces pages sans rechargement gr&#195;&#162;ce &#195; jquery.&lt;/p&gt;

-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Javascript-+" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-X-html-+" rel="tag"&gt;(X)html&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Ajax-+" rel="tag"&gt;Ajax&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Une application simple, melant php et jquery, permettant avec un seul fichier de naviguer dans les pages html d'un dossier. Ce script fabrique un menu d&#195;&#169;roulant comprenant toutes les pages html trouv&#195;&#169;es dans le dossier o&#195;&#185; il est d&#195;&#169;pos&#195;&#169; avec php, et permet d'afficher le contenu de ces pages sans rechargement gr&#195;&#162;ce &#195; jquery.&lt;br class='manualbr' /&gt;Ce code a &#195;&#169;t&#195;&#169; produit pour un besoin personnel, il n'est pas d&#195;&#169;gradable.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Voici le code php/html/javascript complet. Pour le faire fonctionner, il faut placer le fichier de la librairie jquery avec comme nom &#034;jquery.js&#034; dans un dossier &#034;includes&#034;. Ceci pour clairement s&#195;&#169;parer dans le dossier les pages html des autres &#195;&#169;l&#195;&#169;ments. Le script php ne s&#195;&#169;lection que les pages html, mais tout de m&#195;&#170;me, c'est plus propre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le dossier zipp&#195;&#169; reprend tout &#195;&#167;a.&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;!DOCTYPE html PUBLIC &#034;-//W3C//DTD XHTML 1.0 Transitional//EN&#034; &#034;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#034;&gt;
&lt;html xmlns=&#034;http://www.w3.org/1999/xhtml&#034;&gt;
&lt;head&gt;
&lt;meta http-equiv=&#034;Content-Type&#034; content=&#034;text/html;charset=utf-8&#034;/&gt;
&lt;title&gt;Presentation technique et technologie - St&#195;&#169;phane No&#195;&#171;l&lt;/title&gt;
&lt;script type=&#034;text/javascript&#034; src=&#034;include/jquery.js&#034;&gt;&lt;/script&gt;
&lt;link rel=&#034;stylesheet&#034; type=&#034;text/css&#034; href=&#034;include/styles.css&#034;/&gt;
&lt;script type=&#034;text/javascript&#034;&gt;
$(document).ready(function(){ // quand la page est entierement chargee // on ajoute un script qui se d&#195;&#169;clenche lorsque l'on change la valeur du selecteur $(&#034;#selecteur&#034;).change(function(){ var lien=$(&#034;#selecteur option:selected&#034;).attr(&#034;value&#034;); pompe(lien); }); // au d&#195;&#169;marrage de la page rien n'est charge, // alors on s&#195;&#169;lectionne le premier element du menu deroulant var lien=$(&#034;#selecteur option:first&#034;).attr(&#034;value&#034;); pompe(lien); }); function pompe(lien){ // requete ajax $.ajax({ url: lien, cache: false, success: function(html){ // si c'est reussi, la page est dans la variable html // recupere le titre avec la fonction split et une expression reguliere var stitre = new RegExp('&lt;title[^&gt;]*&gt;|&lt;/title&gt;', 'gi'); var titre = html.split(stitre); document.title = titre[1]; // recupere le contenu de body avec la fonction split et une expression reguliere var regcorps=new RegExp('&lt;body[^&gt;]*&gt;|&lt;/body&gt;', 'gi'); var corps=html.split(regcorps); $(&#034;#visualisateur&#034;).html(corps[1]); // place le selecteur au bon endroit $('#selecteur option:selected').selected=false; $(&#034;#selecteur option[@value='&#034; + lien + &#034;']&#034;).attr(&#034;selected&#034;,&#034;selected&#034;); } });
} function next() { // prend dans le selecteur la valeur de l'option suivant var lien=$(&#034;#selecteur option:selected&#034;).next().attr(&#034;value&#034;); if(lien){ pompe(lien); } } function prec() { // prend dans le selecteur la valeur de l'option precedent var lien=$(&#034;#selecteur option:selected&#034;).prev().attr(&#034;value&#034;); if(lien){ pompe(lien); } }
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&#034;headselection&#034;&gt;
&lt;?php // read all html file in the current directory if ($dh = opendir('./')) { $files = array(); while (($file = readdir($dh)) !== false) { if (substr($file, strlen($file) - 5) == '.html') { array_push($files, $file); } } closedir($dh); } // on trie les fichiers sort($files); // on affiche le menu echo &#034;&lt;select name='selecteur' id='selecteur'&gt;\n&#034;; foreach ($files as $file) { $title = Title($file); // on liste un lien par option en filtrant le nom a afficher echo &#034;&lt;option value=\&#034;$file\&#034;&gt;$title&lt;/option&gt;\n&#034;; } echo &#034;&lt;/select&gt;\n&#034;; // Function to get a human readable title from the filename function Title($filename) { $title = substr($filename, 0, strlen($filename) - 5); $title = str_replace('-', ' ', $title); $title = str_replace('_', ' ', $title); $title = ucwords($title); return $title; }
?&gt; &lt;a href=&#034;javascript:prec();&#034;&gt;Pr&#195;&#169;c&#195;&#169;dent&lt;/a&gt; - &lt;a href=&#034;javascript:next();&#034;&gt;Suivant&lt;/a&gt;
&lt;/div&gt; &lt;div id=&#034;visualisateur&#034;&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://arts-numeriques.codedrops.net/IMG/zip/navigateur_html.zip" length="19409" type="application/zip" />
		

	</item>
<item xml:lang="fr">
		<title>Lister le contenu d'un r&#195;&#169;pertoire avec PHP</title>
		<link>https://arts-numeriques.codedrops.net/plus-lister-le-contenu-d-un</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/plus-lister-le-contenu-d-un</guid>
		<dc:date>2008-11-25T22:39:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>

		<description>
&lt;p&gt;Php permet de lister le contenu de r&#195;&#169;pertoires, ce qui peut &#195;&#170;tre utile : cr&#195;&#169;ation de galerie image &#195; la vol&#195;&#169;e, par exemple, ou comme dans le script ci dessous, lister les pages html et en faire un navigateur automatique. &lt;br class='autobr' /&gt; Lister le contenu brut On va commencer par lister comme des brutes ce qu'il y a dans le dossier point&#195;&#169;. Ici on pointe sur le r&#195;&#169;pertoire courant, celui o&#195;&#185; est plac&#195;&#169; notre fichier. Voir la d&#195;&#169;finition de opendir sur php.net &lt;br class='autobr' /&gt; &lt; ?php $dir = &#034;./&#034; ; // si le (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Php permet de lister le contenu de r&#195;&#169;pertoires, ce qui peut &#195;&#170;tre utile : cr&#195;&#169;ation de galerie image &#195; la vol&#195;&#169;e, par exemple, ou comme dans le script ci dessous, lister les pages html et en faire un navigateur automatique.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Lister le contenu brut&lt;/h2&gt;
&lt;p&gt;On va commencer par lister comme des brutes ce qu'il y a dans le dossier point&#195;&#169;. Ici on pointe sur le r&#195;&#169;pertoire courant, celui o&#195;&#185; est plac&#195;&#169; notre fichier.&lt;br class='manualbr' /&gt;&lt;a href=&#034;http://be.php.net/manual/fr/function.opendir.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Voir la d&#195;&#169;finition de opendir sur php.net&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php $dir = &#034;./&#034;;
// si le dossier pointe existe
if (is_dir($dir)) { // si il contient quelque chose if ($dh = opendir($dir)) { // boucler tant que quelque chose est trouve while (($file = readdir($dh)) !== false) { // affiche le nom et le type echo &#034;fichier : $file : type : &#034; . filetype($dir . $file) . &#034;&lt;br /&gt;\n&#034;; } // on ferme la connection closedir($dh); }
}
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;C'est brut de brut car les deux premiers items de la liste sont &#034;.&#034; et &#034;..&#034; qui sont des &#195;&#169;l&#195;&#169;ments du serveurs, pas cens&#195;&#169;s &#195;&#170;tre vus.&lt;/p&gt;
&lt;p&gt;On peut affiner un peu pour les masquer :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php $dir = &#034;./&#034;;
// si le dossier pointe existe
if (is_dir($dir)) { // si il contient quelque chose if ($dh = opendir($dir)) { // boucler tant que quelque chose est trouve while (($file = readdir($dh)) !== false) { // affiche le nom et le type si ce n'est pas un element du systeme if( $file != '.' &amp;&amp; $file != '..') { echo &#034;fichier : $file : type : &#034; . filetype($dir . $file) . &#034;&lt;br /&gt;\n&#034;; } } // on ferme la connection closedir($dh); }
}
?&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voil&#195; . On peut affiner le script pour n'afficher que les dossier ou n'afficher que les fichiers, en testant le type. On peut aussi afficher les dossiers puis les fichiers, on peut aussi faire des liens sur les noms de fichiers pour les ouvrir, bref on peut faire beaucoup de chose.&lt;/p&gt;
&lt;p&gt;Pour pouvoir afficher uniquement les images, on placera par exemple en plus du test sur les elements syst&#195;&#168;me :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;if( $file != '.' &amp;&amp; $file != '..' &amp;&amp; preg_match('#\.(jpe?g|gif|png)$#i', $file)) {&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;C'est une expression r&#195;&#169;guli&#195;&#168;re qui v&#195;&#169;rifie que le fichier se termine par une des extensions d'image web : jpeg, jpg, gif ou png. Les expressions r&#195;&#169;guli&#195;&#168;res sont un outil puissant mais parfois difficile &#195; manipuler. Les coder, ou faire des recherches sur le net pour trouver la bonne est parfois casse-t&#195;&#170;te. Mais quand &#195;&#167;a marche, c'est puissant.&lt;br class='manualbr' /&gt;On peut donc faire la m&#195;&#170;me chose pour s&#195;&#169;lectionner d'autres types de fichiers.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un formulaire avec entr&#195;&#169;e dans une base mysql</title>
		<link>https://arts-numeriques.codedrops.net/Plus-un-formulaire-avec-entree</link>
		<guid isPermaLink="true">https://arts-numeriques.codedrops.net/Plus-un-formulaire-avec-entree</guid>
		<dc:date>2008-11-25T11:19:03Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>St&#233;phane Noel</dc:creator>


		<dc:subject>Php</dc:subject>
		<dc:subject>Mysql</dc:subject>

		<description>
&lt;p&gt;Un script simple contenant tout-en-un un formulaire, son script de traitement et la liste du contenu de la base. Minimal pour voir toutes les &#195;&#169;tapes et les pr&#195;&#169;cautions d'usage. &lt;br class='autobr' /&gt; Toutes les parties rassembl&#195;&#169;es ici sont parfois plac&#195;&#169;es dans des fichiers distincts : formulaires et traitement par exemple peuvent &#195;&#170;tre dissoci&#195;&#169;s facilement pour des raisons de facilit&#195;&#169;. &lt;br class='autobr' /&gt;
Le script ci pr&#195;&#169;sent contient des informations de configuration que vous devez adapter &#195; votre environnement de test (&#8230;)&lt;/p&gt;


-
&lt;a href="https://arts-numeriques.codedrops.net/-Exemples-67-" rel="directory"&gt;Exemples&lt;/a&gt;

/ 
&lt;a href="https://arts-numeriques.codedrops.net/+-Php-+" rel="tag"&gt;Php&lt;/a&gt;, 
&lt;a href="https://arts-numeriques.codedrops.net/+-Mysql-+" rel="tag"&gt;Mysql&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Un script simple contenant tout-en-un un formulaire, son script de traitement et la liste du contenu de la base. Minimal pour voir toutes les &#195;&#169;tapes et les pr&#195;&#169;cautions d'usage.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Toutes les parties rassembl&#195;&#169;es ici sont parfois plac&#195;&#169;es dans des fichiers distincts : formulaires et traitement par exemple peuvent &#195;&#170;tre dissoci&#195;&#169;s facilement pour des raisons de facilit&#195;&#169;.&lt;/p&gt;
&lt;p&gt;Le script ci pr&#195;&#169;sent contient des informations de configuration que vous devez adapter &#195; votre environnement de test pour utiliser les scipts :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le nom du serveur (souvent localhost)
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; le nom d'utilisateur et le mot de passe
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; la base est &#195; cr&#195;&#169;er manuellement, elle s'appelle &#034;mysql_tests&#034;&lt;/p&gt;
&lt;p&gt;Une fois que c'est fait, &#195;&#167;a devrait marcher !&lt;/p&gt;
&lt;p&gt;Le code est comment&#195;&#169; pour que vous puissiez lire ligne par ligne ce qu'il fait.&lt;/p&gt;
&lt;p&gt;Le zip attach&#195;&#169; &#195; cet article contient le script complet avec un css.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;?php // ouverture de la connexion - ici pour mamp - $hote=&#034;localhost&#034;; $utilisateur=&#034;root&#034;; $password=&#034;root&#034;; // ouverture de la connexion $connexion = mysql_connect($hote,$utilisateur,$password); // choix de la base CD_test // ici il faudrait pour &#195;&#170;tre complet tester que la base existe, au besoin la creer // si vous utilisez ce script, vous devez donc cr&#195;&#169;er manuellement la table mysql_tests dans phpmyadmin mysql_select_db('mysql_tests',$connexion); // on teste pour voir si la base existe $requete=&#034;SELECT * FROM record;&#034;; $requete=mysql_query($requete,$connexion); // si la table n'existe pas, la cr&#195;&#169;er if (!$requete){ // contient un id auto-incrementiel, un nom, un contenu, et une date $requete=&#034;CREATE TABLE record (id int(7) NOT NULL auto_increment, nom varchar(255), contenu TEXT, date datetime, PRIMARY KEY (id))&#034;; mysql_query($requete,$connexion); } // initialiser la variable message $message=&#034;&#034;; // tester que post contient ce qui nous interesse, c'est &#195; dire au moins une array associative &#034;entrer&#034; // traiter ce qui a &#195;&#169;t&#195;&#169; envoy&#195;&#169; par le formulaire if(isset($_POST['entrer'])){ // on s&#195;&#169;curise le contenu avec addslashes $contenu=addslashes($_POST['contenu']); // on pr&#195;&#169;pare une date $date = date(&#034;Y-m-d H:m:s&#034;); // on ins&#195;&#168;re $requete=&#034;INSERT INTO record ( nom,contenu,date ) VALUES ('entree','$contenu','$date')&#034;; $envoi=mysql_query($requete,$connexion); // si c'est reussi, le dire dans le message if($envoi){ $message .=&#034;&lt;div id='message'&gt;Nouveau contenu entr&#195;&#169;&lt;/div&gt;&#034;; } } ?&gt; &lt;!DOCTYPE html PUBLIC &#034;-//W3C//DTD XHTML 1.0 Transitional//EN&#034; &#034;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#034;&gt; &lt;html xmlns=&#034;http://www.w3.org/1999/xhtml&#034;&gt; &lt;head&gt; &lt;meta http-equiv=&#034;Content-Type&#034; content=&#034;text/html;charset=utf-8&#034;/&gt; &lt;title&gt;Formulaire simple d'&#195;&#169;change avec une base de donn&#195;&#169;es&lt;/title&gt; &lt;link rel=&#034;stylesheet&#034; type=&#034;text/css&#034; href=&#034;style.css&#034;/&gt; &lt;/head&gt; &lt;body&gt; &lt;div id=&#034;general&#034;&gt; &lt;h1&gt;Fill base&lt;/h1&gt; &lt;p&gt; Cette page contient tout-en-un un formulaire, son script de traitement et la liste de son contenu. Un script tr&#195;&#168;s minimal qui permet de voir toutes les &#195;&#169;tapes. &lt;/p&gt; &lt;?php echo $message; ?&gt; &lt;form method=&#034;post&#034; action=&#034;form_et_table.php&#034;&gt; &lt;textarea name=&#034;contenu&#034;&gt;&lt;/textarea&gt; &lt;input type=&#034;submit&#034; name=&#034;entrer&#034; value=&#034;Entrer dans la base&#034; /&gt; &lt;/form&gt; &lt;hr /&gt; &lt;h2&gt;Contenu de la base&lt;/h2&gt; &lt;table&gt; &lt;?php $larequete=&#034;SELECT * FROM record ORDER BY id DESC&#034;; $requete = mysql_query($larequete,$connexion); $total = mysql_num_rows($requete); if ($total) { while($row = mysql_fetch_array($requete)) { // ecriture des tags de retour echo &#034;&lt;tr&gt;\n&#034;; echo &#034;&lt;td&gt;&#034;.$row['id'].&#034;&lt;/td&gt;&#034;; echo &#034;&lt;td&gt;&#034;.$row['nom'].&#034;&lt;/td&gt;&#034;; echo &#034;&lt;td&gt;&#034;.$row['contenu'].&#034;&lt;/td&gt;&#034;; echo &#034;&lt;td&gt;&#034;.$row['date'].&#034;&lt;/td&gt;&#034;; echo &#034;\n&lt;/tr&gt;\n&#034;; } } else { echo &#034;&lt;tr&gt;&lt;td&gt;pas d'entr&#195;&#169;e&lt;/td&gt;&lt;/tr&gt;&#034;; } ?&gt; &lt;/table&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://arts-numeriques.codedrops.net/IMG/zip/form_table_liste.zip" length="2208" type="application/zip" />
		

	</item>



</channel>

</rss>
