Archives mensuelles : janvier 2005

Un petit Portrait Chinois

A l’image de La Lène, un petit portrait chinois pour mieux me (vous ? si vous répondez) connaître. Si vous êtiez :

Questions/Réponses

  • Un fruit ? La cerise, mon parfum de yahourt préféré
  • Une épice ? le safran
  • Un objet informatique ? Le clavier
  • Une chanson ? suteki dane
  • Un film ? Contact avec Jodie Foster!
  • Un monument ? Euh, joker
  • Un poisson ? Un poisson clown? ^^
  • Une fringue ? Un pantalon Carhart
  • Un parfum ? Calvin Klein Eternity sinon aucun
  • Une couleur ? Rouge
  • Un meuble ? Un beau canapé IKEA
  • Un produit de maquillage ? Mais euh!
  • Un bouquin ? Titeuf ça compte?

Faites passer ::mrgreen

Introduction à XMLHttpRequest et PHP

Voici les bases d’un petit moteur de recherche qui constitue un bon exercice pour s’initier à XmlHttpRequest.

Démonstration …

But de la recherche

Dans cet exemple, vous allez pouvoir rechercher les billets de ce blog par leur titre. En fonction des caractères saisis, une liste de billets commençant par les mêmes lettres sera affiché de manière dynamique, sans que la page soit rechargée. La soumission du formulaire se fait avec l’objet XmlHttpRequest et est effectuée à chaque fois que le contenu du champ de saisie est modifié.

Coté client

Il faut evidemment la fonction qui va bien et qui a été mise à disposition par Qwix dans son tutorial sur XmlHttpRequest. A cette dernière il faudra également ajouter une fonction supplémentaire qui sera appelée lorsque l’utilisateur aura saisit une chaine dans l’invite de recherche.

?View Code JAVASCRIPT
	<script type="text/javascript" src="function.js">
	</script>
?View Code JAVASCRIPT
<script type="text/javascript">
		function loadData() {
			if (document.getElementById('foo').value.length &gt; 0) {
				sendData('foo='+ document.getElementById('foo').value, 'traitement.php', 'POST');
			}
			else {
				document.getElementById('contenu').innerHTML = '';
			}
		}
	</script>

Le formulaire va ressembler à ceci:

		<form id="formulaire" action="index.php" method="post"><input type="hidden" name="phpMyAdmin" value="f8aa7401db868c47ec1c5040c0d7b43d" />
			<fieldset><input type="hidden" name="phpMyAdmin" value="f8aa7401db868c47ec1c5040c0d7b43d" />
				<p>
					<label for="foo"&gt;Saisissez les chaines à rechercher&lt;/label>
					<input type="text" name="foo" id="foo" value="" onkeyup="loadData();" />
				</p>
				<!-- Zone pour l'affichage des résultats -->
				<div id="contenu"></div>
			</fieldset>
		</form>

Coté serveur

Un simple script PHP se contentant de faire une requête SQL et de d’afficher sous forme de liste les résultats retournés

header('Content-type: text/html') ;
if(!empty($_POST["foo"]))
{
	$rqListBillet = "
		SELECT *
		FROM `blog_blabla`
		WHERE `titre` like '" . $_POST["foo"] . "%'
		ORDER BY `date_parution` DESC";
	$rsListBillet = mysql_query($rqListBillet);
	if (mysql_num_rows($rsListBillet) &gt; 0) {
		echo "\n
ul>";
		while ($billet = mysql_fetch_object($rsListBillet)) {
			echo "\n
<li><a href="\?phpMyAdmin=f8aa7401db868c47ec1c5040c0d7b43d">url_page . ".html\" title=\"" . stripslashes(htmlentities($billet-&gt;titre)) . "\"&gt;" . stripslashes(htmlentities($billet-&gt;titre)) . "</a> (" . billet-&gt;date_parution . ")</li>";
		}
		echo "\n</ul>";
	}
	else {
		echo "";
	}
}

Ne pas oublier

:D

Gérer les acronymes avec preg_replace_callback et create_function

Voici un petit script sans prétention vous permettant d’afficher les acronymes que vous aurez stocké en base de donnée. En mode édition il vous faudra appliquer un BBcode sur l’expression à gérer. Une fonction se chargera de transformer le tout en code HTML valide.

La petite table qui va bien

C’est vraiment une petite table, elle ne contient qu’un champ pour stocker l’acronyme (en Primary Key) et son interprétation complète.

DROP TABLE IF EXISTS `blog_acronym`;
CREATE TABLE `blog_acronym` (
  `acronym` varchar(20) NOT NULL default '',
  `libelle` varchar(255) NOT NULL default '',
  KEY `acronym` (`acronym`)
) TYPE=MyISAM;

La fonction qui va bien

Voici une méthode extraite de la classe MiniBlog qui sert à gérer ce même blog.

// + ----------------------------------------------------------------------------------
// + makeAcronym
// + Entrée : le texte à traiter
// + Sortie : le texte traité
function makeAcronym ($texte) {
	$texte = preg_replace_callback("#\[acronym\](.+?)\[\/acronym\]#si", 
			create_function('$matches', '
				$rq = "SELECT * FROM `blog_acronym` WHERE `acronym` = \'" . $matches[1] . "\'";
				$acronym = mysql_fetch_object(mysql_query($rq));
				return ($acronym->acronym) ? "<acronym title=\"" . $acronym->libelle . "\">" . $matches[1] . "</acronym>" : $matches[1];
			')
		, $texte);
	return $texte;
}

Usage

Accédez à la notice d’utilisation ici

Pour ceux qui voudrait la table avec quelques entrées voici la Liste des acronymes utilisés sur ce Blog ;-)

Sylva c’est plus fort que toi

