<?xml
version="1.0" encoding="utf-8"?>
<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>Vader[FR] : ce n'est pas un blog, c'est un Sith</title>
	<link>https://vader-fr.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="http://vader-fr.fr/spip.php?id_rubrique=3&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>Vader[FR] : ce n'est pas un blog, c'est un Sith</title>
		<url>http://vader-fr.fr/local/cache-vignettes/L144xH144/siteon0-c1872.jpg?1771612673</url>
		<link>https://vader-fr.fr/</link>
		<height>144</height>
		<width>144</width>
	</image>



<item xml:lang="fr">
		<title>JavaScript</title>
		<link>http://vader-fr.fr/spip.php?article199</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article199</guid>
		<dc:date>2023-10-11T17:07:25Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;JavaScript &lt;br class='autobr' /&gt;
JavaScript &lt;br class='autobr' /&gt;
JavaScript est un langage interpr&#233;t&#233;, ex&#233;cut&#233; c&#244;t&#233; client par le navigateur. Il n'y a aucun lien avec le langage compil&#233; Java. &lt;br class='autobr' /&gt;
S'ex&#233;cutant dans le navigateur, les droits du javaScript sont limit&#233;s. Il ne peut par exemple pas lire ou &#233;crire sur le disque dur. &lt;br class='autobr' /&gt;
Les scripts et fonctions en JavaScript permettent de modifier la page en temps r&#233;el, sans avoir &#224; recharger toutes les informations depuis le serveur. &lt;br class='autobr' /&gt;
Contrairement &#224; de nombreux sites, le site &#034;Vader-fr&#034; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique30" rel="directory"&gt;Vader-fr.fr&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://vader-fr.fr/local/cache-vignettes/L150xH123/logo-javascript-6f5ee.png?1771613035' class='spip_logo spip_logo_right' width='150' height='123' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;JavaScript&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;h3 class=&#034;spip&#034;&gt;JavaScript&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#034;https://fr.wikipedia.org/wiki/JavaScript&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;JavaScript&lt;/a&gt; est un langage interpr&#233;t&#233;, ex&#233;cut&#233; c&#244;t&#233; client par le navigateur. Il n'y a aucun lien avec le langage compil&#233; Java.&lt;/p&gt;
&lt;p&gt;S'ex&#233;cutant dans le navigateur, les droits du javaScript sont limit&#233;s. Il ne peut par exemple pas lire ou &#233;crire sur le disque dur.&lt;/p&gt;
&lt;p&gt;Les scripts et fonctions en JavaScript permettent de modifier la page en temps r&#233;el, sans avoir &#224; recharger toutes les informations depuis le serveur.&lt;/p&gt;
&lt;p&gt;Contrairement &#224; de nombreux sites, le site &#034;Vader-fr&#034; ne fait appel &#224; aucun domaine tiers (voir onglet suivant).&lt;/p&gt;
&lt;p&gt;Mais le site utilise n&#233;anmoins du JavaScript afin de fournir quelques fonctionnalit&#233;s tr&#232;s pratiques :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Syst&#232;me d'onglets et de pages sur les articles, permettant de s&#233;parer les &#034;chapitres&#034; en onglets diff&#233;rents, d'avoir un article moins long et plus lisible.&lt;/li&gt;&lt;li&gt; Blocs d&#233;pliants&lt;/li&gt;&lt;li&gt; Protection des adresses courriel dans les articles et descriptif des rubriques.&lt;/li&gt;&lt;li&gt; Tri des tableaux&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Serveur tiers&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;&lt;h3 class=&#034;spip&#034;&gt;Serveur tiers&lt;/h3&gt;
&lt;p&gt;Serveur tiers ou Domaine tiers ou Site tiers : Serveur n'&#233;tant pas l'h&#233;bergeur de la page Web visit&#233;e mais un autre serveur, d'un autre domaine, auquel la page visit&#233;e fait un appel pour une raison quelconque (publicit&#233;, script, image, PDF, composants de la page visit&#233;e, calculs, etc.)&lt;/p&gt;
&lt;p&gt;Sous Firefox, le plugin &lt;a href=&#034;https://addons.mozilla.org/fr/firefox/addon/lightbeam-chikl/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;LightBeam&lt;/a&gt; permet de visualiser les relations entre les diff&#233;rents sites.&lt;/p&gt;
&lt;p&gt;Toujours sur Firefox, des plugins permettent de g&#233;rer l'ex&#233;cution des scripts de domaines tiers, par exemple :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://addons.mozilla.org/fr/firefox/addon/noscript/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;NoScript&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://addons.mozilla.org/fr/firefox/addon/ghostery/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Ghostery&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://addons.mozilla.org/fr/firefox/addon/ublock-origin/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;uBlock Origin&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voici par exemple les serveurs tiers signal&#233;s sur le site &lt;a href=&#034;https://www.ouest-france.fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Ouest-France&lt;/a&gt; :&lt;/p&gt;
&lt;dl class='spip_document_642 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH166/ouestfrance-noscript-db5ad.png?1771613035' width='500' height='166' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:350px;'&gt;&lt;strong&gt;Domaines Tiers site Ouest-France - NoScript&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;dl class='spip_document_643 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH475/ouestfrance-ghostery-400fb.png?1771613035' width='500' height='475' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:350px;'&gt;&lt;strong&gt;Domaines Tiers site Ouest-France - Ghostery&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;dl class='spip_document_644 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH465/ouestfrance-ublock-22ec8.png?1771613035' width='500' height='465' alt='' /&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:350px;'&gt;&lt;strong&gt;Domaines Tiers site Ouest-France - uBlock Origin&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>EcoIndex</title>
		<link>http://vader-fr.fr/spip.php?article198</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article198</guid>
		<dc:date>2023-10-11T16:53:35Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;l'EcoIndex calcule la performance et l'empreinte environnementale des pages web. &lt;br class='autobr' /&gt;
