Aller au contenu

Vincent

  • billets
    15
  • commentaires
    4
  • visualisations
    61 028

A propos de ce blog

comment faire?

Billets de ce blog

Vincent

Aujourd'hui, voici une petite portion de code javascript qui vous aidera à creer dynamiquement, à partir d'un premier select, la liste des valeurs éligible sur le 2e select qui lui dépend.

Ici, par exemple, nous allons créer dynamiquement la liste des départements correspondant à une région. (Je vous ai mis les valeurs des 2 premières régions seulement)


<html>
<head>
<title>test</title>
<script language="JavaScript">
function defRegion()
{
var frmRegion = document.getElementById("inscription");
var selRegion = document.getElementById("bc_reg");
var selDpt = document.getElementById("bc_dpt");
var indiceRegion = bc_reg.value;

// Temps que selDpt contient des noeuds...
while (selDpt.hasChildNodes())
{
// Supprime le premier noeud.
selDpt.removeChild(selDpt.firstChild);
}

//choix vide
var opt = document.createElement("option");
opt.setAttribute("value", "");
var itmText = document.createTextNode("Faites votre choix");
opt.appendChild(itmText);
selDpt.appendChild(opt);


// Suivant la région sélectionnée...
switch (indiceRegion)
{
case "1_s":

// Créé un noeud pour la liste.
var opt = document.createElement("option");
opt.setAttribute("value", 167);
var itmText = document.createTextNode("Bas-Rhin");
opt.appendChild(itmText);
selDpt.appendChild(opt);

var opt = document.createElement("option");
opt.setAttribute("value", 168);
var itmText = document.createTextNode("Haut-Rhin");
opt.appendChild(itmText);
selDpt.appendChild(opt);

break;

case "2_s":

// Créé un noeud pour la liste.
var opt = document.createElement("option");
opt.setAttribute("value", 124);
var itmText = document.createTextNode("Dordogne");
opt.appendChild(itmText);
selDpt.appendChild(opt);
var opt = document.createElement("option");
opt.setAttribute("value", 133);
var itmText = document.createTextNode("Gironde");
opt.appendChild(itmText);
selDpt.appendChild(opt);
var opt = document.createElement("option");
opt.setAttribute("value", 140);
var itmText = document.createTextNode("Landes");
opt.appendChild(itmText);
selDpt.appendChild(opt);
var opt = document.createElement("option");
opt.setAttribute("value", 147);
var itmText = document.createTextNode("Lot-et-Garonne");
opt.appendChild(itmText);
selDpt.appendChild(opt);
var opt = document.createElement("option");
opt.setAttribute("value", 164);
var itmText = document.createTextNode("Pyrénées-atlantiques");
opt.appendChild(itmText);
selDpt.appendChild(opt);

break;

}
}
</script>
</head>
<body onLoad="java script:defRegion();">
<FORM id="inscription" name="inscription">
<SELECT id="bc_reg" name="bc_reg" onChange="java script:defRegion();">
<optgroup label="Région">
<option value="1_s" selected="Selected">Alsace</option>
<option value="2_s">Aquitaine</option>
</SELECT>
<SELECT id="bc_dpt" name="bc_dpt">
</SELECT>
</FORM>
</body>
</html>

Vincent

Quelques règles sympathiques pour sécuriser les fichiers de votre serveur :


#Interdire l'acces au fichier config.php
<FilesMatch config.php>
deny from all
</FilesMatch>

#Blocage d'extension (Sécurité)
<FilesMatch "\.(inc|tpl|h|ihtml|sql|ini|conf|bin|spd|theme|module|exe)$">
deny from all
</FilesMatch>

#Caché la liste des dossiers
Options -Indexes

Vincent

Parmi les messages les plus postés sur le forum php ou xml, on s'aperçoit souvent qu'il est question de problème d'encodage. Il est vrai que les hieroglyphe é, ce n'est pas plaisant à voir sur nos jolies pages :sick:

Ensuite, viens la réponse... qui est souvent du genre : "la solution est simple : on decode toutes les données qu'on reçoit en utf8 grâce à utf8_decode() et on encode tout ce qui doit sortir en utf8 grâce à utf8_encode().".

