Quoi de plus simple que d'envoyer des mails avec php avec la fonction mail ! Les choses se compliquent légèrement si on n'a pas de serveur de mail ! Et c'est peu de le dire. Evidemment on peut se lancer dans l'installation d'un serveur de mail (sendmail ou postfix par exemple) mais ce n'est pas à la portée de monsieur tout le monde si on ne veut pas servir de relais de spam! Une solution simple: nullmailer
PHP
Scripts, astuces,...dimanche 16 septembre 2007
Envoyer des mails avec php
Par Nicolas le dimanche 16 septembre 2007, 21h35
lundi 2 octobre 2006
Mettre fin à une authentification http
Par Nicolas le lundi 2 octobre 2006, 10h06
Le but du jeu est de mettre fin à une authentificaiton http faite avec le mécanisme des fichiers .htaccess
dimanche 28 mai 2006
Qu'est-ce qu'un singleton ?
Par Nicolas le dimanche 28 mai 2006, 14h28
Le singleton est un modèle de conception (design pattern pour les grands bretons). En clair c'est une façon éprouvée de résoudre un problème. Avec le sinleton on cherche à n'avoir qu'une seule instance d'un même objet.
vendredi 26 mai 2006
Faut-il utiliser $_REQUEST ?
Par Nicolas le vendredi 26 mai 2006, 11h14
Depuis que je suis tout petit, j'utilise $_GET pour les données provenant de l'url et $_POST pour celles provenant de mes formulaires (utilisant la méthode "post"!).
En lisant divers articles, je me demande si je ne prends pas un peu la tête et si je ne devrais pas utiliser $_REQUEST quelle que soit la provenance des données. Peu importe la provenance, de toute façon il faut filtrer, vérifier, contrôler la cohérence de ces données.
samedi 6 mai 2006
Ne pas réinventer la roue.
Par Nicolas le samedi 6 mai 2006, 22h48
On répète souvent que lorsqu'on fait un script il ne faut pas réinventer la roue et utiliser au maximum les fonctions natives du langage. Cela a de multiples avantages: c'est optimisé, sans bug,... Mais on n'imagine pas toujours lorsqu'on est débutant à quel point cet adage doit être pris au sérieux!
mardi 14 mars 2006
Quel est mon mot de passe ?
Par Nicolas le mardi 14 mars 2006, 15h27
Dans une interface d'administration qui se respecte, on doit pouvoir à un moment créer des comptes. Il est souvent agréable de se voir proposer un mot de passe aléatoire. En général, je n'utilise pas un mot de passe complétement alétaoire: je supprime les caractères ambigus tels que 0, 1, i, j, l, m, n, o, u, v,I,O. Le code peut ressembler à ça. La fonction attend en paramètre la longueur du mot de passe à générer. Cette fonction n'a rien d'extraordinaire mais elle ne fait que ce qu'on lui demande mais elle le fait bien!
<?php
function generate_password($size) {
$listeChar = '23456789abcdefghkpqrstwxyzABCDEFGHKJLMNPQRSTUVWXYZ';
$max = strlen($listeChar)-1;
$key = '';
for ($i=0;$i<$size;$i++) {
$key .= $listeChar[mt_rand(0,$max)];
}
return $key;
}
?>
Petite mise à jour. J'avais oublié de préciser une chose: pourquoi je supprime certains caractères ? Je supprime les caractères 0, 1, i, j, l, m, n, o, u, v,I,O car ils sont potentiellement ambigus. Le "i" peut être confondu avec le "l", le "0" avec le "O". Même dans la phrase précédente on ne sait pas au premier coup d'oeil si j'ai écris "le zéro et la lettre O" ou "la lettre O et le zéro. L'intérêt est de générer des mots de manière automatique en enlevant les ambiguïtés visuelles.
mardi 21 février 2006
Développement piloté par les tests.
Par Nicolas le mardi 21 février 2006, 17h16
Il ne semble pas évident au premier abord de faire des tests du code que l'on écrit. En général, on se borne à vérifier qu'il n'y a pas d'erreurs de syntaxe. On vérifie que les 3 ou 4 pages que l'on vient de modifier fonctionnent toujours de la même façon. Cette manière de fonctionner atteint rapidement ses limites au fur et à mesure que l'application grossie. Comment se rappeler que le code écrit aujourd'hui n'aura pas d'impact sur le code écrit il y a 6 mois ? Sans tests exhaustifs, c'est tout simplement impossible.
dimanche 15 janvier 2006
A la découverte de php5
Par Nicolas le dimanche 15 janvier 2006, 20h22
La version 5 de PHP est sortie depuis plus d'un an, le 13 juillet 2004 exactement. Je ne parlerais pas des nombreux changements tellement c'est énorme. Mais de quoi je vais parler, alors ? De ma déouverte de php5.
Je me suis mis à php5 voici quelques mois. L'installation sur HP-UX n'a pas été une mince affaire mais ça fonctionne!
J'avais pris comme habitude avec php4 de développer sur le serveur de test avec le niveau d'erreur E_ALL (2047). Avec php5, je suis passé à E_ALL & E_STRICT, soit 4095. La plupart des scripts qui se disent compatibles php5 ne passent pas avec ce niveau d'erreurs. Un exemple flagrant: on ne peut plus déclarer un attribut de classe (une variable) de la manière suivante:
Il faut utiliser un des mots-clés de portée, à savoir public, protected ou private.
mercredi 21 décembre 2005
Précédence des opérateurs
Par Nicolas le mercredi 21 décembre 2005, 11h01
Il existe en PHP deux types de "ET" (and et &&) et de "OU" (or et ||). La raison est qu'ils ont des priorités différentes. Le and et le or ont une priorité plus faible que l'opérateur = alors que le && et le || ont une priorité plus élevée que le =.
Par exemple si on a le code suivant:
<?php $choix1 = "un"; $choix2 = "deux"; $choix3 = "trois"; $val1 = $choix1 || $choix2 || $choix3; $val2 = $choix1 or $choix2 or $choix3; ?>
$val1 sera égal à true et $val2 sera égal à "un".
Pour régler le problème, soit on met tout le temps des parenthèses, soit on n'utilise les opérateurs && et ||.
vendredi 22 juillet 2005
Afficher une arborescence avec menu et sous-menu.
Par Nicolas le vendredi 22 juillet 2005, 22h25
On est souvent confronté à ce type de problème: afficher sous forme d'arbre (liste ul/li par exemple) un menu ou un forum. On récupère les informations d'une base de données où chaque enregistrement comprend les champs suivants (au minimum): id, label, parent. La requête de sélection est toute simple: select id, nom, parent from table.
Imaginons que l'on est récupéré ces enregistrements là:
<?php
$tab[1] = array('label'=>'menu1','parent'=>0);
$tab[2] = array('label'=>'menu1.1','parent'=>1);
$tab[3] = array('label'=>'menu1.1.1','parent'=>2);
$tab[4] = array('label'=>'menu1.1.2','parent'=>2);
$tab[5] = array('label'=>'menu1.2','parent'=>1);
$tab[6] = array('label'=>'menu2','parent'=>0);
$tab[7] = array('label'=>'menu3','parent'=>0);
$tab[8] = array('label'=>'menu3.1','parent'=>7);
$tab[9] = array('label'=>'menu3.2','parent'=>7);
$tab[10] = array('label'=>'menu3.3','parent'=>7);
?>
On veut obtenir ça:
- menu1
- menu1.1
- menu1.1.1
- menu1.1.2
- menu1.2
- menu1.1
- menu2
- menu3
- menu3.1
- menu3.2
- menu3.3
Et le code PHP correspondant peut ressembler à çà:
<?php
function addTree(&$Tree,$feuille,$id) {
global $tab;
$Tree[$feuille['label']]['__LABEL'] = $feuille['label'];
foreach ($tab as $cle => $element) {
if ($element['parent']==$id) {
addTree($Tree[$feuille['label']],$element,$cle);
}
}
}
$Tree = array();
foreach ($tab as $cle => $feuille) {
if ($feuille['parent']==0) {
addTree($Tree,$feuille,$cle);
}
}
?>
Cette petite fonction récurssive peut sembler anodine mais elle fait tout le boulot et elle le fait bien.