Voir aussi : EcoIndex &lt;br class='autobr' /&gt;
Lire aussi : Article d'origine sur TheConversation Repris dans cet article sur 20minutes Repris dans cet article de l'ENS Lyon (&#201;cole Normale Sup&#233;rieure) Article sur FranceNum, le portail de la transformation num&#233;rique des entreprises Article sur greenIT, association (loi 1901) qui f&#233;d&#232;re les experts &#224; l'origine des d&#233;marches de sobri&#233;t&#233; num&#233;rique, num&#233;rique responsable, &#233;coconception (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique3" rel="directory"&gt;D&#233;veloppement web&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://vader-fr.fr/local/cache-vignettes/L64xH64/ecoscore-a-e485d.png?1771605716' class='spip_logo spip_logo_right' width='64' height='64' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;l'EcoIndex calcule la performance et l'empreinte environnementale des pages web.&lt;/p&gt;
&lt;p&gt;Voir aussi : &lt;a href=&#034;https://www.ecoindex.fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;EcoIndex&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lire aussi :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://theconversation.com/ecoindex-que-vaut-cet-outil-qui-mesure-le-score-environnemental-des-sites-web-203836&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Article d'origine sur TheConversation&lt;/a&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Repris dans cet &lt;a href=&#034;https://www.20minutes.fr/planete/environnement/4037831-20230524-sobriete-numerique-vaut-ecoindex-outil-mesure-score-environnemental-sites-web&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;article sur 20minutes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Repris dans cet &lt;a href=&#034;http://www.ens-lyon.fr/actualite/recherche/ecoindex-que-vaut-cet-outil-qui-mesure-le-score-environnemental-des-sites-web&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;article de l'ENS Lyon&lt;/a&gt; (&#201;cole Normale Sup&#233;rieure)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://www.francenum.gouv.fr/guides-et-conseils/pilotage-de-lentreprise/numerique-durable/evaluer-lempreinte-environnementale-de&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Article sur FranceNum&lt;/a&gt;, le portail de la transformation num&#233;rique des entreprises&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://www.greenit.fr/2023/03/07/ecoindex-mise-a-jour-majeur-de-la-boite-a-outils/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Article sur greenIT&lt;/a&gt;, association (loi 1901) qui f&#233;d&#232;re les experts &#224; l'origine des d&#233;marches de sobri&#233;t&#233; num&#233;rique, num&#233;rique responsable, &#233;coconception de service num&#233;rique et slow.tech.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le score obtenu par vader-fr.fr est de 81 / 100, ce qui le classe en cat&#233;gorie A&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;plus la note tend vers A, plus le score est &#233;lev&#233;, mieux c'est !&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;dl class='spip_document_639 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href=&#034;https://www.ecoindex.fr/resultat/?id=98f624f5-3334-49b1-9c8a-acdee9ead7f1&#034; class=&#034;spip_out&#034; title=' Score EcoIndex'&gt;&lt;img src='http://vader-fr.fr/local/cache-vignettes/L64xH64/ecoscore-a-8fec2.png?1771613035' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt; Score EcoIndex&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;csfoo htmla&#034;&gt;&lt;/span&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;&lt;span class=&#034;csfoo htmlb&#034;&gt;&lt;/span&gt;plus la note tend vers A, plus le score est &#233;lev&#233;, mieux c'est !&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Pr&#233;sentation g&#233;n&#233;rale du site</title>
		<link>http://vader-fr.fr/spip.php?article190</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article190</guid>
		<dc:date>2022-06-20T08:31:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;Site de l'association &#034;Histoire et Patrimoine&#034; de la commune de Les Touches en Loire Atlantique 1914-1918 - premi&#232;re guerre mondiale 1939-1945 - deuxi&#232;me guerre mondiale, r&#233;sistance en Loire Inf&#233;rieure (Loire Atlantique) actualit&#233;s sur la commune de Les Touches actualit&#233;s et informations sur l'association &lt;br class='autobr' /&gt;
Reprend &#233;galement des articles des sites d'Henri Lepage. &lt;br class='autobr' /&gt;
&#201;tant un site d'information et non artistique, ce site a besoin d'afficher beaucoup d'informations, son design est donc assez (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique44" rel="directory"&gt;Les Touches (44) - Histoire et patrimoine&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Site de l'association &#034;Histoire et Patrimoine&#034; de la commune de &lt;a href=&#034;https://fr.wikipedia.org/wiki/Les_Touches&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Les Touches&lt;/a&gt; en Loire Atlantique&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; 1914-1918 - premi&#232;re guerre mondiale&lt;/li&gt;&lt;li&gt; 1939-1945 - deuxi&#232;me guerre mondiale, r&#233;sistance en Loire Inf&#233;rieure (Loire Atlantique)&lt;/li&gt;&lt;li&gt; actualit&#233;s sur la commune de Les Touches&lt;/li&gt;&lt;li&gt; actualit&#233;s et informations sur l'association&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Reprend &#233;galement des articles des sites d'&lt;a href=&#034;https://www.ouest-france.fr/pays-de-la-loire/les-touches-44390/henri-lepage-lhomme-qui-fait-vivre-les-touches-sur-internet-4442810&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Henri Lepage&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&#201;tant un site d'information et non artistique, ce site a besoin d'afficher beaucoup d'informations, son design est donc assez &#034;charg&#233;&#034; contrairement &#224; un site d'artiste ou de design qui, simple vitrine, serait plus &#233;pur&#233;.&lt;br class='autobr' /&gt;
Le design reste donc tr&#232;s classique, un ent&#234;te qui fait aussi menu de navigation (avec champ de recherche), pied de page et cadre contenu sur toute la largeur au centre pour plus de lisibilit&#233;, lequel reste fixe dans la page et a son propre scrolling.&lt;br class='autobr' /&gt;
Petite &#034;innovation&#034; personnelle&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Je n'ai pas vu de tel design sur un autre site, mais il est possible que (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; que l'on retrouve &#233;galement sur mon site, un cadre d&#233;pliant sur la droite liste les articles de la m&#234;me rubrique.&lt;/p&gt;
&lt;p&gt;Ce site sous SPIP a &#233;t&#233; cr&#233;&#233; &#224; partir du squelette zpip, &#034;customis&#233;&#034; pour le site Vader-fr.fr, avec quelques modifications &#224; la marge.&lt;/p&gt;
&lt;p&gt;Son fonctionnement technique sera d&#233;taill&#233; dans cette rubrique :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelette&lt;/li&gt;&lt;li&gt; style CSS dont multi-rubrique&lt;/li&gt;&lt;li&gt; scripts JavaScript&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;csfoo htmla&#034;&gt;&lt;/span&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;&lt;span class=&#034;csfoo htmlb&#034;&gt;&lt;/span&gt;Je n'ai pas vu de tel design sur un autre site, mais il est possible que cela existe.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Fonctions pour PDO</title>
		<link>http://vader-fr.fr/spip.php?article180</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article180</guid>
		<dc:date>2018-07-01T10:29:46Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;PDO est une couche d'abstraction en PHP permettant d'adresser une base de donn&#233;es ind&#233;pendamment de son type (MySQL, PostGres, Oracle...) Par s&#233;curit&#233;, il est pr&#233;f&#233;rable de faire des requ&#234;tes param&#233;tr&#233;es afin d'&#233;viter l'injection SQL. Le contrecoup, c'est le rajout de code qui devient plus long &#224; &#233;crire. &lt;br class='autobr' /&gt;
Le code &#233;tant toujours le m&#234;me, il est toutefois possible de le simplifier en cr&#233;ant une fonction simple qu'il suffira d'appeler. &lt;br class='autobr' /&gt;
Cette premi&#232;re fonction permet de pr&#233;parer et ex&#233;cuter (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique42" rel="directory"&gt;Exemples de fonctions PHP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;PDO est une couche d'abstraction en PHP permettant d'adresser une base de donn&#233;es ind&#233;pendamment de son type (MySQL, PostGres, Oracle...)&lt;br class='autobr' /&gt;
Par s&#233;curit&#233;, il est pr&#233;f&#233;rable de faire des requ&#234;tes param&#233;tr&#233;es afin d'&#233;viter l'injection SQL.&lt;br class='autobr' /&gt;
Le contrecoup, c'est le rajout de code qui devient plus long &#224; &#233;crire.&lt;/p&gt;
&lt;p&gt;Le code &#233;tant toujours le m&#234;me, il est toutefois possible de le simplifier en cr&#233;ant une fonction simple qu'il suffira d'appeler.&lt;/p&gt;
&lt;p&gt;Cette premi&#232;re fonction permet de pr&#233;parer et ex&#233;cuter une requ&#234;te, laquelle peut &#234;tre param&#233;tr&#233;e, et dont le r&#233;sultat pourra &#234;tre :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; plusieurs lignes, trait&#233;es ensuite dans une boucle foreach&lt;/li&gt;&lt;li&gt; un nombre de ligne modifi&#233;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Elle effectue donc un prepare, puis bindValue pour 0-n param&#232;tres, puis un execute, et renvoie l'objet requ&#234;te PDO. &lt;br class='autobr' /&gt;
les param&#232;tres de la requ&#234;tes sont fournis dans un tableau qui commence &#224; 1 (de pr&#233;f&#233;rence) ou z&#233;ro&lt;br class='autobr' /&gt;
la requ&#234;te doit donc avoir &#034; ?&#034; en param&#232;tre(s) afin de pouvoir les affecter depuis un tableau par indice, plus facilement traitable. voir l'exemple plus bas&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;function prepexec($rek,$params,$db){ if (isset($params[0])){ $debut=0; $correc=1; $fin=sizeof($params)-1; }else{ $debut=1; $correc=0; $fin=sizeof($params); } $rk=$db-&gt;prepare($rek); // si tableau param vide, pas de bindValue =&gt; fonction unique prepare avec/sans param + exec for ($i=$debut;$i&lt;=$fin;$i++){ $typ_param=PDO::PARAM_STR;// PAR DEFAUT $param=$params[($i+$correc)]; if (preg_match(&#034;/[\w]+/&#034;,$param)){ $typ_param=PDO::PARAM_STR; } // PDO::PARAM_STR if (preg_match(&#034;/^[+-]?\d+$/&#034;,$param)){ $typ_param=PDO::PARAM_INT; } // PDO::PARAM_INT // PDO::PARAM_BOOL - MySQL might not support PARAM_BOOL if (preg_match(&#034;/^$/&#034;,$param)){ $typ_param=PDO::PARAM_NULL; } // PDO::PARAM_NULL $rk-&gt;bindValue($i,$param,$typ_param); } // renvoie la requ&#234;te pr&#233;par&#233;e et execut&#233;e $rk-&gt;execute(); // $nb=$rk-&gt;execute(); OU foreach ($rk as $result){ // donc $nb=prepexec(... ou $rk=prepexec puis foreach($rk... ou m&#234;me foreach(prepexec... return $rk; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;exemple d'appel :&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; $rek=&#034;select count(login) as existe from utilisateur where login=?&#034;; $params[1]=$user; $rk=prepexec($rek,$params,$db); $existe=0; foreach ($rk as $result){ $existe=$result['existe']; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cependant, cela est encore trop long.&lt;br class='autobr' /&gt;
Cette deuxi&#232;me fonction va donc faire le boulot en appelant la premi&#232;re et en renvoyant la valeur attendue, unique, et dont le nom du champ est indiqu&#233;.&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;function simplexec($rek,$params,$db,$nomvar){ $resultat=null; $rk=prepexec($rek,$params,$db); foreach ($rk as $result){ $resultat=$result[&#034;$nomvar&#034;]; } return $resultat; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Fonctions sur les mots de passe</title>
		<link>http://vader-fr.fr/spip.php?article179</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article179</guid>
		<dc:date>2018-07-01T10:27:49Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;Diverses fonctions pour g&#233;rer l'authentification d'utilisateurs et le stockage s&#233;curis&#233; des mots de passe dans la BDD. &lt;br class='autobr' /&gt;
V&#233;rification de la complexit&#233; d'un mot de passe &lt;br class='autobr' /&gt;
si la fonction renvoie une cha&#238;ne vide lorsqu'on l'appelle, tout baigne. &lt;br class='autobr' /&gt; function chk_complex_mp($motpass) $message=&#034;&#034; ; $patterns[0]=&#034;/^.*[A-Z].*+$/&#034; ;	$complexe[0]=&#034;Il faut au moins une lettre majuscule&#034; ; $patterns[1]=&#034;/^.*[a-z].*+$/&#034; ;	$complexe[1]=&#034;Il faut au moins une lettre minuscule&#034; ; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique42" rel="directory"&gt;Exemples de fonctions PHP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Diverses fonctions pour g&#233;rer l'authentification d'utilisateurs et le stockage s&#233;curis&#233; des mots de passe dans la BDD.&lt;/p&gt;
&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;V&#233;rification de la complexit&#233; d'un mot de passe&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;si la fonction renvoie une cha&#238;ne vide lorsqu'on l'appelle, tout baigne.&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;function chk_complex_mp($motpass){ $message=&#034;&#034;; $patterns[0]=&#034;/^.*[A-Z].*+$/&#034;;	$complexe[0]=&#034;Il faut au moins une lettre majuscule&lt;br/&gt;&#034;; $patterns[1]=&#034;/^.*[a-z].*+$/&#034;;	$complexe[1]=&#034;Il faut au moins une lettre minuscule&lt;br/&gt;&#034;; $patterns[2]=&#034;/^.*[0-9].*+$/&#034;;	$complexe[2]=&#034;Il faut au moins un chiffre&lt;br/&gt;&#034;; $patterns[3]=&#034;/^.{8,}$/&#034;; $complexe[3]=&#034;Il faut au moins 8 caract&#232;res&lt;br/&gt;&#034;; for ($i=0;$i&lt;sizeof($patterns);$i++){ $pattern=$patterns[$i]; if (!preg_match(&#034;$pattern&#034;,$motpass)){ $message.=$complexe[$i]; } } return $message; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Hashage de mot de passe avec sel, par algorithme choisi&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Cette fonction n'est qu'un exemple de fonction de cryptage, il est possible de faire plus souple/plus complexe.&lt;br class='autobr' /&gt;
A partir d'un mot de passe en clair, d'une cha&#238;ne de salage et d'un algorithme de hashage, elle :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; casse le sel en 3 parties de 10 caract&#232;res&lt;/li&gt;&lt;li&gt; casse le mot de passe en 3 parties &#233;gales&lt;/li&gt;&lt;li&gt; hash une premi&#232;re fois les morceaux de mot de passe m&#233;lang&#233;s aux morceaux de sel&lt;/li&gt;&lt;li&gt; re-casse le mot de passe sal&#233; et hash&#233; en 3 parties &#233;gales&lt;/li&gt;&lt;li&gt; et enfin re-m&#233;lange le sel avec le mot de passe hash&#233;.&lt;/li&gt;&lt;/ul&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;function genere_motpasse($motpasse,$alt,$algo){ $alt1=substr($alt, 0, 10); $alt2=substr($alt, 10, 10); $alt3=substr($alt, 20, 10); $taillepass=strlen($motpasse); $taillemorceau=intval($taillepass/3); $pass1=substr($motpasse,0,$taillemorceau); $pass2=substr($motpasse,$taillemorceau,$taillemorceau); $pass3=substr($motpasse,($taillemorceau*2)); $passfin=hash($algo,&#034;$pass1$alt1$pass2$alt2$pass3$alt3&#034;); $taillepassf=strlen($passfin); $taillemorceauf=intval($taillepassf/3); $passf1=substr($passfin,0,$taillemorceauf); $passf2=substr($passfin,$taillemorceauf,$taillemorceauf); $passf3=substr($passfin,($taillemorceauf*2)); $passfou=&#034;$passf1$alt1$passf2$alt2$passf3$alt3&#034;; // le mot de passe coup&#233;, sal&#233;, hash&#233; et re-sal&#233; est : return $passfou; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;G&#233;n&#233;ration de mot de passe al&#233;atoire et/ou de sel&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;voir l'&lt;a href=&#034;https://fr.wikipedia.org/wiki/Salage_%28cryptographie%29&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;article&lt;/a&gt; sur le salage en informatique sur Wikipedia.&lt;/p&gt;
&lt;p&gt;Cette fonction g&#233;n&#232;re donc une cha&#238;ne al&#233;atoire, par exemple pour le sel al&#233;atoire, qui devra &#234;tre stock&#233;, &#233;ventuellement pour chaque utilisateur.&lt;br class='autobr' /&gt;
Cela permet de se prot&#233;ger (dans une certaine mesure) des attaques par rainbow table.&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;// g&#233;n&#232;re une cha&#238;ne alpha-num&#233;rique al&#233;atoire de longueur $taille function genere_chaine_aleatoire($taille) { $code_aleatoire=&#034;&#034;; $chaine=&#034;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789&#034;; srand((double)microtime()*1000000); for($i=0; $i&lt;$taille; $i++) { $code_aleatoire.=$chaine[rand()%strlen($chaine)]; // ou $code_aleatoire .= substr($chaine,rand()%(strlen($chaine)),1); // ou $code_aleatoire .= $chaine[ rand(0, ($nb_chars-1)) ]; } // ou $code_aleatoire = str_shuffle('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); return $code_aleatoire; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;si l'on veut casser et m&#233;langer le sel et le mot de passe avant/apr&#232;s cryptage selon les chiffres compris dans le sel, il est possible, &#224; sa g&#233;n&#233;ration, de rajouter une cha&#238;ne &#034;0 &#224; 9&#034; au sel si celui-ci ne contient pas de chiffre, puis de m&#233;langer le sel par la fonction str_shuffle().&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Choix d'un algorithme de hashage&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Ce bout de code cherche dans le tableau renvoy&#233; par la fonction &#034;hash_algos&#034; les meilleurs algorithmes de hashage.&lt;br class='autobr' /&gt;
hash_algos() renvoie les algorithmes support&#233;s sur le syst&#232;me.&lt;/p&gt;
&lt;p&gt;Une fois trouv&#233;, l'algorithme &#224; utiliser pourra &#234;tre stock&#233; soit dans le fichier connect.php, soit dans la base de donn&#233;es, dans une table de m&#233;ta-variables.&lt;br class='autobr' /&gt;
Les algorithmes &#224; chercher sont tri&#233;s par ordre &#034;de pr&#233;f&#233;rence&#034; du plus s&#251;r (sha512, whrilpool...) au moins s&#251;r (crc32).&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; // chercher dans hash_algos si sha512, sha256, sha1... sont utilisables. $algos_prefs=array(&#034;sha512&#034;, &#034;whirlpool&#034;, &#034;sha384&#034;, &#034;ripemd320&#034;, &#034;sha256&#034;, &#034;snefru256&#034;, &#034;ripemd256&#034;, &#034;snefru&#034;, &#034;gost&#034;, &#034;sha224&#034;, &#034;ripemd160&#034;, &#034;ripemd128&#034;, &#034;fnv164&#034;, &#034;joaat&#034;, &#034;crc32b&#034;, &#034;adler32&#034;, &#034;fnv132&#034;, &#034;crc32&#034;); $algo=null; $i=0; $nbalgos=sizeof($algos_prefs); while (($i&lt;$nbalgos)&amp;&amp;($algo==null)){ if (in_array($algos_prefs[$i],hash_algos())){ $info.=&#034;&lt;span class=\&#034;info\&#034;&gt;&#034;.$algos_prefs[$i].&#034; est support&#233;&lt;/span&gt;&lt;br/&gt;&#034;; $algo=$algos_prefs[$i]; }else{ $info.=&#034;&lt;span class=\&#034;debug\&#034;&gt;&#034;.$algos_prefs[$i].&#034; non support&#233;&lt;/span&gt;&lt;br/&gt;&#034;; $i++; } } if ($algo==null){ $info.=&#034;&lt;span class=\&#034;error\&#034;&gt;Aucun algorithme support&#233; parmi ceux cherch&#233;s&lt;/span&gt;&lt;br/&gt;&#034;; $debug.=&#034;Aucun algorithme support&#233; parmi ceux cherch&#233;s&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Transformer une dur&#233;e en secondes en sa description textuelle</title>
		<link>http://vader-fr.fr/spip.php?article178</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article178</guid>
		<dc:date>2018-07-01T10:23:43Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;// transforme une dur&#233;e en secondes en sa description textuelle function sec2txt($durees) $tabpuis=array(&#034;seconde&#034;,&#034;minute&#034;,&#034;heure&#034;,&#034;jour&#034;) ; // + 30j/mois, 12 mois/an... ? $tabfrac=[60,60,24] ; $traite=$durees ; $puiss=0 ; $duree=&#034;&#034; ; while ($traite&gt;=$tabfrac[$puiss]) $reste=$traite%$tabfrac[$puiss] ; $fraction=($traite-$reste)/$tabfrac[$puiss] ; if ($reste&gt;0) $duree=($duree !=&#034;&#034;) ?&#034; $duree&#034; :$duree ; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique42" rel="directory"&gt;Exemples de fonctions PHP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&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;// transforme une dur&#233;e en secondes en sa description textuelle function sec2txt($durees){ $tabpuis=array(&#034;seconde&#034;,&#034;minute&#034;,&#034;heure&#034;,&#034;jour&#034;); // + 30j/mois, 12 mois/an... ? $tabfrac=[60,60,24]; $traite=$durees; $puiss=0; $duree=&#034;&#034;; while ($traite&gt;=$tabfrac[$puiss]){ $reste=$traite%$tabfrac[$puiss]; $fraction=($traite-$reste)/$tabfrac[$puiss]; if ($reste&gt;0){ $duree=($duree!=&#034;&#034;)?&#034; $duree&#034;:$duree; $duree=($reste&gt;1)?&#034;$reste &#034;.$tabpuis[$puiss].&#034;s&#034;.$duree:&#034;$reste &#034;.$tabpuis[$puiss].$duree; } $puiss++; $traite=$fraction; } $duree=($duree!=&#034;&#034;)?&#034; $duree&#034;:$duree; $duree=($traite&gt;1)?&#034;$traite &#034;.$tabpuis[$puiss].&#034;s&#034;.$duree:&#034;$traite &#034;.$tabpuis[$puiss].$duree; return $duree; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Transformer un nombre (entier naturel) en sa description textuelle</title>
		<link>http://vader-fr.fr/spip.php?article177</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article177</guid>
		<dc:date>2018-07-01T10:20:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;// transforme un nombre en sa description textuelle function num2txt($num) $res=($num1) $res.=$tabchiffres[$milnum[0]].&#034; cent&#034; ; $res.=(($milnum[1]&gt;0)||($milnum[2]&gt;0)||($puiss&gt;=2)) ?&#034;s&#034; :&#034;&#034; ; if ($taillenum&gt;=2) // si 2 chiffres, traiter dizaines $pos=($taillenum==3) ?1:0 ; $res.=($res !=&#034;&#034;) ?&#034; &#034; :&#034;&#034; ; //$res.=($pos !=0) ?&#034; &#034; :&#034;&#034; ; $next=$pos+1 ; // si 1 if ($milnum[$pos]==1) if (($milnum[$next]&gt;=1)&amp;&amp;($milnum[$next]&lt;=6)) // onze &#224; (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique42" rel="directory"&gt;Exemples de fonctions PHP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&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;// transforme un nombre en sa description textuelle
function num2txt($num){ $res=($num&lt;0)?&#034;moins&#034;:&#034;&#034;; $tabchiffres=array(&#034;&#034;,&#034;un&#034;,&#034;deux&#034;,&#034;trois&#034;,&#034;quatre&#034;,&#034;cinq&#034;,&#034;six&#034;,&#034;sept&#034;,&#034;huit&#034;,&#034;neuf&#034;); // commence &#224; z&#233;ro ! $tabdix=array(&#034;&#034;,&#034;onze&#034;,&#034;douze&#034;,&#034;treize&#034;,&#034;quatorze&#034;,&#034;quinze&#034;,&#034;seize&#034;); // idem $tabdizaines=array(&#034;&#034;,&#034;dix&#034;,&#034;vingt&#034;,&#034;trente&#034;,&#034;quarante&#034;,&#034;cinquante&#034;,&#034;soixante&#034;);	// idem $trnum=number_format($num); // pas de partie d&#233;cimale, une , entre chaque millier $tabnum=explode(&#034;,&#034;,$trnum); $puiss=count($tabnum); // 1 = entre 0 et 999, 2 = entre 1000 et 999 999 milliers, 3 = entre 1 000 000 et 999 999 999 milions, 4 =... $tabpuis=array(&#034;&#034;,&#034;&#034;,&#034;mille&#034;,&#034;million&#034;,&#034;milliard&#034;); // centaine/dizaine de milliards, centaine/dizaine de million, centaine/dizaine de millier, centaine/dizaine/unit&#233; foreach ($tabnum as $milnum){ $taillenum=strlen($milnum); $res.=($res!=&#034;&#034;)?&#034; &#034;:&#034;&#034;; $verrounite=false; if ($taillenum==3) { // si 3 chiffres, traiter centaines // si 0 = rien, sinon x cent(s) if ($milnum[0]==1){ $res.=&#034;cent&#034;; } if ($milnum[0]&gt;1){ $res.=$tabchiffres[$milnum[0]].&#034; cent&#034;; $res.=(($milnum[1]&gt;0)||($milnum[2]&gt;0)||($puiss&gt;=2))?&#034;s&#034;:&#034;&#034;; } } if ($taillenum&gt;=2) { // si 2 chiffres, traiter dizaines $pos=($taillenum==3)?1:0; $res.=($res!=&#034;&#034;)?&#034; &#034;:&#034;&#034;; //$res.=($pos!=0)?&#034; &#034;:&#034;&#034;; $next=$pos+1; // si 1 if ($milnum[$pos]==1){ if (($milnum[$next]&gt;=1)&amp;&amp;($milnum[$next]&lt;=6)){ // onze &#224; seize $res.=$tabdix[$milnum[$next]]; $verrounite=true; }else{ // 0 +	si 7 &#224; 9 = dix- $res.=$tabdizaines[1]; $res.=($milnum[$next]&gt;=7)?&#034;-&#034;:&#034;&#034;; } } // si 2 &#224; 6 if (($milnum[$pos]&gt;1)&amp;&amp;($milnum[$pos]&lt;7)){ $res.=$tabdizaines[$milnum[$pos]]; $res.=($milnum[$next]&gt;0)?&#034;-&#034;:&#034;&#034;; } // si 7, 8 et 9 qui utilisent aussi le chiffre des unit&#233;s if ($milnum[$pos]==7){ $res.=&#034;soixante&#034;; if ($milnum[$next]==0){ $res.=&#034;-dix&#034;; } if ($milnum[$next]==1){ $res.=&#034; et onze&#034;; } if (($milnum[$next]&gt;=2)&amp;&amp;($milnum[$next]&lt;=6)){ $res.=&#034;-&#034;.$tabdix[$milnum[$next]]; } if ($milnum[$next]&gt;=7){ $res.=&#034;-dix-&#034;.$tabchiffres[$milnum[$next]]; } $verrounite=true; } if ($milnum[$pos]==8){ //$verrounite=true; $res.=&#034;quatre-vingt&#034;; if ($milnum[$next]&gt;1){ $res.=&#034;-&#034;; } } if ($milnum[$pos]==9){ $res.=&#034;quatre-vingt&#034;; if ($milnum[$next]==0){ $res.=&#034;-dix&#034;; } if (($milnum[$next]&gt;=1)&amp;&amp;($milnum[$next]&lt;=6)){ $res.=&#034;-&#034;.$tabdix[$milnum[$next]]; } if ($milnum[$next]&gt;=7){ $res.=&#034;-dix-&#034;.$tabchiffres[$milnum[$next]]; } $verrounite=true; } } if ($taillenum&gt;=1) { // si 1 chiffres $pos=$taillenum-1; // dernier chiffre 2-1 = 1 ? 3-1=2 if ($pos==0){ // 1 seul chiffre, donc si &gt;1 ou 1 et puiss = 1, afficher le chiffre $res.=(($milnum&gt;1)||(($milnum==1)&amp;&amp;($puiss==1)))?$tabchiffres[$milnum]:&#034;&#034;; }else{ if ((!$verrounite)&amp;&amp;($milnum[$pos]!=0)){ // si chiffre dizaine != 7, 8 ou 9 $pre=$pos-1; if ($milnum[$pre]==0){ $res.=$tabchiffres[$milnum[$pos]]; } // si dizaine if ($milnum[$pre]==1){ // d&#233;j&#224; un tiret $res.=$tabchiffres[$milnum[$pos]]; } // si vingt &#224; 60 ou 80, et 1, mettre x et 1 if (((($milnum[$pre]&gt;=2)&amp;&amp;($milnum[$pre]&lt;=6))||($milnum[$pre]==8))&amp;&amp;($milnum[$pos]==1)){ $res.=&#034;et-&#034;.$tabchiffres[$milnum[$pos]]; } // si vingt &#224; 60 ou 80 et pas 1 if (((($milnum[$pre]&gt;=2)&amp;&amp;($milnum[$pre]&lt;=6))||($milnum[$pre]==8))&amp;&amp;($milnum[$pos]!=1)){ $res.=$tabchiffres[$milnum[$pos]]; } } } } // si total&gt;1, mettre le tabpuiss[puiss] if (($milnum&gt;=1)&amp;&amp;($tabpuis[$puiss]!=&#034;&#034;)){ $res.=($res!=&#034;&#034;)?&#034; &#034;:&#034;&#034;; $res.=$tabpuis[$puiss]; // mille est invariable // mais million, non $res.=(($puiss==3)&amp;&amp;($milnum&gt;1))?&#034;s&#034;:&#034;&#034;; } $puiss--; } if ($num==0){ $res=&#034;z&#233;ro&#034;; } return $res;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Exemples de fonctions PHP</title>
		<link>http://vader-fr.fr/spip.php?article174</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article174</guid>
		<dc:date>2016-07-27T08:09:54Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>


		<dc:subject>PHP</dc:subject>
		<dc:subject>D&#233;veloppement web</dc:subject>

		<description>
&lt;p&gt;Retour des erreurs &lt;br class='autobr' /&gt;
Lorsque les erreurs et autres messages &#224; caract&#232;re informatif sont g&#233;r&#233;s dans les diff&#233;rents blocs, et empil&#233;s dans une variable qui sera au final affich&#233;e dans un bloc d&#233;di&#233; (lequel peut &#234;tre d&#233;pliant gr&#226;ce au CSS). Si l'on souhaite un style diff&#233;rent selon le niveau d'erreur atteint, les diff&#233;rents blocs peuvent faire appel &#224; cette fonction, qui use d'op&#233;rateurs ternaires. &lt;br class='autobr' /&gt;
Il est aussi possible d'utiliser une variable globale pour le niveau d'erreur actuel, ce qui (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique17" rel="directory"&gt;Les pages dynamiques avec PHP/MySQL&lt;/a&gt;

/ 
&lt;a href="http://vader-fr.fr/spip.php?mot2" rel="tag"&gt;PHP&lt;/a&gt;, 
&lt;a href="http://vader-fr.fr/spip.php?mot9" rel="tag"&gt;D&#233;veloppement web&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Retour des erreurs&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Lorsque les erreurs et autres messages &#224; caract&#232;re informatif sont g&#233;r&#233;s dans les diff&#233;rents blocs, et empil&#233;s dans une variable qui sera au final affich&#233;e dans un bloc d&#233;di&#233; (lequel peut &#234;tre d&#233;pliant gr&#226;ce au CSS).&lt;br class='autobr' /&gt;
Si l'on souhaite un style diff&#233;rent selon le niveau d'erreur atteint, les diff&#233;rents blocs peuvent faire appel &#224; cette fonction, qui use d'op&#233;rateurs ternaires.&lt;/p&gt;
&lt;p&gt;Il est aussi possible d'utiliser une variable globale pour le niveau d'erreur actuel, ce qui simplifie les appels &#224; la fonction.&lt;/p&gt;
&lt;p&gt;3 niveaux d'erreur sont g&#233;r&#233;s :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; info : tout va bien, on affiche un (ou plus) message(s) juste pour information&lt;/li&gt;&lt;li&gt; debug : attention, risque d'erreur, tout n'est pas optimal&lt;/li&gt;&lt;li&gt; error : erreur critique&lt;/li&gt;&lt;/ul&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;function raise_debuglvl($lvl,$actuel){ $debuglvl=$actuel; $debuglvl=(($lvl==&#034;info&#034;)&amp;&amp;($actuel==&#034;info&#034;))?&#034;info&#034;:$debuglvl; $debuglvl=(($lvl==&#034;debug&#034;)&amp;&amp;($actuel!=&#034;error&#034;))?&#034;debug&#034;:$debuglvl; $debuglvl=($lvl==&#034;error&#034;)?&#034;error&#034;:$debuglvl; return $debuglvl;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La d&#233;claration du bloc d'affichage :&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;// bloc d'information - l'image sert au d&#233;ploiement mais reste affich&#233;e dans le bloc d&#233;pli&#233; if ($debug!=&#034;&#034;){ switch ($debuglvl) { case &#034;info&#034; : $debugimg=&#034;notif-info.gif&#034;; break; // ou action-s-valide case &#034;debug&#034; : $debugimg=&#034;notif-warning.gif&#034;; break; case &#034;error&#034; : $debugimg=&#034;notif-error.gif&#034;; break; default: $debugimg=&#034;notif-warning.gif&#034;; break; } echo &#034;&lt;div id=\&#034;debug\&#034; class=\&#034;$debuglvl\&#034;&gt; &lt;img src=\&#034;imj/$debugimg\&#034; alt=\&#034;$debuglvl\&#034;/&gt; $debug &lt;/div&gt;&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La page appelante d&#233;clare les variables &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$debug&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$info&lt;/code&gt; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$debug&lt;/code&gt; contiendra les messages &#224; afficher dans le bloc d&#233;di&#233;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$info&lt;/code&gt; contiendra les messages &#224; afficher dans la page.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les pages appel&#233;es (via &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;include&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;require&lt;/code&gt; empileront dans ces variables les messages qu'elles souhaitent soulever.&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$debug.=&#034;message&#034;;&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$info.=&#034;message&#034;;&lt;/code&gt;, cette derni&#232;re variable pouvant &#234;tre affich&#233;e dans la page puis vid&#233;e.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;exemple d'utilisation&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;
&lt;p&gt;dans un script g&#233;rant le login d'un utilisateur, on r&#233;cup&#232;re (en &#233;tape 2) login/mot de passe.&lt;br class='autobr' /&gt;
Selon ce qui est fourni, on retourne en &#233;tape 1 en affichant un message d'erreur.&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 ($etape==2){ if ((isset($_POST[&#034;user&#034;]))&amp;&amp;($_POST[&#034;user&#034;]!=&#034;&#034;)){ $user=$_POST[&#034;user&#034;]; // v&#233;rifier pas d'espace (entre autre) if (!preg_match(&#034;/^[a-z][a-z0-9]+$/&#034;,$user)){ $debug.=&#034;nom utilisateur non conforme&lt;br/&gt;&#034;; } }else{ $debug.=&#034;nom utilisateur manquant&lt;br/&gt;&#034;; } if ((isset($_POST[&#034;motpass&#034;]))&amp;&amp;($_POST[&#034;motpass&#034;]!=&#034;&#034;)){ $motpass=$_POST[&#034;motpass&#034;]; // v&#233;rifier pas d'espace (entre autre) if (!preg_match(&#034;/^[a-zA-Z0-9]+$/&#034;,$user)){ $debug.=&#034;mot de passe non conforme&lt;br/&gt;&#034;; } }else{ $debug.=&#034;mot de passe manquant&lt;br/&gt;&#034;; } if ($debug!=&#034;&#034;){ $etape=1; $info=$debug; raise_debuglvl(&#034;debug&#034;,$debuglvl); }
}
if ($etape==2){
// comparaison BDD
}
if ($etape==1){ echo &#034;&lt;div id=\&#034;navig\&#034; class=\&#034;$page\&#034;&gt; Bloc navigation &lt;/div&gt; &lt;div id=\&#034;contenu\&#034; class=\&#034;$page\&#034;&gt; $info &#034;; // formulaire }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;son style CSS&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;
&lt;p&gt;pour un bloc d&#233;pliable CSS situ&#233; en haut &#224; gauche de 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;#debug { position:absolute; top:0; left:0; width:32px; height:32px; z-index:42; line-height:0; font-size:0;
}
#debug img { height:auto; width:auto; max-height:32px; max-width:32px; visibility:visible;
}
#debug:hover { height:auto; width:auto; min-height:100px; min-width:200px; line-height:normal; font-size:1em; overflow-y:auto;
}
#debug:hover img { height:auto; width:auto;
}
#debug:hover img#deploi_debug { height:0; width:0; visibility:hidden;
}
/* =========================================== Messages de d&#233;bogages =========================================== */
#debug.error{ background-color:#FF0000;
}
#debug.error:hover { background-color:#FF8C00;
} #debug.debug { background-color:#FF8C00; }
#debug.info { background-color:#ADD8E6;
}
#debug.debug:hover, #debug.info:hover { background-color:#ADD8E6;
}
.debug { color:#FF8C00; /*#FFB30A;*/ /*#FFA501;*/
}
.info { color:#40820D; }
.error { color:#FF0000; font-weight:bold;
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;redirection en https&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Pas vraiment une fonction, mais un petit bout de code &#224; mettre dans la section &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;head&gt;...&lt;/head&gt;&lt;/code&gt;.&lt;br class='autobr' /&gt;
Si la page est acc&#233;d&#233;e en http non s&#233;curis&#233;, on redirige vers le mode s&#233;curis&#233; https, via une balise meta.&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; // 'HTTPS' est d&#233;fini &#224; une valeur non-vide si le script a &#233;t&#233; appel&#233; via le protocole HTTPS. if ((!isset($_SERVER['HTTPS']))||($_SERVER['HTTPS']==&#034;&#034;)){ $url=&#034;https://&#034;.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; echo &#034;&lt;meta http-equiv='Refresh' content=\&#034;0; url=$url\&#034;/&gt;&#034;; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Modification du style de pages publique avec Stylus</title>
		<link>http://vader-fr.fr/spip.php?article162</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article162</guid>
		<dc:date>2015-10-28T16:23:01Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;L'article initial concernait Stylish, mais depuis que l'extension a &#233;t&#233; abandonn&#233;e par son d&#233;veloppeur pour y ajouter des spywares, l'extension Stylus la remplace. voir les avis (en anglais) ici &lt;br class='autobr' /&gt;
Pr&#233;sentation &lt;br class='autobr' /&gt;
Le plugin Stylish Stylus pour Firefox permet d'appliquer &#224; tout site ou page internet/intranet un style CSS personnalis&#233;. &lt;br class='autobr' /&gt;
Chaque style &#034;personnalis&#233;&#034; concernera un domaine, une url ... &lt;br class='autobr' /&gt;
Il ne peut modifier la structure des pages, mais en corrigeant ou am&#233;liorant le style CSS du (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique3" rel="directory"&gt;D&#233;veloppement web&lt;/a&gt;


		</description>


 <content:encoded>&lt;img src='http://vader-fr.fr/local/cache-vignettes/L23xH22/arton162-68932.png?1771608003' class='spip_logo spip_logo_right' width='23' height='22' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;L'article initial concernait Stylish, mais depuis que l'extension a &#233;t&#233; abandonn&#233;e par son d&#233;veloppeur pour y ajouter des spywares, l'extension Stylus la remplace.&lt;br class='autobr' /&gt;
voir les avis (en anglais) &lt;a href=&#034;https://addons.mozilla.org/en-US/android/addon/stylish/reviews/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#034;onglets_bloc_initial&#034;&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;Pr&#233;sentation&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Le plugin &lt;del&gt;Stylish&lt;/del&gt; Stylus pour Firefox permet d'appliquer &#224; tout site ou page internet/intranet un style CSS personnalis&#233;.&lt;/p&gt;
&lt;p&gt;Chaque style &#034;personnalis&#233;&#034; concernera un domaine, une url ...&lt;/p&gt;
&lt;p&gt;Il ne peut modifier la structure des pages, mais en corrigeant ou am&#233;liorant le style CSS du site, il modifiera son apparence et donc sa lisibilit&#233;.&lt;/p&gt;
&lt;p&gt;Le style d&#233;clar&#233; avec le plugin &lt;del&gt;Stylish&lt;/del&gt; Stylus viendra donc surcharger le style de la page.&lt;/p&gt;
&lt;p&gt;Ce qui permet ais&#233;ment de rendre plus lisible certains sites.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Exemple avec le site Tom's Hardware avant :&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;
&lt;p&gt;&lt;span class='spip_document_336 spip_documents spip_documents_center'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH275/stylish_th00-f9057.png?1771617007' width='500' height='275' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;1) Installation du plugin et de ses extensions&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Dans le menu Outils - Extensions et th&#232;mes (CTRL-MAJ-A), chercher et installer depuis le catalogue&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;2) D&#233;claration d'un site&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;En cliquant sur la petite ic&#244;ne de &lt;del&gt;Stylish&lt;/del&gt; Stylus &lt;span class='spip_document_545 spip_documents'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L23xH22/stylus-off-ac874.png?1771617007' width='23' height='22' alt=&#034;&#034; /&gt;&lt;/span&gt;, &#034;Gestion&#034;, puis &#034;Cr&#233;er un nouveau style&#034; et :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour cette URL - et donc pour une unique page&lt;/li&gt;&lt;li&gt; pour une url commen&#231;ant par...&lt;/li&gt;&lt;li&gt; pour une url correspondant &#224; une expression r&#233;guli&#232;re&lt;/li&gt;&lt;li&gt; pour une url sur un domaine&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il ne restera plus qu'&#224; d&#233;clarer des r&#232;gles CSS.&lt;/p&gt;
&lt;div class='cs_blocs'&gt;&lt;h4 class='blocs_titre blocs_replie blocs_click'&gt;&lt;a href='#_foo'&gt;Exemple :&lt;/a&gt;&lt;/h4&gt;&lt;div class='blocs_destination blocs_invisible blocs_slide'&gt;
&lt;p&gt;&lt;span class='spip_document_330 spip_documents spip_documents_center'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH233/stylish_gui-26c4e.png?1771617007' width='500' height='233' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;3) Cr&#233;ation du style&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;On pourra s'aider des outils de d&#233;veloppement web (CTRL-MAJ-I ou F12), notamment de l'inspecteur, et du plugin &lt;a href='http://vader-fr.fr/spip.php?article31' class=&#034;spip_in&#034;&gt;Colorzilla&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Afin de surcharger correctement les diff&#233;rents h&#233;ritages de style et d'&#234;tre s&#251;r que le style &#034;personnel&#034; a la priorit&#233; sur le style &#034;officiel&#034; pour un &#233;l&#233;ment, il est pr&#233;f&#233;rable d'&#234;tre le plus complet possible dans la d&#233;claration des r&#232;gles.&lt;/p&gt;
&lt;p&gt;Malheureusement, les style d&#233;clar&#233;s dans la page par attribut html &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;style=&#034;&#034;&lt;/code&gt; sur un &#233;l&#233;ment ponctuel, ainsi que les styles mis par javascript ne peuvent &#234;tre surcharg&#233;s.&lt;br class='autobr' /&gt;
&lt;strong class=&#034;caractencadre2-spip spip&#034;&gt;Cela dit, les propri&#233;t&#233;s max-width/height et min-width/height peuvent permettre de surcharger l'attribut width/height.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Prenons le cas du forum Tom's Hardware, &lt;a href=&#034;http://www.tomshardware.fr/forum&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;www.tomshardware.fr/forum&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_328 spip_documents spip_documents_center'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH265/stylish_th01-bc48d.png?1771617007' width='500' height='265' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Comme on peut le voir, le style n'est d&#233;fini que dans des feuilles CSS, que l'on pourra surcharger.&lt;br class='autobr' /&gt;
On pourra donc surcharger les tailles fixes d'objet pour les rendre adaptables et ainsi profiter de toute la largeur de l'&#233;cran.&lt;/p&gt;
&lt;p&gt;En parcourant l'arborescence de la page avec les outils de d&#233;veloppement web, et les r&#232;gles CSS associ&#233;es &#224; chaque &#233;l&#233;ment, on peut ais&#233;ment arriver &#224; d&#233;terminer des r&#232;gles 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;@namespace url(http://www.w3.org/1999/xhtml); @-moz-document domain(&#034;tomshardware.fr&#034;) { .page, .frmTopic { width:auto; max-width:auto; } .blocLatestArticlesInner .blocLatestArticlesContent .latestArticlesCarousel.js .carousel-wrap { width:1400px; } #subBody.bgFooterBody .tguContent.line { height:1800px; } #subBody.bgFooterBody #mainSection.page.frmTopic .tguContent.line { height:2200px; } pre.html.bb-code { background-color: lightblue; } }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;les tailles fixes sont adapt&#233;es &#224; un &#233;cran particulier, et sont malheureusement indispensables en raison de la structure particuli&#232;re des pages.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce qui donne :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_329 spip_documents spip_documents_center'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH274/stylish_th02-8536c.png?1771617007' width='500' height='274' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;On peut remarquer que lorsqu'un style &#034;personnalis&#233;&#034; est appliqu&#233; par &lt;del&gt;Stylish&lt;/del&gt; Stylus &#224; une page, la couleur de l'ic&#244;ne change et un petit chiffre s'affiche &lt;span class='spip_document_546 spip_documents'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L26xH26/stylus-on-f2905.png?1771617007' width='26' height='26' alt=&#034;&#034; /&gt;&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;EDIT 10/06/2016 : ajout de la couleur de background &#034;lightblue&#034; au code pr&#233;format&#233;, ce qui donne :&lt;/p&gt;
&lt;p&gt;&lt;span class='spip_document_455 spip_documents spip_documents_center'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L500xH230/tomshardware_code-ce691.png?1771617007' width='500' height='230' alt=&#034;&#034; /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;l'espace vide &#224; droite est la colonne Activit&#233; r&#233;cente / post rapide / Experts r&#233;cents / Derniers dossiers / Proposez votre astuce, que l'on ne voit pas car le post est tr&#232;s bas dans la page.&lt;br class='autobr' /&gt;
(voir &lt;a href=&#034;http://www.tomshardware.fr/forum/id-2956365/creation-fichier-bat-ecrire-invite-commande-windows.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;topic d'origine&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&#034;onglets_contenu&#034;&gt;&lt;h2 class=&#034;cs_onglet&#034;&gt;&lt;a href=&#034;#&#034;&gt;4) Gestion des styles&lt;/a&gt;&lt;/h2&gt;&lt;div&gt;
&lt;p&gt;Si un style est d&#233;clar&#233; pour une page, l'ic&#244;ne sera coloris&#233;e &lt;span class='spip_document_546 spip_documents'&gt;
&lt;img src='http://vader-fr.fr/local/cache-vignettes/L26xH26/stylus-on-f2905.png?1771617007' width='26' height='26' alt=&#034;&#034; /&gt;&lt;/span&gt;. En cliquant sur l'ic&#244;ne, on pourra voir le style associ&#233; &#224; la page, et si besoin le d&#233;sactiver.&lt;/p&gt;
&lt;p&gt;Les styles peuvent ensuite &#234;tre g&#233;r&#233;s en cliquant simplement sur &#034;Gestion&#034; dans le module Stylus&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;dl class='spip_document_442 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='http://vader-fr.fr/IMG/css/tomshardware.css' title='Cascading Style Sheet - 727 octets' type=&#034;text/css&#034;&gt;&lt;img src='http://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1779541674' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Style CSS Tom's Hardware pour Stylish&lt;/strong&gt;&lt;/dt&gt;
&lt;/dl&gt;&lt;dl class='spip_document_454 spip_documents spip_documents_left' style='float:left;'&gt;
&lt;dt&gt;&lt;a href='http://vader-fr.fr/IMG/css/papillesetpupilles.css' title='Cascading Style Sheet - 3.4 kio' type=&#034;text/css&#034;&gt;&lt;img src='http://vader-fr.fr/local/cache-vignettes/L64xH64/css-2d7e0.svg?1779541674' width='64' height='64' alt='' /&gt;&lt;/a&gt;&lt;/dt&gt;
&lt;dt class='spip_doc_titre' style='width:120px;'&gt;&lt;strong&gt;Style CSS Papilles et pupilles pour Stylish&lt;/strong&gt;&lt;/dt&gt;
&lt;dd class='spip_doc_descriptif' style='width:120px;'&gt;structure de la page extr&#234;mement complexe, rendant la conception d'un CSS &#034;de correction&#034; difficile.
&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Cloner un site SPIP</title>
		<link>http://vader-fr.fr/spip.php?article161</link>
		<guid isPermaLink="true">http://vader-fr.fr/spip.php?article161</guid>
		<dc:date>2015-09-11T16:39:38Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Vader[FR]</dc:creator>



		<description>
&lt;p&gt;Pour copier un site SPIP d'un serveur &#224; un autre, il suffit de suivre une proc&#233;dure assez simple. &lt;br class='autobr' /&gt;
Les deux sites doivent avoir la m&#234;me version de SPIP. &lt;br class='autobr' /&gt;
1) sauvegarder la base SPIP &lt;br class='autobr' /&gt;
Menu Maintenance, Sauvegarder la base. Effectuer une sauvegarde en cochant &#034;Sauvegarder toutes les tables&#034;. &lt;br class='autobr' /&gt;
Cette option vous permet de sauvegarder le contenu de la base dans un fichier qui sera stock&#233; dans le r&#233;pertoire tmp/dump/. N'oubliez pas &#233;galement de r&#233;cup&#233;rer l'int&#233;gralit&#233; du r&#233;pertoire IMG/, qui (&#8230;)&lt;/p&gt;


-
&lt;a href="http://vader-fr.fr/spip.php?rubrique11" rel="directory"&gt;SPIP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Pour copier un site SPIP d'un serveur &#224; un autre, il suffit de suivre une proc&#233;dure assez simple.&lt;/p&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;Les deux sites doivent avoir la m&#234;me version de SPIP.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;1) sauvegarder la base SPIP&lt;/h3&gt;
&lt;p&gt;Menu Maintenance, Sauvegarder la base.&lt;br class='autobr' /&gt;
Effectuer une sauvegarde en cochant &#034;Sauvegarder toutes les tables&#034;.&lt;/p&gt;
&lt;p&gt;Cette option vous permet de sauvegarder le contenu de la base dans un fichier qui sera stock&#233; dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/dump/&lt;/code&gt;. &lt;br class='autobr' /&gt;
N'oubliez pas &#233;galement de r&#233;cup&#233;rer l'int&#233;gralit&#233; du r&#233;pertoire IMG/, qui contient les images et les documents utilis&#233;s dans les articles et les rubriques.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;2) Copier les fichiers&lt;/h3&gt;
&lt;p&gt;Copier les fichiers du site, &#224; minima &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/dump&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;IMG&lt;/code&gt; , via SCP, Rsync, FTP... du serveur &#034;nominal&#034; au serveur &#034;copie&#034;.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;3) Configuration de la base de donn&#233;es&lt;/h3&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;ne faire que lors de la premi&#232;re copie&lt;/strong&gt;&lt;br class='autobr' /&gt;
Il faut cr&#233;er sur le serveur &#034;copie&#034; l'utilisateur SQL avec les m&#234;mes identifiants et droits que sur le serveur &#034;nominal&#034;, afin de ne pas avoir &#224; modifier le fichier de configuration de SPIP.&lt;/p&gt;
&lt;h3 class=&#034;spip&#034;&gt;4) Installation de SPIP pour connexion &#224; la base de donn&#233;es&lt;/h3&gt;
&lt;p&gt;&lt;strong class=&#034;caractencadre-spip spip&#034;&gt;ne faire que lors de la premi&#232;re copie&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Installer le site SPIP en indiquant selon le cas sur le serveur &#034;nominal&#034; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les identifiants acc&#233;der &#224; la base de donn&#233;es&lt;/li&gt;&lt;li&gt; le nom de la base et des tables&lt;/li&gt;&lt;li&gt; authentification avec LDAP ou non&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&#034;spip&#034;&gt;5) Restaurer la base SPIP&lt;/h3&gt;
&lt;p&gt;Dans l'interface priv&#233;e de SPIP du site copi&#233;, aller dans le menu Maintenance, Restaurer la base.&lt;/p&gt;
&lt;p&gt;Effectuer une restauration en choisissant le fichier cr&#233;&#233; &#224; l'&#233;tape 1, lequel a &#233;t&#233; copi&#233; &#224; l'&#233;tape 2 avec &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/dump&lt;/code&gt;.&lt;br class='autobr' /&gt;
De m&#234;me, restaurer toutes les tables et valider aux diff&#233;rents messages de confirmation.&lt;/p&gt;
&lt;p&gt;Cette option vous permet de restaurer une sauvegarde pr&#233;c&#233;demment effectu&#233;e de la base. &#192; cet effet, le fichier contenant la sauvegarde doit avoir &#233;t&#233; plac&#233; dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/dump/&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