Oui mais en fait, ce n'est pas si simple, car la fonction utf8_decode() est destructrice, cest à dire que les caractères dans la chaîne qui nont pas déquivalent en latin1 seront remplacés par un point dinterrogation.

Mais que faire contre ces points d'interrogations?

Lire l'excellent tutoriel utf-8 disponible chez fassnet.net.

Je résume les principales actions a mener :

Dans l'éditeur

rajoutez la ligne suivante :

<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>

et verifiez bien que vous les enregistrez dans le codage utf-8

Sur votre Base de Donnée

créez vos tables avec utf8_general_ci au lieu de latin_swedish...

Dans vos scripts PHP

rajoutez a la connexion de la base de donnée la derniere ligne:


@mysql_connect($host,$user,$pass)
or die("Impossible de se connecter");
@mysql_select_db("$bdd")
or die("Impossible de se selectionner la base");
mysql_query("SET NAMES 'utf8'");

En conclusion, il faut retenir que le moteur de PHP ne sait pas gérer l'UTF-8 (en fait, PHP ne supporte pas nativement l'Unicode, mais cela fera parti des nouveautés de PHP6). et que systèmatiquement il faut prévenir que l'on utilise l'UTF-8 à toutes les sources de données alimentant nos programmes (base de données, fichier externe, libellé dans le code du script etc...)

Finalement, c'est pas si compliqué que cela !

Vincent

Les variables serveur

Comme je cherche toujours comment elles s'appellent ces variables... je vais me les noter ici une bonne fois pour toute ;)

Chemin du script courant

$_SERVER['PHP_SELF']

Nom du serveur

$_SERVER['SERVER_NAME']

Variables passées au script

$_SERVER['QUERY_STRING']

Document root

$_SERVER['DOCUMENT_ROOT']

Référant

$_SERVER['HTTP_REFERER']

Adresse ip de l'utilisateur

$_SERVER['REMOTE_ADDR']

et la suite, sur le site officiel de php : variables prédéfinies

Vincent

IBAN est l'abréviation pour Internatinal Bank Account Number. Il s'agit d'un numéro de compte répondant au normes internationales ISA, désignant sans aucune ambiguïté une relation de compte dans les opérations de paiement transfrontalière entre pays européens.

l'IBAN doit être considéré comme une "enveloppe" internationalement reconnue à laquelle les numéros de compte existantes peuvent être intégrés.

l'IBAN a une longueur maximale de 34 caractères alphanumériques :

  • les deux premières lettres identifient le pays de tenue du compte.
  • les deux chiffres suivants contiennent le chiffre de contrôle qui permet de vérifier l'exactitude formelle du numéro IBAN.
  • La dernière partie comporte des informations locales, telles que lidentification de létablissement ou le numéro de compte.

Afin daméliorer la lisibilité en cas de présentation sur

papier, lIBAN est divisé en groupes de quatre.

Exemple dun IBAN suisse représenté sur papier:

CH35 0023 0230 5042 2318 T

CdPays - Pays - Long. - Exemple d'IBAN

DE - Allemagne - 22 - DE89 3704 0044 0532 0130 00

AD - Andorre - 24 - AD12 0001 2030 2003 5910 0100

AT - Autriche - 20 - AT97 1904 3002 3457 3201

BE - Belgique - 16 - BE68 5390 0754 7034

CY - Chypre - 28 - CY17 0020 0128 0000 0012 0052 7600

HR - Croatie - 21 - HR12 1001 0051 8630 0016 0

DK - Danemark - 18 - DK50 0040 0440 1162 43

ES - Espagne - 24 - ES91 2100 0418 4502 0005 1332

EE - Estonie - 20 - EE38 2200 2210 2014 6585

FI - Finlande - 18 - FI21 1234 5600 0007 85

FR - France - 27 - FR14 2004 1010 0505 0001 3M02 606

GI - Gibraltar - 23 - GI75 NEBK 0000 0000 7099 453