Dans un match au sommet qui a opposé le Leader à son Dauphin, Lyon n’a pas failli et a respecté la règle.

Victoire de Lille 2 buts à 1 et doublé de Matt Moussilou.

L’affiche

Dans un match dominé des pieds et des mains par les Gônes, les locaux ont fait preuve d’un réalisme rare pour inscrire les deux buts qui suffisent à la victoire. On notera aussi la superbe prestation de leur gardien Tony Sylva qui aura repoussé pas moins de huit tirs Lyonnais .

Je suis forcément déçu surtout à la vue de la prestation Lyonnaise. Malgrè une réduction du score méritée de Junhino sur pénalty en fin de match, l’OL va s’incliner pour la première fois de la saison en championnat. On se console en se disant que les hommes de Paul Le Guen respectent la règle qui veut que pour être champion il faut perdre dans le Nord (3 défaites de l’OL ces dernières années) ::mrgreen.

Les titres alternatifs

J’avais pas mal d’idées pour le titre de ce billet, en voici quelques uns:

  • Lyon perd le Nord mais garde la tête
  • Sans réalisme, la maîtrise n’est rien
  • Le Roi Lyon est tombé sur un os
  • Les Dogues ont mangé du Lyon

Et vous? ^^

A noter que je ne suis pas d’accord avec Ldo: « un Lyon ne meurt jamais, il dort »

Introduction à l’objet XMLHttpRequest, par Jérôme Renard

Qwix nous gratifie d’une petite introduction à l’objet XMLHttpRequest et PHP. Cette nouvelle technologie va nous permettre de penser différemment nos développements futurs. Décidemment, les IHM des applications web n’auront plus rien à envier à celle des applications « offline ». :D

D’autres en ont également parlé récemment : Un dictionnaire enrichi au XMLHttpRequest

Un moindre mal

Bonne et mauvaise nouvelle! Suite à ma chute un mois après mon opération du genou, je craignais une rupture du ligament croisé tout fraichement greffé. Il n’est est rien et l’IRM que j’ai passé ce soir n’a révélé « qu’une fissure du ménisque » …

Même si une autre opération est surement à envisager je suis quand même rassuré :D

Hana yome ga kuru

[img=Hana yome ga kuru : Voici venir la mariée]/img/blog/7art/BlackMamba-Bill.png[/img] Je ne vous cache pas que je suis un grand fan de Kill Bill. Pour rendre hommage à ce film, je me suis permis de prendre quelques screenshots à partir des DVDs composant le coffret collector afin de réaliser le nouveau thème de ce blog : The Bride

Pour choisir le nouveau thème, cliquez ici

Je suis également en train de recoder pas mal de scripts et il se peut que certains billets ne s’affichent pas correctement. Tout rentrera dans l’ordre dans le courant de la semaine :D

Les 3H du PHP, sujet du concours numéro 1

Voici donc le sujet auquel quelques aventuriers se sont confrontés.

Le sujet : Valider nos formulaires

Le sujet consiste donc à produire un code permettant de valider divers formulaires html.

Pour cela, vous devrez concevoir un objet qui sera capable de satisfaire les points suivants :

  • vérification globale du formulaire : l’objet devra vérifier si les champs obligatoires sont bien remplis (certains champs du formulaire doivent être obligatoirement renseignés et d’autres non, à vous de le gérer). De plus, votre objet devra être capable de gérer les formulaires à method post ainsi que les formulaires à method get.
  • vérification des champs de type text, hidden, textarea : l’utilisateur doit avoir la possibilité de limiter la « taille du champs » en spécifiant, en option, un nombre maximal et / ou minimal de caractères. L’objet doit être également capable de gérer le type des données transmises : alphabétiques, alphanumériques, numériques. A vous de gérer cette reconnaissance de type de données comme bon vous semble.
  • vérification des champs de type text pour les adresses E-Mail : l’objet devra être capable de vérifier la « validité » de l’adresse E-Mail insérée dans le champs : un e-mail simple ne peut comporter que des caractères alphanumériques, l’underscore(_), le point (.), le tiret (-) et l’arobase (@). L’objet devra également être capable de vérifier le MX du domaine (option dans la méthode servant à la vérification de ce type de champ).
  • vérification des champs de type password : l’utilisateur doit avoir la possibilité de limiter la « taille du champs » en spécifiant, en option, un nombre maximal et / ou minimal de caractères. L’objet doit être également capable de gérer le type des données transmises : alphabétiques, alphanumériques, numériques. Chaque champ de type password sera accompagné d’un autre champ de type password (son miroir) servant à la vérification du mot de passe saisi par l’utilisateur : les deux mots de passes saisis devant être identiques.
  • vérification deschamps de type file : l’objet devra être capable d’analyser le fichier uploadé et de gérer une série de types mime autorisés. Si le fichier est valide, l’objet copiera le fichier uploadé dans un répertoire /upload.
  • vérification des champs de type radio : l’objet devra se contenter de vérifier qu’au moins un des boutons soit coché
  • vérification des champs de type checkbox : aucune vérification à faire (on ne stockera aucune donnée du formulaire dans l’objet)
  • gestionnaire d’erreurs : votre objet sera capable d’afficher les noms des champs qui ne seront pas validés

Pré-Bilan

J’ai pu participer au concours et j’ai rendu ma dernière copie à 23h59. Dans ce genre d’excercie le plus dur et le temps alloué à la phase de test qui est dérisoire par rapport à ce qu’il devrait être. En tout cas, j’ai pris beaucoup de plaisirs et j’ai redécouvert les stresses des examens… ça rajeunit pas ^^

Je mettrais mon script en ligne bientôt (le même qui a été soumis bien sûr ^^)

A bientôt pour les résultats :D