<?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=48&amp;page=backend" rel="self" type="application/rss+xml" />




<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>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>



</channel>

</rss>