GR - Grèce - 27 - GR16 0110 1250 0000 0001 2300 695

GL - Groenland - 18 - GL56 0444 9876 5432 10

HU - Hongrie - 28 - HU42 1177 3016 1111 1018 0000 0000

FO - Îles Féroé - 18 - FO97 5432 0388 8999 44

IE - Irlande - 22 - IE29 AIBK 9311 5212 3456 78

IS - Islande - 26 - IS14 0159 2600 7654 5510 7303 39

IT - Italie - 27 - IT60 X054 2811 1010 0000 0123 456

LV - Lettonie - 21 - LV80 BANK 0000 4351 9500 1

LI - Liechtenstein - 21 LI21 0881 0000 2324 013A A

LT - Lituanie - 20 -LT12 1000 0111 0100 1000

LU - Luxembourg - 20 - LU28 0019 4006 4475 0000

MK - Macédoine - 19 - MK07 3000 0000 0042 425

MT - Malte - 31 - MT84 MALT 0110 0001 2345 MTLC AST0 01S

MC - Monaco - 27 - MC93 2005 2222 1001 1223 3M44 555

NO - Norvège - 15 - NO93 8601 1117 947

NL - Pays-Bas - 18 - NL91 ABNA 0417 1643 00

PL - Pologne - 28 - PL27 1140 2004 0000 3002 0135 5387

PT - Portugal - 25 - PT50 0002 0123 1234 5678 9015 4

CZ - République Tchèque - 24 - CZ65 0800 0000 1920 0014 5399

RO - Roumanie - 24 - RO49 AAAA 1B31 0075 9384 0000

GB - Royaume-Uni - 22 - GB29 NWBK 6016 1331 9268 19

SM - San Marino - 27 - SM62 Y054 3219 8760 0444 5333 222

CS - Serbie et Monténégro - 22 - CS73 2600 0560 1001 6113 79

SK - Slovaquie - 24 - SK31 1200 0000 1987 4263 7541

SI - Slovénie - 19 - SI56 1910 0000 0123 438

SE - Suède - 24 - SE35 5000 0000 0549 1000 0003

CH - Suisse - 21 - CH93 0076 2011 6238 5295 7

TN - Tunisie - 24 - TN59 1420 7207 1007 0712 9648

TR - Turquie - 26 - TR33 0006 1005 1978 6457 8413 26

Voilà pour le coté théorique, en pratique, voici l'algorithme du calcul de la clé de controle :

  • Créer un code IBAN articiel, composé du code du pays (ISO 3166), suivi de "00" et du compte bancaire.
  • Déplacer les 4 premiers caractères de l'IBAN vers la droite du numéro.
  • Convertir les lettres en chiffres, conformément à la table de conversion (A=10, Z=35)
  • Appliquer le modulo 97 et retrancher le reste de 98.
  • Si le résultat comporte 1 seul chiffre, inserer un 0 devant.
  • Insérer le résultat ainsi obtenu à la position 3 de l'IBAN articiel créé auparavant (ce qui reviens a remplacer les 2 zéros)

Maintenant que vous savez tout sur l'IBAN, a vous de bosser ;)

Voici la procédure Uniface que j'utilise pour le controle de l'Iban

Je vous laisse le soin de la transcrire en dans votre langage préféré :P


;--------------------------------------------------------------
; LP_IBAN
;--------------------------------------------------------------
ENTRY LP_IBAN
variables
numeric lv_mod, lv_cle
string lv_iban
string lv_cbanq, lv_cgui, lv_cptban, lv_rib
endvariables

; Dans le principe de l'IBAN, d'abord on met a la suite les champ du compte bancaire precede du pays et de 00
; avant de calculer ce qui va supplanter le "00" (qui sera la clé de controle)

lv_cbanq = cbanq
call LP_COMPLETER(lv_cbanq,5)
lv_cgui = cgui
call LP_COMPLETER(lv_cgui,5)
lv_cptban = cptban
call LP_COMPLETER(lv_cptban,11)
lv_rib = rib
call LP_COMPLETER(lv_rib,2)

; on pourrait faire plus simple mais cette manipulation a le mérite de rendre plus clair le découpage IBAN

iban1 = "FR00"
iban2 = lv_cbanq[1:4]
iban3 = "%%lv_cbanq[5:1]%%%%%lv_cgui[1:3]%%%"
iban4 = "%%lv_cgui[4:2]%%%%%lv_cptban[1:2]%%%"
iban5 = lv_cptban[3:4]
iban6 = lv_cptban[7:4]
iban7 = "%%lv_cptban[11:1]%%%%%lv_rib%%%"

; calcul de la clé : Phase 2 (déplacement du iban1 vers la fin)
lv_iban = "%%iban2%%%%%iban3%%%%%iban4%%%%%iban5%%%%%iban6%%%%%iban7%%%%%iban1%%%"

; calcul de la clé : Phase 3 (Remplacement des lettres par des chiffres)
lv_iban = $replace(lv_iban, 1, "A", "10", -1)
lv_iban = $replace(lv_iban, 1, "B", "11", -1)
lv_iban = $replace(lv_iban, 1, "C", "12", -1)
lv_iban = $replace(lv_iban, 1, "D", "13", -1)
lv_iban = $replace(lv_iban, 1, "E", "14", -1)
lv_iban = $replace(lv_iban, 1, "F", "15", -1)
lv_iban = $replace(lv_iban, 1, "G", "16", -1)
lv_iban = $replace(lv_iban, 1, "H", "17", -1)
lv_iban = $replace(lv_iban, 1, "I", "18", -1)
lv_iban = $replace(lv_iban, 1, "J", "19", -1)
lv_iban = $replace(lv_iban, 1, "K", "20", -1)
lv_iban = $replace(lv_iban, 1, "L", "21", -1)
lv_iban = $replace(lv_iban, 1, "M", "22", -1)
lv_iban = $replace(lv_iban, 1, "N", "23", -1)
lv_iban = $replace(lv_iban, 1, "O", "24", -1)
lv_iban = $replace(lv_iban, 1, "P", "25", -1)
lv_iban = $replace(lv_iban, 1, "Q", "26", -1)
lv_iban = $replace(lv_iban, 1, "R", "27", -1)
lv_iban = $replace(lv_iban, 1, "S", "28", -1)
lv_iban = $replace(lv_iban, 1, "T", "29", -1)
lv_iban = $replace(lv_iban, 1, "U", "30", -1)
lv_iban = $replace(lv_iban, 1, "V", "31", -1)
lv_iban = $replace(lv_iban, 1, "W", "32", -1)
lv_iban = $replace(lv_iban, 1, "X", "33", -1)
lv_iban = $replace(lv_iban, 1, "Y", "34", -1)
lv_iban = $replace(lv_iban, 1, "Z", "35", -1)

; calcul de la clé : Phase 4 (modulo 97)
lv_mod = frac(lv_iban / 97) * 97
lv_cle = 98 - lv_mod[round]
iban1 = "FR%%lv_cle%%%"
END

Entry LP_COMPLETER
params
string p_num : inout
string p_max : inout
endparams
length p_num
while ($result < p_max)
p_num = "0%%p_num%%%"
length p_num
endwhile
return 0
End

Vincent

Pour éviter de permettre à vos visiteurs de lancer une recherche dans vos tables avec 1 seul caractère comme critère, vous pouvez les obliger a saisir un minimum de caracteres en faisant un rapide contrôle en javascript :


<html>
<head>
<script>
function valider(monchamps){
var mini = 3
var maxi = 20
if ( mini != 0 ) {
// Si la longueur de la saisie est inférieure au minimum demandé
if ( monchamps.value.length < mini ) {
// Envoi d'une alerte
alert('Vous devez saisir au moins ' + mini + ' caracteres.');
return false
}
}
// Si la longueur de la saisie est supérieure au maximum demandé
if ( maxi != 0 ) {
if ( monchamps.value.length > maxi ) {
alert('Vous ne devez pas saisir plus de ' + maxi + ' caracteres.');
return false
}
}
}
</script>
</head>
<body>
<form name="form1" method="post" action="moteur.html">
<input type="text" name="motsclef" id="search" onBlur="valider(this)">
<input type="submit" value="Rechercher">
</form>
</body>
</html>

(et vous pouvez faire le meme controle en php du coté serveur pour les petits malins qui ont désactivé le javascript)

Vincent

Référencez votre site !

Parmi les bonnes résolutions de la rentrée, n'oubliez pas d'ajouter votre site dans l'annuaire généraliste kiwoui.

Vous y trouverez surement une rubrique qui vous intéressera parmi les nombreuses existantes (ex: agences immobilières ou télé-réalité)

Si une rubrique n'existe pas, n'hesitez pas a la demander (même les concours seo sont acceptés et ont leur rubrique dédiée comme pour le loupanthère)

Les derniers sites listés sont affichés sur la home, qui sera enrichie dès que possible (En fait, dès que j'aurais le temps de bosser sur quelques idées sympas... Cependant la rentrée scolaire n'est pas évidente mais c'est une autre histoire!)

Sinon est-ce que vous êtes au courant qu'un nouveau blog sympa sur le référencement s'est ouvert il y a peu?

Référencement, SEO, SEM, web marketing... Best Viewed With Googlebot (BVWG) vous dévoile les secrets de la visibilité dans Google et les autres outils de recherche.

Vincent

Les annuaires

Petite note pour expliquer comment trouver des annuaires où référencer son site :

  1. Listes d'annuaires
    Pour commencer efficace, voici 3 sites qui recensent les annuaires intéressants pour référencer votre site

[*]critères d'un bon annuaire

Pour rappel, on considère qu'un annuaire est bon pour votre référencement si:

  • il fait des liens en dur
  • le lien de retour est facultatif
  • la gestion est attentive et sérieuse (visitez quelques pages de l'annuaire pour vous faire une idée, ex: Kiwoui, les pages du Hub sont sérieux)
  • pas trop du publicité, pas trop de sites par page

[*]Trouver un annuaire a thème

là, le plus rapide est de visiter un portail sur le thème et de chercher des liens vers un éventuel annuaire ou directement taper la requete qui vous intéresse sur google avec le mot 'annuaire' dedans.

exemple : des annuaires pour la piscine (coucou Lafleur), ou encore pour la littérature ou enfin annuaire gironde

Une autre méthode est d'espionner le référencement d'un de vos concurrents (exemple tapez linkdomain:siteconcurrent.com dans msn) et de vous y inscrire sur toutes les pages des annuaires comportant votre concurrent ;) )

Vincent

Petit mot sur un problème dont la solution me parait insatisfaisante...

Concernant le script Phplinkdirectory pour les annuaires, certaines soumissions échouent sur le problème de la vérification draconnienne de la validité de l'url proposée :

"The URL could not be validated. Either the page does not exist or the server cound not be contacted."

Nous avons essayé d'etudier un peu le problème avec les spécialistes du sujet

validation formulaire V2 - PHP Link Directory Forum

mais sans succès.

le seul palliatif trouvé a été de désactiver ce fichu test comme il suit :

Open \submit.php

Find and delete:

SmartyValidate :: register_validator('v_URL_ONLINE', 'URL', 'isURLOnline', false, false, false, null, 'submit_link');

Open \templates\submit.tpl

Find and delete:

{validate form="submit_link" id="v_URL_ONLINE" message=$smarty.capture.url_not_online}

Donc dans tous les cas, maintenant, vous n'avez plus d'excuses pour ne pas avoir ajouté votre site dans l'annuaire généraliste Kiwoui ! Plus aucun site ne tombera en erreur a la soumission ;)

Vincent

Dans le Pré des Rumeurs, aux heures troubles du crépuscule, quand on n'entend que le bruissement des oiseaux et le léger vrombissement des moucherons, les langages de programmation se rencontraient. Et parlaient.

La conversation commençait comme elle a toujours commencé, sur des sujets profonds et sérieux, sur le coeur existentiel qui fonde tous les langages.

Est-ce que j'existe ou non ? Dans cette boucle infinie de vie, quel est le but ? Où dois-je aller, et qu'y faire une fois que j'y suis ? Qu'arrive-t-il après la fin ?

(Ce n'est pas simple d'être un langage de programmation, condamné à se contempler soi-même, jour après jour)

Cependant, au bout d'un moment, les langages se détendaient. Le Pré aux Rumeurs possédait ce je-ne-sais-quoi qui pénètre les coeurs et les âmes, qui assouplit leurs tâches et ouvrent leurs paramètres. Le Pré aux Rumeurs était magique, pas de doute.

Mais ce jour-là, le groupe était singulièrement silencieux, parce qu'un de leurs membres, PHP, n'avait pas l'air dans son assiette.

Qu'est-ce ne va pas, PHP ? demandèrent les autres langages. Enfin, tous les langages sauf le C, parce que C ne disait jamais rien d'autre que « Dégage ! ». C était un langage rude et difficile à vivre, mais respecté à cause de sa grande forcede travail.

Et PHP répondit :

Jour et nuit je travaille. Les seuls moments où l'on me remarque, c'est quand je m'arrête, et alors on me maudit, on me frappe, l'on dit que je suis inutile et on me jette. Mais quand ça va bien, personne n'a jamais un mot gentil pour moi.

Personne ne remarque ma facilité, mon élégance, ma simplicité. On ne se souvient que de mes échecs.

Et après cette lugubre constatation, PHP sombra dans un silence contemplatif et une tristesse lourde.

Tu crois que ça va mal, dit C++. Essaie de te mettre à ma place.

Sans moi, des industries entières sombreraient, les banques fermeraient, les bateaux couleraient et les trains

dérailleraient. Virtuellement, je commande le monde entier.

Et pourtant, les seules fois où l'on fait attention à moi, c'est quand on trouve une fuite de mémoire ou

qu'une exception est levée, et alors on me maudit, on m'insulte et je suis débuggué brutalement, sans aucun égard pour ma sensibilité.

Tous les langages hochèrent la tête, parce qu'ils connaissaient la sensibilité du C++. De fait, Perl fut si ému par l'éloquence de C++ qu'il se sentit contraint de parler, alors qu'en général il s'asseyait tranquillement dans un coin, consommant avidement les expressions.

PHP, C++, je sympathise avec vous. Ma condition n'est guère meilleure que la votre.

J'associe les expressions aux expressions, puis je recommence, encore et encore, d'abord cryptiquement, puis objectivement, mais toujours j'associe tout avec tout. Et association après association, ma perfection est prise comme un dû, et pourtant j'aimerais bien voir les autres associer avec autant d'élégance.

Regardez, on ne peut citer « expressions rationnelles » sans que mon nom n'apparaisse sous peu.

Mais suis-je remercié pour cela ? Non.

Et vas-y du Larry Wall par ci, du Larry Wall par là, c'est lui la star. Mais toujours on fait appel à l'interpréteur Perl quand le boulot doit être fait.

Comme Perl finissait, Python et Ruby se regardèrent en roulant des yeux. Avec toutes ces histoires d'association, Perl aurait au moins pu faire des rimes !

Fortran tapota l'épaule de Perl de sa main flétrie.

Calme-toi, Perl, calme-toi.

Souvenez-vous qu'au moins on vous fait encore une place dans ce monde. Regardez-moi, je ne suis plus qu'un souvenir, un fantôme de mon ancienne force.

Il n'y eut jamais un problème scientifique que je ne puisse résoudre. Je fus le maître de mon domaine, le roi des processeurs.

Mais maintenant, mes jours de gloire sont révolus, et je suis condamné à vivre mes derniers jours comme du code hérité.

Comme le râle de Fortran touchait à sa fin, Cobol acquiesça avec emphase, mais il ne pouvait pas parler, à cause du tube à oxygène. (Les autres langages en étaient secrètement soulagés, COBOL radotait un peu trop souvent sur le bon vieux temps).

C'est alors que la marée des plaintes monta, et le bruit des voix s'accrut sans cesse, au point que les écureuils sortirent de leurs trous et que les oiseaux les dévisagèrent depuis le bord de leur nid. Le calme vallon n'était plus calme du tout.

Et moi alors, s'exclama Pascal ! Je ne suis plus utilisé qu'en cours ! À quoi sert un langage d'apprentissage ?

Et moi alors, dit SNOBOL. Personne n'a même jamais entendu parler de moi !

Et moi alors, dit C#. Je ressemble à Prince !

Dégagez, dit le C.

Lisp aurait parlé, mais il avait aperçu un reflet de lui-même dans la mare et y était tombé en essayant de se rencontrer soi-même. Et Java était trop occupé à ramasser des ordures dans la Crique des Rumeurs.

La vague de bruit s'enfla sans cesse, et le babillage se propagea à travers le Pré, quand tout à coup une voix rugit depuis les arbres.

Assez !

J'en ai assez de vos querelles, je suis fatigué de vos plaintes. Je suis saoulé de vos gémissements, de votre égocentrisme pleurnichard !

Je croyais qu'il s'agissait d'une fête. Si j'avais su que ça ne serait qu'une querelle de ménagères, je n'aurais pas fait le déplacement.

Les langages s'arrêtent de parler. Qui était-ce donc ? Ils se comptèrent et se trièrent par ordre alphabétique (C++ dut placer Basic, qui n'avait jamais appris l'alphabet), ils se recomptèrent et parvinrent tous à la même conclusion. Tous les langages étaient présents.

L'énigme restait entière, quand soudain les buissons s'écartèrent et XML surgit dans la lumière.

XML ! s'exclama C++. Qu'est-ce que tu fais ici ? Tu n'es même pas un langage de programmation.

Dis-le aux personnes qui m'utilisent, dit XML.

On croit que je suis le sauveur, la solution ultime, le point final. On m'écrit des odes, on recouvre mon chemin de fleurs, on sacrifie des vierges sur mon autel.

Les programmeurs prononcent mon nom avec respect. Les entreprises insistes pour m'utiliser dans leurs projets, bien qu'elles ne sachent pas exactement pourquoi faire.

Et chaque fois qu'apparaît un problème, quelqu'un dit « On pourrait faire du XML », et un miracle se produit. Mon nom est devenu un talisman contre le mal.

Et pourtant, je ne suis toujours qu'une simple balise aux origines humbles. C'est un poids, d'être XML.

XML soupira, et tous les langages, ému par son désespoir, se regroupèrent autour de lui ;

Puis se jetèrent sur ce petit XML, le jetèrent dans la poussière, le piétinèrent sans relâche. Oui, ils l'écrasèrent dans la poussière. Basic frappa XML, C++ le bourra de coups, et Java nettoya et piétina et nettoya et piétina. COBOL voulut donner un coup de pied dans la tête de XML, mais tomba sur sa canne. Même LISP s'extirpa de la mare et jeta ses mains de détraqué autour de la gorge de XML, mais ne réussit qu'à s'étrangler lui-même.

Chaque langage marmonnait en rouant XML de coups, et dans leurs yeux se lisait une jubilation extrème.

Je dois parser du XML, hein ? Je dois posséder une API XML hein ? Travailler avec XML-RPC, RSS, et RDF ?

Tiens, parse donc ça dans ta face, sale petite balise de merde.

Trouvé sur linuxfr.org

Historique des langages informatiques

Vincent

Le référencement évolue au fil du temps qui passe.

Mais voilà quelques nouvelles fraiches pour ce milieu d'année 2006 avec les vidéos de Matt Cuts.

Comme j'ai trouvé le billet de Jean-Luc très bien fait: clair, précis, je vous invite a lire son résumé des vidéos

et d'appliquer ces quelques lignes qui sont en fait un condensé de bon sens.

Important, et a ne pas oublier dans la checklist!

Vincent

Liste des forums

Voici une liste de forums écrits en Php, installable sur votre site dynamique pour créer votre communauté :

Voilà, maintenant, plus d'excuses pour dire que vous ne trouvez pas de forums pour votre site parce que IPB est trop cher, phpbb fait trop peur, punbb trop léger etc... ;)

Vincent

Voici un mini guide avec le logiciel XnView pour que nos petits webmestres débutants puissent mettre en ligne facilement leur photos.

Tout d'abord, il est préférable de creer un dossier de travail avec une copie de vos photos originales.

Une fois le dossier créé sur votre ordinateur, ouvrez XnView.

Vous êtes normalement en mode "explorateur", allez sur votre dossier avec vos photos.

Sélectionnez vos photos à inclure dans votre future galerie et cliquez dans le menu : Outils > Page Internet (Ctrl + G)

gallery_1651_16_29609.jpg

Vous arrivez sur la boite de dialogue du logiciel XnView pour parametrer votre galerie d'image HTML.

gallery_1651_16_38684.jpg

Tout en haut, il vous est indiqué le chemin du dossier où se trouvent les templates XnView, qui serviront de base pour creer les pages.

Vous pouvez modifier ces templates, ou en créer de nouveaux.

Ensuite, chaque cadre vous permet d'affiner le contenu de votre galerie:

  • Dans le cadre 'divers', on renseigne les paramètres de la page.
  • Dans le cadre 'informations affichées', vous avez une liste déroulante d'informations disponibles concernant vos photos. Vous pouvez les selectionner pour mettre ces informations en légendes de vos photos.
  • Dans le cadre 'vignette', vous pouvez parametrer la génération automatique des vignettes.
  • Dans le cadre 'image', quelques paramètres pour définir la taille des photos et si vous voulez des pages spécifiques pour celles-ci.
  • Dans le cadre 'destination', vous spécifiez là ou Xnview doit generer les pages de votre galerie.

voilà, il vous reste plus qu'à mettre en ligne votre galerie avec un logiciel FTP.

Voici quelques exemples avec :

Vincent

Parfois, pour ceux qui n'ont pas la chance ou les moyens (ou même l'envie) d'avoir un bon serveur dédié. Un problème récurrent est de manquer de puissance pour traiter de gros fichiers sans dépasser les temps de traitements, les quotas de mémoire etc...

Voici donc un petit script qui découpe vos fichiers en plusieurs petits fichiers.

(ici je m'en sers pour traiter des données sur nos 36000 communes)


<?php

$source="insee";
$extsrc=".csv";
$destination = "insee";
$extdest=".csv";
$nblignes = 2500;

if($f=fopen($source.$extsrc,'r')){
$i = 0;
$j = 1;
$d=fopen($destination.$j.$extdest,'w');
echo "on ecrit dans le fichier : ".$destination.$j.$extdest."</br>\n";
while (!feof($f)) {
$i = $i+1;

if($i<$nblignes){
fputs($d,fgets($f, 4096));
}
else
{
fputs($d,fgets($f, 4096));
fclose($d);
$j = $j + 1;
$d=fopen($destination.$j.$extdest,'w');
echo "on ecrit dans le fichier : ".$destination.$j.$extdest."</br>\n";
$i=0;

}
}
fclose($f);
fclose($d);
}

?>

Vincent

Voici un petit exemple basique en Php de ce que l'on peut savoir sur un fichier envoyé par formulaire :


<?php /* Date de création: 09/07/2006 */
$fichier = $_FILES['fichier']['name'];
$size = $_FILES['fichier']['size'];
$tmp = $_FILES['fichier']['tmp_name'];
$type = $_FILES['fichier']['type'];
$error = $_FILES['fichier']['error'];
$max = 1000000;

if(isset($fichier)) {
if($size <= $max) {
echo 'Nom d\'origine =>'.$fichier.'<br />';
echo 'Taille =>'.$size.'<br />';
echo 'Nom sur le serveur =>'.$tmp.'<br />';
echo 'Type de fichier =>'.$type.'<br />';
echo 'Code erreur =>'.$error.'<br />';
} else {
echo 'Le fichier est trop volumineux';
}
}
else {
echo 'aucun fichier envoyé';
}

?>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input name="fichier" type="file">
<input type="submit" value="send" name="bouton">
</form>

×