Archives de catégorie : F – PHP

Introduction à PHP

php

PHP, est l’acronyme récursif de ‘PHP Hypertext PreProcessor’
C’est un langage de scripts SERVEUR,  comme JSP ou ASP.
Plus précisément , c’est:

  • un langage de programmation
  • il est interprété
  • open source
  • s’exécute en général via un serveur HTTP (apache ou autre) ou parfois en local
  • il permet de rendre dynamique des pages HTML
  • et souvent …de se connecter à des BDs MySQL

Il a été créé par Rasmus Lerdorf en 1994.
Contributeur notables : Zeev Suraski et Andi Gutmans
également fondateurs de la société ‘ ZEND’ : ‘the PHP Company ‘

Installation /distribution

Multi OS : unix, linux Windows
Essentiellement 3 types de fonctionnement :

  • autonome, sans serveur web, directement en mode commande sous windows ouUnix
  • fichier .php pur, via un serveur Web (protocole http)
  • code PHP intégré à un fichier HTML (c’est le + répandu…)

Multi Serveur web : Apache, IIS, avec passerelle CGI pour tous les serveurs
Architecture : CGI ou Modules internes pour Apache

Distributions classiques :
Il existe des packages clé en main, qui comprennent : un serveur Web Apache, un module PHP configuré, un SGBD MySQL et des outils d’administration pour ces différents logiciels. Et ceci sur différents systèmes d’exploitation :
LAMP : architecture Linux, apache, PHP, MySQL
WAMP : équivallent de l’architecture LAMP…sur Windows
MAMP : idem sur MAc…

Note : on peut également intaller séparément Apache, puis configurer le module PHP sur Windows, puis installer MySQL ensuite. Ceci est plus compliqué mais peut vous permettre d’avoir les toutes dernières versions de chaque logiciel si nécessaire…

Documentations et sources

La doc de référence en Francais !! : http://www.php.net/manual/fr/
de très bon tutoriaux sur PHPFrance : http://www.phpfrance.com/tutoriaux/index.php/toc/home

mais aussi :
http://www.php.net : le site de référence (téléchargement, doc de référence, articles techniques, forums
http://www.zend.org : The PHP company (services, outils de développement, de tuning,…)
http://www.afup.fr : l’association des utilisateurs français de PHP
http://www.phparch.com/ un portail (très) technique et moderne
et chez DD aussi : http://didier.deleglise.free.fr/ chapitre PHP / Oracle

Des beaux livres :
chez www.oreilly.com
Et le livre de de Geyer et Daspet : PHP5 avancé chez Eyrolle

Des extensions pléthoriques

La grande force de PHP est qu’il est livré avec des centaines de fonctions spécialisées, qui vous évitent de réinventer la roue…
Ces fonctions sont regroupées sous formes d’extensions, que l’on peut activer ou non, en modifiant la configuration de PHP (fichier PHP.ini en général).
Ce sont techniquement des librairies dynamiques (DLL ou .SO)

Pour en citer quelques unes :

  • Connexions aux BDs (MySQL, Oracle, SQL Server, PostgreSQL, Sybase, m(ini)SQL, Ingres,
  • Informix, dbase) + ODBC + PDO !!
  • Meta données : EXIF, ID3
  • XML, XSL
  • Protocoles : http (URLs) , FTP, LDAP, SSL, SOAP, SNMP
  • Messagerie : IMAP et SMTP
  • Images
  • PDF
  • Technos Microsoft : COM, .Net + API Windows

Liste exhaustive des extensions sur : http://www.php.net/manual/fr/

Démarrer avec PHP

Installer PHP (et apache)

Le plus simple pour installer PHP est d’installer un Package pour Windows ou Mac comprenant Apache et PHP (ils incluent en général d’autres logiciesl comme MySQL) qui nous serviront par la suite…

Voici quelques packages ‘clés en main’ :

Il en existe d’autres, mais si vous êtes sous Windows je vous conseille WAMP qui est très simple d’utilisation.
Une fois téléchargé, lancez le serveur WAMP et vérifiez qu’un serveur Web est actif sur votre machine.
Le plus simple est d’utiliser le menu en cliquant sur l’icone WAMP de la barre d’adresse :

image_menu_wamp.gif

et vous cliquez sur ‘localhost’, ce qui lancera votre navigateur et affichera la page d’accueil de WAMP.
Vous pouvez également lancer votre navigateur préféré, et taper l’adresse http://localhost …

Lorsque vous installez WampServer, un répertoire « www » est automatiquement créé (généralement c:\wamp\www). Créez un sous répertoire pour votre projet et mettez vos fichiers PHP dedans.
Ensuite si vous allez dans votre dossier projet, via la page d’accueil, les fichiers PHP que vous avez copié apparaitront sous forme de liste et vous pourrez les exécuter par un simple ‘clic’.

image_accueil_wamp.gif

Mon premier programme PHP !

Avec un éditeur de texte, tapez le code suivant :

<?php
echo « Bonjour ! »;
?>

et enregistrez le dans dossier que vous avez créé sous ‘www’, avec le nom ‘bonjour.php’.
Ensuite à partir de la page d’accueil de WAMP, cliquez dans votre dossier projet, puis sur le lien bonjour.php, si tout se passe bien, votre programme devrait s »exécuter …et afficher ‘Bonjour!’

note : vous pouvez accéder directement au dossier ‘www’, sans passer par l’explorateur Windows, en cliquant sur le lien ‘www directory’ du menu WAMP !

PHP sans apache ?

Bien que cela soit assez peu fréquent on peut utiliser PHP sans serveur Web !
L’exécutable PHP(php.exe sous Windows, php sous Linux) est un interpréteur de code PHP !
et en mode commande, sous windows ou en shell sous Linux on put exécuter notre programme en tapant :

C:\>PHP bonjour.php

note : pour que cet exemple précis fonctionne il faut que l’exécutable ‘PHP.EXE’ soit dans le PATH (chemin d’exécution) et bonjour.php sur la racine…

Opérateurs

PHP comme tous les langages de programmation, offre un certain nombre d’opérateurs qui permetent d’écrire des expressions plus ou moins compliquées, mélangeant constantes et variables.

Opérateurs d’affectation

C’est un des + simples et des + utiles, il permet de ranger une valeur dans une variable et se note simplement ‘=’

$chiffre = 1;
$chaine = « Bonjour cher ami »;
$nb_combinaisons = $n*($n-1)*($n-2) / 3*2;

note : Attention l’opérateur ‘=’ veut bien dire affecter une valeur et ne doit pas être confondu avec l’oérateur logique (vari ou faux) d’égalité !

On peut affecter une variable en utilisant la valeur de cette même variable, très simplement en écrivant :

$ma_variable = $ma_variable…et une expression

// la valeur courante de n est augmenté de 1 et rangée dans n
$n= $n+1;
// n est multiplié par 2
$n= $n*2;
// on rajoute le caractère ‘,’ à la chaine $chaine
$chaine = $chaine.’,’;

Pour simplifier les écritures, PHP utilise des opérateurs combinés qui font en même temps la modification et l’affectation, sans avoir à répéter le nom de la variable comme dans les exemples précédents.
Ainsi on pourra écrire $n+=1 au lieu de $n=$n+1

Voici un tableau résumé de ces opérateurs spéciaux et leur notation équivallente :

opérateur
d’affectation combinés
équivallent signification
$a += $b $a = $a + $b Addition
$a -= $b $a = $a – $b Soustraction
$a *= $b $a = $a * $b Multiplication
$a /= $b $a = $a / $b Division
$a %= $b $a = $a % $b Modulo
$a &= $b $a = $a & $b Bitwise And
$a |= $b $a = $a | $b Bitwise Or
$a ^= $b $a = $a ^ $b Bitwise Xor
$a <<= $b $a = $a << $b decalage gauche
$a >>= $b $a = $a >> $b decalage droit

// on initialise n à 12
$n = 12;
// et on l’incrémente de 2
$n += 2;
// et on lui soustrait la valeur de m
$n -= $m;

Opérateur de concaténation de chaine : ‘.’

permet d’accoler plusieurs chaines de caractères entre-elles

exemples

$chaine1 = $chaine2 . $chaine3;
$mess = « bonjour ».$chaine2;

et avec l’opérateur combiné d’affectation / concaténation

// on initialise la chaine
$message = « bonjour »;
// et on y concatene deux autres chaines…
$message .=  » ,cher »;
$message .=  » ami! »;

Opérateurs arithmétiques

Opérateurs arithmétiques

signification

Exemple
+ Addition 2 + 1
Soustraction 1- 2
* Multiplication 5 * 1
/ Division 10 / 2
% Modulo (reste de la division entière) 15 % 2

// une expression mathématique
$n=5;
$resultat = ($n*($n-1)*($n-2)) / 2;
// $resultat vaut 30…

Opérateurs de comparaison

Opérateurs de comparaison

signification

Exemple Résultat
== Egal à $x == $y Faux
!= différent de $x != $y Vrai
< inférieur à $x < $y Vrai
> supérieur à $x > $y Faux
<= inférieur ou Egal à $x <= $y Vrai
>= supérieur ou Egal à $x >= $y Faux

// conditions…
if ($n == 1) echo (« n vaut 1 »);
if ($ != 1) echo (« n est différent de 1 »);

Opérateurs logiques

Exemple
Nom
Résultat
$a and $b
ET (And)
Vrai si $a ET $b sont vrais.
$a or $b
OU (Or)
Vrai si $a OU $b est vrai
$a xor $b
XOR (Xor)
Vrai si $a OU $b est vrai,mais pas les deux en même temps.
! $a
NON (Not)
Vrai si $a est faux.
$a && $b
ET (And) Vrai si $a ET $b sont vrais.
$a || $b
OU (Or)
Vrai si $a OU $b est vrai.

					

Les fonctions prédéfinies de PHP

Il existe plusieurs milliers de fonctions prédéfinies en PHP, dans presque tous les domaines utiles pour développer un programme Web. Il y a près de 200 catégories de fonctions différentes : gestion de fichiers, de bases de données, de protocoles, de réseau, de mail, d’images, de serveurs webs, de compression, de sécurité, …

Un dato interesante sobre la salud masculina es que la disfunción eréctil puede ser un síntoma de problemas subyacentes más graves, como enfermedades cardíacas o diabetes. Muchos hombres enfrentan este desafío, y a menudo buscan soluciones que van más allá de los tratamientos convencionales. En algunos casos, pueden estar interesados en opciones alternativas, como el hecho de “, lo que sugiere una búsqueda de alivio incluso en medicamentos no específicos para este problema. Es esencial que cualquier tratamiento se discuta con un profesional de la salud para garantizar la seguridad y la efectividad.

A menudo, los problemas de salud física y mental pueden influir en la vida sexual de una persona. Sorprendentemente, se estima que hasta un 30% de los hombres pueden enfrentar dificultades en este aspecto. Los factores como la diabetes, la hipertensión o incluso el estrés pueden contribuir a esta situación. Además, algunas personas buscan alivio en medicamentos, lo que ha llevado a un aumento en las búsquedas de términos como  » en internet. Es crucial entender que, aunque algunos tratamientos están disponibles, siempre es recomendable consultar a un profesional de la salud para encontrar la solución más adecuada. La comunicación abierta y el apoyo emocional también juegan un papel fundamental en el manejo de esta condición.

Uno de los factores que puede contribuir a la disfunción eréctil es el estrés, que a menudo afecta la salud sexual de los hombres. Si bien hay tratamientos disponibles, algunos pueden buscar alternativas para aliviar sus síntomas, como el uso de medicamentos. Por ejemplo, algunos hombres han considerado opciones como  » para manejar la ansiedad que puede interferir con su rendimiento sexual.

La disfunción eréctil es un problema más común de lo que muchos piensan, afectando a millones de hombres en todo el mundo. Un hecho interesante es que factores como el estrés, la ansiedad y problemas de salud como la diabetes pueden contribuir significativamente a su aparición. Además, se ha encontrado que ciertos medicamentos pueden ayudar en el tratamiento, y algunos hombres consideran opciones como la posibilidad de “ para abordar sus síntomas. Es fundamental buscar soluciones adecuadas y hablar abiertamente con un profesional de la salud sobre el tema. La comunicación y el tratamiento adecuado pueden hacer una gran diferencia en la calidad de vida de las personas afectadas.

Le manuel de référence complet des fonctions est disponible ici : http://www.php.net/manual/fr/funcref.php

Nous en détaillerons seulement quelques unes.

Fonctions mathématiques

Le manuel de référence des fonctions mathématiques est disponible ici : http://www.php.net/manual/fr/ref.math.php

Voici leur description générale :

  • abs — Valeur absolue
  • acos — Arc cosinus
  • acosh — Arc cosinus hyperbolique
  • asin — Arc sinus
  • asinh — Arc sinus hyperbolique
  • atan2 — Arc tangent de deux variables
  • atan — Arc tangente
  • atanh — Arc tangeant hyperbolique
  • base_convert — Convertit un nombre entre des bases arbitraires
  • bindec — Convertit de binaire en décimal
  • ceil — Arrondit au nombre supérieur
  • cos — Cosinus
  • cosh — Cosinus hyperbolic
  • decbin — Convertit de décimal en binaire
  • dechex — Convertit de décimal en hexadécimal
  • decoct — Convertit de décimal en octal
  • deg2rad — Convertit un nombre de degrés en radians
  • exp — Calcul l’exponentielle
  • expm1 — Retourne le résultat de exp(number) – 1, calculé de manière précise, même si la valeur est proche de 0
  • floor — Arrondit à l’entier inférieur
  • fmod — Retourne le reste de la division
  • getrandmax — Plus grande valeur aléatoire possible
  • hexdec — Convertit de hexadécimal en décimal
  • hypot — Calcul la longueur de l’hypoténuse d’un triangle à angle droit
  • is_finite — Indique si un nombre est fini
  • is_infinite — Indique si un nombre est infini
  • is_nan — Indique si une valeur n’est pas un nombre
  • lcg_value — Générateur de congruence combinée linéaire
  • log10 — Logarithme en base 10
  • log1p — Retourne le résultat de log(1 + number), calculé de manière précise, même si val est proche de zéro
  • log — Logarithme naturel (népérien)
  • max — La plus grande valeur
  • min — La plus petite valeur
  • mt_getrandmax — La plus grande valeur aléatoire possible
  • mt_rand — Génère une meilleure valeur aléatoire
  • mt_srand — Initialise une meilleure valeur aléatoire
  • octdec — Conversion d’octal en décimal
  • pi — Retourne la valeur de pi
  • pow — Expression exponentielle
  • rad2deg — Conversion de radians en degrés
  • rand — Génère une valeur aléatoire
  • round — Arrondi un nombre à virgule flottante
  • sin — Sinus
  • sinh — Sinyus hyperbolique
  • sqrt — Racine carrée
  • srand — Initialise le générateur de nombres aléatoires
  • tan — Tangente
  • tanh — Tangente hyperbolique

// soit un triangle abc
// pithagore nous rappelle que…
$c = sqrt ( pow($a,2) + pow($b,2) );

Fonctions de traitement de chaines de caractères

Le manuel de référence de ces fonctions est disponible ici :
http://www.php.net/manual/fr/ref.strings.php
Voici leur description :

  • addcslashes — Ajoute des slash dans une chaîne, à la mode du langage C
  • addslashes — Ajoute des anti-slash dans une chaîne
  • bin2hex — Convertit des données binaires en représentation hexadécimale
  • chop — Alias de rtrim
  • chr — Retourne un caractère spécifique
  • chunk_split — Scinde une chaîne
  • convert_cyr_string — Convertit une chaîne d’un jeu de caractères cyrillique à l’autre
  • convert_uudecode — Décode une chaîne au format uuencode
  • convert_uuencode — Encode une chaîne de caractères en utilisant l’algorithme uuencode
  • count_chars — Retourne des statistiques sur les caractères utilisés dans une chaîne
  • crc32 — Calcule la somme de contrôle CRC32
  • crypt — Chiffrage indéchiffrable (hashing)
  • echo — Affiche une chaîne de caractères
  • explode — Coupe une chaîne en segments
  • fprintf — Ecrit une chaîne formatée dans un flux
  • get_html_translation_table — Retourne la table de traduction des entités utilisée par htmlspecialchars et htmlentities
  • hebrev — Convertit un texte logique hébreux en texte visuel
  • hebrevc — Convertit un texte logique hébreux en texte visuel, avec retours à la ligne
  • html_entity_decode — Convertit toutes les entités HTML en caractères normaux
  • htmlentities — Convertit tous les caractères éligibles en entités HTML
  • htmlspecialchars_decode — Convertit les entités HTML spéciales en caractères
  • htmlspecialchars — Convertit les caractères spéciaux en entités HTML
  • implode — Rassemble les éléments d’un tableau en une chaîne
  • join — Alias de implode
  • levenshtein — Calcule la distance Levenshtein entre deux chaînes
  • localeconv — Lit la configuration locale
  • ltrim — Supprime les espaces (ou d’autres caractères) de début de chaîne
  • md5_file — Calcule le md5 d’un fichier
  • md5 — Calcule le md5 d’une chaîne
  • metaphone — Calcule la clé metaphone
  • money_format — Met un nombre au format monétaire
  • nl_langinfo — Rassemble des informations sur la langue et la configuration locale
  • nl2br — Insère un retour à la ligne HTML à chaque nouvelle ligne
  • number_format — Formate un nombre pour l’affichage
  • ord — Retourne le code ASCII d’un caractère
  • parse_str — Analyse une requête HTTP
  • print — Affiche une chaîne de caractères
  • printf — Affiche une chaîne de caractères formatée
  • quoted_printable_decode — Convertit une chaîne quoted-printable en chaîne 8 bits
  • quotemeta — Echappe les méta-caractères
  • rtrim — Supprime les espaces (ou d’autres caractères) de fin de chaîne
  • setlocale — Modifie les informations de localisation
  • sha1_file — Calcule le sha1 d’un fichier
  • sha1 — Calcule le sha1 d’une chaîne de caractères
  • similar_text — Calcule la similarité de deux chaînes
  • soundex — Calcule la clé soundex
  • sprintf — Retourne une chaîne formatée
  • sscanf — Analyse une chaîne à l’aide d’un format
  • str_getcsv — Analyse une chaîne de caractères CSV dans un tableau
  • str_ireplace — Version insensible à la casse de str_replace
  • str_pad — Complète une chaîne jusqu’à une taille donnée
  • str_repeat — Répète une chaîne
  • str_replace — Remplace toutes les occurrences dans une chaîne
  • str_rot13 — Effectue une transformation ROT13
  • str_shuffle — Mélange les caractères d’une chaîne de caractères
  • str_split — Convertit une chaîne de caractères en tableau
  • str_word_count — Compte le nombre de mots utilisés dans une chaîne
  • strcasecmp — Comparaison insensible à la casse de chaînes binaires
  • strchr — Alias de strstr
  • strcmp — Comparaison binaire de chaînes
  • strcoll — Comparaison de chaînes localisées
  • strcspn — Trouve un segment de chaîne ne contenant pas certains caractères
  • strip_tags — Supprime les balises HTML et PHP d’une chaîne
  • stripcslashes — Décode une chaîne encodée avec addcslashes
  • stripos — Recherche la première occurrence dans une chaîne, sans tenir compte de la casse
  • stripslashes — Supprime les anti-slash d’une chaîne
  • stristr — Version insensible à la casse de strstr
  • strlen — Calcule la taille d’une chaîne
  • strnatcasecmp — Comparaison de chaînes avec l’algorithme d' »ordre naturel » (insensible à la casse)
  • strnatcmp — Comparaison de chaînes avec l’algorithme d' »ordre naturel »
  • strncasecmp — Compare en binaire des chaînes de caractères
  • strncmp — Comparaison binaire des n premiers caractères
  • strpbrk — Recherche une chaîne de caractères dans un ensemble de caractères
  • strpos — Trouve la position d’un caractère dans une chaîne
  • strrchr — Trouve la dernière occurrence d’un caractère dans une chaîne
  • strrev — Inverse une chaîne
  • strripos — Trouve la position de la dernière occurrence d’une chaîne dans une autre de façon insensible à la casse
  • strrpos — Trouve la position de la dernière occurrence d’un caractère dans une chaîne
  • strspn — Trouve le premier segment de chaîne
  • strstr — Trouve la première occurrence dans une chaîne
  • strtok — Coupe une chaîne en segments
  • strtolower — Renvoie une chaîne en minuscules
  • strtoupper — Renvoie une chaîne en majuscules
  • strtr — Remplace des caractères dans une chaîne
  • substr_compare — Compare deux chaînes depuis un offset jusqu’à une longueur en caractères
  • substr_count — Compte le nombre d’occurrences de segments dans une chaîne
  • substr_replace — Remplace un segment dans une chaîne
  • substr — Retourne un segment de chaîne
  • trim — Supprime les espaces (ou d’autres caractères) en début et fin de chaîne
  • ucfirst — Met le premier caractère en majuscule
  • ucwords — Met en majuscule la première lettre de tous les mots
  • vfprintf — Ecrit une chaîne formatée dans un flux
  • vprintf — Affiche une chaîne formatée
  • vsprintf — Retourne une chaîne formatée
  • wordwrap — Effectue la césure d’une chaîne

Fonctions de gestion des dates et heures

La doc complète est disponible ici :
http://www.php.net/manual/fr/ref.datetime.php

Voir pour terminer, un exercice : fonction chaine et numérique…

Conditionnelles et boucles

Pour rompre le déroulement séquentiel d’un programme PHP (toutes les instructions sont normalement exécutées dans l’ordre les unes derrière les autres) on peut utiliser des conditionnelles (certaines instruction ne seront éxécutées que dans certains cas) ou des répétitives…

Conditionnelle IF …ELSE

Les différentes syntaxes possibles sont :

// if simple, sans alternative ‘else’, avec une seule instruction condtionnelle
if ( condition )
instruction;

ou si on a plusieurs instructions, on utilise un ‘bloc’ d’instructions entre accolades :

if ( condition )
{ // debut d’un bloc d’instructions
instruction1;
instruction2;

}

ou avec une alternative ‘else’ (sinon) , quand la condition n’est pas vérifiée

if ( condition ) {
bloc d’instructions ;}
else {
bloc d’instructions ;}

Si condition est vérifiée, la première instruction est exécutée ; dans le cas contraire, c’est la seconde instruction qui est exécutée.

Note : ces 2 cas sont exclusifs l’un de l’autre…

Les boucles

Elles permettent d’effectuer plusieurs fois de suite une série d’instructions. Trois types de boucles sont disponibles en PHP: while, do…while et for.

La boucle while
est utilisée quand on ne connait pas le nombre d’itérations à faire.

Pour éviter une boucle infinie , attention de ne pas oublier la condition de fin !!

La syntaxe est la suivante :

while (condition vraie)
{ bloc d’instructions; }

exemple simple :

$i=1;
while ($i <> $n){
echo « $i<br> »;
$i++;
};

Cet exemple affiche les chiffres de 1 à $n, on sort de la boucle dès que $i = $n…

La boucle do…while
fonctionne de la même manière que while, à la différence que la condition est testée après le bloc d’instructions. Le bloc d’instruction est toujours exécuté au moins une fois alors qu’un ‘while’ simple peut ne jamais être exécuté…

La syntaxe est la suivante:

do{
bloc instructions;
} while (Condition);

Les boucles for
répètent un bloc d’instructions, un nombre prédéfini de fois (connu à l’avance)

for (valeur_initiale; condition de répétition; évolution du compteur)
{ bloc d’instructions; }

Voici un exemple simple de boucle éxécutée 10 fois qui affiche le compteur de boucle…

for($i=1;$i<=10;$i++){
echo « $i<br> »;
};

La boucle foreach
permet de parcourir très facilement des tableaux quelquesoit leur taille et sans avoir à gérer leurs indices explicitement… La syntaxe est la suivante :

// on parcourt le tableau complètement
// et chaque valeur de cellule est rangée dans la variable $valeur…
foreach ($tableau as $valeur){
instruction;
};

voici un exemple simple

// afficher toutes les valeurs du tableau $_POST
foreach ($_POST as $valeur){
print (« le champ vaut $valeur »);
};

rupture de séquence avec break et continue
L’instruction ‘break’ permet de sortir d’une boucle à un instant donné, en fonction d’une certaine condition.
L’instruction ‘continue’ permet de ne pas exécuter le code contenu dans la boucle et de passer à l’itération suivante.
Voici un exemple :

<?php
$i = 0;
$arr = array(‘un’, ‘deux’, ‘trois’, ‘quatre’, ‘stop’, ‘cinq’, ‘six’);
while ($i <=5) {
$val = $arr[$i++];
if ($val == ‘stop’) {
break; }
echo « $val<br />\n »;
}

Exercice PHP – fonctions chaines et numériques

Ecrire un programme PHP qui transforme une chaine de caractères, pour passer son 1er caractère en majuscule et tout le reste en minuscule.

exemple : ‘coucou ROUCOUcou Paloma ‘ donnera ‘Coucou roucoucou paloma’

On utilisera les fonctions prédéfinies de traitement de chaines ‘str…’ notamment, et l’opérateur de concaténation ‘.’

Les tableaux

Un tableau est un type de variable structuré, composé de cases successives ordonnées contenant des valeurs.
Chaque case particulière est repérée par un index, encore appelé indice.

Il existe 2 types de tableaux en PHP :

  • les tableaux scalaires, indexés par des numérique
  • les tableaux associatifs, indexés par un nom

On accède à un élément d’un tableau grace à l’opérateur ‘[]’.
et l’index de l’élément recherché.

$tableau[1];
$tableau [« mercredi »];

Note : la première case d’un tableau porte l’index numérique 0 …et non pas 1

Remplir et lire un tableau avec l’opérateur []

On peut donc utiliser l’opérateur crochet, pour le remplir case par case…

// en utilisant des indices numériques
$passe_temps[0] = « Tennis »
$passe_temps[1] = « Planche à voile »;
$passe_temps[2] = « Snowboard »;

// ou implicitement, de manière séquentielle
$passe_temps[] = « Tennis »
$passe_temps[] = « Planche à voile »;
$passe_temps[] = « Snowboard »;

// et avec des indices non numérique
// (tableau associatif…
$couleur[« rouge »] = « #FF0000 »;
$couleur[« vert »] = « #00FF00 »;

$couleur[« bleu »] = « #0000FF »;

Pour afficher le contenu d’un tableau, on utilise également l’opérateur ‘[]’.
Pour le lire en totalité on pourra faire ine boucle ‘for’ ou utiliser des fonctions prédéfinies de PHP…

print (« code du bleu = « .$couleur[« bleu »]);
for ($i=0; $i<3; $i++)
{
print ($passe_temps[i] . »<br> »);
}

Création d’un tableau avec Array()

Le constructeur array() crée un tableau et le remplit avec les paramètres passés …
remarque: array() n’est pas une fonction au sens strict du terme.

On peut utiliser un opérateur spécial,’=>’ pour définir en même temps les index et leurs valeurs, en notant ainsi « index => valeur »

// un tableau de chiffres
// avec des index numériques implicites commencant à 0
$tab_chiffres = array (1, 2, 3, 4, 5, 6);
// un tableau associatif de chaines de caractères
$tab_fruits  = array (« a »=> »orange », « b »=> »banane », « c »=> »pomme »);

La fonction print_r(nom_variable_tableau) permet d’afficher automatiquement tous les éléments d’un tableau.
On ne peut pas personnaliser l’affichage, mais cette fonction est très pratique pour faire des tests, ou du déboggage.

On peut mélanger les index implicites avec des clés / index explicites, comme ici

<?php
$tab = array( 1, 1, 1, 1, 1, 8=>1,  4=>1, 19, 3=>13);
print_r($array);
?>

Cela nous donne :

Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 13
[4] => 1
[8] => 1
[9] => 19
)

Fonctions spéciales d’accès à un tableau (foreach, prev, next …et les autres)

Il existe une fonction ‘foreach’ spécialisée dans la lecture de tableaux, simple et rapide.
Elle s’utilise de la sorte :

<?php
// lire les valeurs
foreach($tableau as $valeur)
{
echo « $valeur<br /> »;
}
// l’indice ET les valeurs
foreach($tableau as $ind => $val)
{
echo « $ind : $val<br /> »;
}
?>

On peut aussi dans certains cas avoir besoin d’accéder séquentiellement à un tableau, ou faire des accès relatifs de type ‘suivant’ / ‘précédent’ comme on le ferait dans un fichier. On utilisera pour cefaire quelques fonctions spéciales :

reset() : remet le pointeur de tableau au début
pos() : renvoit la valeur de l’élément courant
key() : renvoit l’indice de l’élément courant
next() : avance le pointeur
prev() : recule le pointeur
end() : met le pointeur en fin de tableau.

PHP et Formulaires

Pour récupérer des données de formulaires en PHP on utilisera des variables globales de type tableau, prédéfinies, indexées par le nom des objets du formulaires.
Ainsi, si le nom d’un champ texte du formulaire est ‘patronyme’ on récuperera sa valeur en PHP par nom_var_globale[‘patronyme’]

Il existe 3  variables pour récupérer ces données :

  • $_POST[] , si la méthode d’appel est ‘post’
  • $_GET[] , si la méthode d’appel est ‘get’
  • $_REQUEST , dans les 2 cas (et contient également les infos de $_COOKIE)

Récupération de paramètres simples d’un formulaire en PHP

coté HTML, un formulaire avec champs texte (text fields)

<html>
<body>
<form method= »POST » action= »recup1.php » name= »form1″>
Nom : <input type= »text » name= »nom » ></br>
prenom : <input type= »text » name= »prenom » >
<input type= »submit » value= »Envoi »>
</form>
</body>
</html>

coté PHP on utilise le tableau associatif superglobal $_POST

<?php
//recup1.php
$nom = $_POST[‘nom’];
$prenom = $_POST[‘prenom’];
print « nom : $nom </br> »;
print « prénom : $prénom »;
?>

Liste déroulante avec un seul choix

Comme dans le cas précédent la variable est une variable simple (scalaire).
On utilisera donc la même méthode.
Notez que les valeurs retournées par le formulaire peuvent être différentes des valeurs affichées dans la liste…

remarque : si on ne choisit aucune valeur dans la list, c’est la valeur affichée qui est retournée.

Voici un exemple de formulaire

<html>
<body>

<form name= »form0″ action= »form0.php » method= »post » >
<select name= »voitures » >
<option value= »vw »>Volkswagen</option>
<option value= »pijo »>Peugeot</option>
<option value= »audi »>Audi</option>
</select>
<input type= »submit »>
</form>
</body>
</html>

et le code PHP pour récuperer la valeur choisie :

<?php
$voiture = $_POST[‘voitures’];
print (« valeur : $voiture »);
?>

Récupération de variables composées multiples (cases à cocher et listes déroulantes)

Dans ces cas, nous pouvons avoir plusieurs valeur à récupérer. La variable utilisée dans le formulaire sera un tableau (notation avec []) et dans le programme PHP, on fera une boucle pour lire les valeurs renseignées dans le tableau résultat.

<html>
<body>
<form method= »POST » action= »recup2.php » name= »form1″>
Cochez un Pays…</br>
France <input type= »checkbox » name= »pays[] » value= »fr »></br>
Angleterre <input type= »checkbox » name= »pays[] » value= »gb »></br>
Costa rica <input type= »checkbox » name= »pays[] » value= »cr »></br>
et selectionnez un aeroport…<BR>
<select name= »aeroport[] » size= »4″ multiple>
<option value= »CDG »>Paris</option>
<option value= »LON »>Londres</option>
<option value= »SJO »>San Jose</option>
</select>
<br>
<input type= »submit » value= »Envoi »>
</form>
</body>
</html>

et coté PHP

<?php
// recup2.php
$t_pays = $_POST[‘pays’];
$t_aeroport= $_POST[‘aeroport’];
foreach ($t_pays as $pays) {
print (« pays : $pays »);
}
foreach ($t_aeroport as $aeroport) {
print (« Airport : $aeroport\n »);
}
?>

remarque : si aucune case n’est cochée ou aucun choix fait dans la liste, on aura une erreur d’exécution, du type ‘argument invalide pour la fonction foreach’. Ceci est du au fait que le tableau dans ce cas n’est pas renseigné et a une valeur indéfinie. Pour éviter ce désagrément, on pourra tester si l’utilisateur a bien fait un choix et le solliciter le cas échéant. On utilisera par exemple la fonction ‘isset’ qui est vraie lorsqu’une variable (simple ou composée) est renseignée !

<?php
if( isset($_POST[‘pays’])) {
$tab_pays= $_POST[‘pays’];
foreach($tab_pays as $valeur){
print (« valeur : $valeur <br> »);
}
}
else print (« Vous devez choisir au moins une valeur !! »);
?>

Les fichiers

La liste exhaustive des fonctions de gestion de fichier de PHP est décrite sommairement ci-après :

  • basename — Sépare le nom du fichier et le nom du dossier
  • chgrp — Change le groupe propriétaire d’un fichier
  • chmod — Change le mode du fichier
  • chown — Change le groupe propriétaire du fichier
  • clearstatcache — Efface le cache de stat
  • copy — Copie un fichier
  • delete — Effacer
  • dirname — Renvoie le nom du dossier
  • disk_free_space — Renvoie l’espace disque disponible dans le répertoire
  • disk_total_space — Retourne la taille d’un dossier
  • diskfreespace — Alias de disk_free_space
  • fclose — Ferme un fichier
  • feof — Teste la fin du fichier
  • fflush — Envoie tout le contenu généré dans un fichier
  • fgetc — Lit un caractère dans un fichier
  • fgetcsv — Renvoie la ligne courante et cherche les champs CSV
  • fgets — Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier
  • fgetss — Renvoie la ligne courante du fichier et élimine les balises HTML
  • file_exists — Vérifie si un fichier existe
  • file_get_contents — Lit tout un fichier dans une chaîne
  • file_put_contents — Ecrit une chaîne dans un fichier
  • file — Lit le fichier et renvoie le résultat dans un tableau
  • fileatime — Renvoie la date à laquelle le fichier a été accédé pour la dernière fois
  • filectime — Renvoie la date de dernier accès à un inode
  • filegroup — Lire le nom du groupe
  • fileinode — Renvoie le numéro d’inode du fichier
  • filemtime — Renvoie la date de dernière modification du fichier
  • fileowner — Renvoie le nom du propriétaire du fichier
  • fileperms — Renvoie les permissions affectées à un fichier
  • filesize — Renvoie la taille d’un fichier
  • filetype — Retourne le type de fichier
  • flock — Verrouille le fichier
  • fnmatch — Repère un fichier à partir d’un masque
  • fopen — Ouverture d’un fichier ou d’une URL
  • fpassthru — Affiche le reste du fichier
  • fputcsv — Formate une ligne en CSV et l’écrit dans un fichier
  • fputs — Alias de fwrite
  • fread — Lecture du fichier en mode binaire
  • fscanf — Analyse un fichier en fonction d’un format
  • fseek — Modifie la position du pointeur de fichier
  • fstat — Lit les informations sur un fichier à partir d’un pointeur de fichier
  • ftell — Renvoie la position du pointeur du fichier
  • ftruncate — Tronque un fichier
  • fwrite — Ecrit un fichier en mode binaire
  • glob — Recherche des chemins qui vérifient un masque
  • is_dir — Indique si le fichier est un dossier
  • is_executable — Indique si le fichier est exécutable
  • is_file — Indique si le fichier est un véritable fichier
  • is_link — Indique si le fichier est un lien symbolique
  • is_readable — Indique si un fichier est autorisé en lecture
  • is_uploaded_file — Indique si le fichier a été téléchargé par HTTP POST
  • is_writable — Indique si un fichier est autorisé en écriture
  • is_writeable — Alias de is_writable
  • lchgrp — Change l’appartenance du groupe d’un lien symbolique
  • lchown — Change l’appartenance du propriétaire d’un lien symbolique
  • link — Crée un lien
  • linkinfo — Renvoie les informations d’un lien
  • lstat — Retourne les informations sur n fichier ou un lien symbolique
  • mkdir — Crée un dossier
  • move_uploaded_file — Déplace un fichier téléchargé
  • parse_ini_file — Traite un fichier de configuration
  • pathinfo — Retourne des informations sur un chemin système
  • pclose — Ferme un processus de pointeur de fichier
  • popen — Crée un processus de pointeur de fichier
  • readfile — Affiche un fichier
  • readlink — Renvoie le nom du fichier vers lequel pointe un lien symbolique
  • realpath — Retourne le chemin canonique absolu
  • rename — Renomme un fichier ou un dossier
  • rewind — Replace le pointeur de fichier au début
  • rmdir — Efface un dossier
  • set_file_buffer — Alias de stream_set_write_buffer
  • stat — Renvoie les informations à propos d’un fichier
  • symlink — Crée un lien symbolique
  • tempnam — Crée un fichier avec un nom unique
  • tmpfile — Crée un fichier temporaire
  • touch — Modifie la date de modification et de dernier accès d’un fichier
  • umask — Change le « umask » courant
  • unlink — Efface un fichier

Ouvrir un fichier

Avant de pouvoir travailler avec un fichier on va déclarer une ressource (un handler) qui pointe sur un fichier local ou distant. Ceci se fait avec la fonction fopen().

Il existe différents modes d’ouverture, voici les principaux :

mode Description
‘r’ Ouvre en lecture seule, et place le pointeur de fichier au début
du fichier.
‘r+’ Ouvre en lecture et écriture, et place le pointeur de fichier au
début du fichier.
‘w’ Ouvre en écriture seule ; place le pointeur de fichier au début
du fichier et réduit la taille du fichier à 0. Si le fichier
n’existe pas, on tente de le créer.
‘w+’ Ouvre en lecture et écriture ; place le pointeur de fichier au
début du fichier et réduit la taille du fichier à 0.
Si le fichier n’existe pas, on tente de le créer.
‘a’ Ouvre en écriture seule ; place le pointeur de fichier à
la fin du fichier. Si le fichier n’existe pas, on tente de le créer.
‘a+’ Ouvre en lecture et écriture ; place le pointeur de fichier à
la fin du fichier. Si le fichier n’existe pas, on tente de le créer.

Exemples :

<?php
// Exemple (en lecture) sous Unix / Linux
$fic = fopen(« /home/rasmus/file.txt », « r »);
// Exemple (en écriture) sous Windows
$fic = fopen(« c:\\data\\info.txt », « w »);
// et via une URL
$fp = fopen(« http://dd.estsurinternet.com/index.php », »r »);
?>

Lecture d’un fichier existant

Lecture ligne à ligne

<?php
$fichier = « fichier.txt »;

$fp = fopen($fichier, »r »); // Ouverture du fichier en lecture
while (!feof($fp)) {
$ligne = fgets($fp,4000); // On lit la ligne
print (« $ligne <br> »; // on l’affiche
}
fclose($fp); // Fermeture du fichier
?>

Lecture caractère par caractère

<?php
if (!($fic=fopen(« dd.txt », »r »)))
exit(« ouverture Impossible !! »);
while (!feof($fic)) // tant qu’il ya des caractères à lire…
{
$car=fgetc($fic);
echo $car;
}
fclose($fic);
?>

Ecriture dans un fichier

Exemple d’écriture ligne à ligne

<?php

$fp = fopen(« fichier.txt », »a »)){ /* ouverture du fichier en écriture */
fputs($fp, « $ligne »); // on écrit la ligne dans le fichier
fputs($fp, « \n »); // on va a la ligne
fputs($fp, « $ligne2 »); // on écrit la 2eme ligne
fclose($fp);
}
?>

Fonctions utilisateur

En plus des fonctions prédéfinies de PHP, il existe des fonctions utilisateur.
Ce sont des sous programmes réutilisables définis et appelés par le programmeur.
Il existe des procédures et des fonctions : les premières ne renvoient pas de résultat, mais font simplement un traitement, les deuxièmes font un traitement et renvoient un résultat ou ‘retournent une valeur’.

Définition de fonction

Procédures et Fonctions, se définissent avec le mot réservé ‘function’ et peuvent accepter ou non des paramètres d’entrée.

Voici la syntaxe générale d’une fonction :

<?php
function f1($arg1, $arg2, …)
{
instructions;
return $valeur_retour;
}
?>

et pour une procédure …

<?php
function p1($arg_1, $arg_2, …)
{
instructions;
}
?>

Voyons un exemple concret de procédure qui calcule la somme de 2 nombres :

<?php
function calcule($a, $b)
{
// une la variable locale $resultat
$resultat = $a + $b;
// Affichage du résultat
print (« La somme de $a et $b est $resultat;
// pas de retour…
}
?>

et une fonction qui concatène 2 chaines passées en paramètre, et renvoie la valeur concaténée…

<?php
function concatene ($a, $b)
{
// une variable locale chaine
$concat = $a . $b;
// et on retourne le résultat…
return $concat;
}
?>

On se rend compte sur cet exemple qu’une fonction est implicitement typée. Elle est du type de la variable qu’elle retourne.

Appel de fonctions

On appelle (on execute) les fonctions en donnant leur nom et en leur passant (s’il y en a) des valeurs d’arguments réels.

Une procédure est appelée simplement, c’est une instruction simple :

nom_procedure(parametres);

La fonction renvoyant par définition une valeur, elle DOIT être utilisée dans une expression ou dans une fonction compatible avec son type.

Exemples de syntaxe :

$nom_var = nom_fonction(parametres);
// on imprime le résultat de la fonction
// un numérique ou une chaine suivant le type de la fonction
print ( « la fonction vaut : nom_fonction(parametres) « );

Exemple d’appel de notre fonction de concaténation :

$message = concatene(« bonjour », » mon ami »);

Exemple de code complet:

<?php
// on définit la fonction avant de l’utiliser
function concatene ($a, $b)
{
// une variable locale chaine
$concat = $a . $b;
// et on retourne le résultat…
return $concat;
}

// et maintenant on l’appelle avec des valeurs réelles
$c1 = « Bonjour, « ;
$c2 = « mon ami ! »;
print (« La concaténation est : « .concatene($c1,$c2));
?>

Note : une fonction peut ne pas avoir de paramètres ou avoir un nombre variable de paramètres.

Le manuel de référence complet des fonctions est disponible ici :
http://www.php.net/manual/fr/language.functions.php

exercice PHP – fonctions chaine et numériques

Transformation d’une chaine, avec une seule lettre capitale

Ecrivez le code PHP qui tranforme une chaine de caratère de plusieurs mots, en passant le 1er caractère en Majuscule et tout le reste en minuscules.
On utilisera pour ce faire les fonctions ‘str…’ et l’opérateur de concaténation ‘.’

Calcul de PI avec des fonctions numériques et une boucle…

PI est un nombre formidable, et est la limite de suites de nombre assez simples.
Par exemple PI/4 est limite de la somme des inverses des nombre entiers impairs (avec un signe + et – alterné sinon ce serait trop facile).

En d’autres termes

PI/4 = 1-1/3+1/5-1/7+1/9-1/11+1/13 …

Calculez pi/4…et donc Pi avec une boucle for de 100, 1000 et 10000 chiffres
Faites ensuite une boucle WHILE qui s’arrete quand on a 2 decimales de pi constantes.

corrigé fonctions chaine et numériques

Voici la transformation de chaine:

<?php
// initialisation
$ch = »bonjour LES aMis »;
// 1er caractere en majuscule
$res = strtoupper(substr($ch,0,1));
// les n-1 caracteres restant en minuscule
// et on concatene
$res .= strtolower(substr($ch,1,strlen($ch)-1));

print(« resultat ; $res »);
?>

et pour le calcul de PI :

Avec une boucle connue à l’avance cela donne :

<?php
$limite = 1000;
for ( $i=1; $i < $limite ; $i++) {
$pi_sur_4 += -(pow(-1,$i)) * 1/(2*$i-1);
// on affiche toutes les valeurs intermédiaires…
// derriere le compteur de boucle
print (« $i : « . 4*$pi_sur_4. »<br> »);
}
?>

Si l’on veut faire une boucle WHILE tant qu’on n’a pas atteint une certaine précision, on peut faire le code suivant :

<?php
$i=0;
do {
$precedent = $pi;
$i++;
$pi_sur_4 += -(pow(-1,$i)) * 1/(2*$i-1);
$pi = 4*$pi_sur_4;
print (« $i : « . $pi. »<br> »);
$differentiel = floor($pi*1000) – floor($precedent*1000);
} while ($differentiel != 0)
?>

Note : ce code n’est pas optimisé, on a rajouté volontairement des variables intermédiaires pour le rendre + lisible. On n’est pas non plus obligé de calculer PI à chaque boucle, PI/4 suffirait largement avec une multiplication par 4 unique à la fin…

corrigé fonctions utilisateur

reprenons le code utilisé dans l’exercice précédent, et définissons d’abord une fonction avec ce code.
Nous appellerons ensuite en lui passant un paramètre …

<?php

function majuscule ($ch) {
$res = strtoupper(substr($ch,0,1));
$res .= strtolower(substr($ch,1,strlen($ch)-1));
return $res;
}

$chaine = »bonjour LES aMis »;
print(majuscule($chaine));

?>

Exercice PHP : des Annuaires …

Le but de cet exercice est de réviser l’essentiel de PHP : les chaînes, les tableaux, les boucles, les fichiers, les formulaires et pour finir l’accès aux bases de données…et cela de manère très progressive.

Vous pourrez vous aider du cours et de la documentation officielle sur http://www.php.net/manual/fr
Dans tous les exercices on utilisera plus ou moins les mêmes variables pour constituer l’annuaire :

  • un nom (chaine de 25 caractères maxi
  • un prénom (chaine de 20 caractères maxi)
  • un no de téléphone fice (nombre de 10 chiffres)
  • un no de téléphone fice (nombre de 10 chiffres)
  • une adresse e-mail (chaine de 50 caractères maxi)

remarque : les tailles maximums précisées ici, ne seront pas utilisées par le PHP, mais serviront de contraintes d’intégrité dans la base de données (Ainsi cette limite sera prise en compte quelque soit le programme (PHP ou non) qui insère des données…)

1) utilisation de chaînes de caractères

Déclarez 4 variables pour les nom, prénom et no de téléphone fixe, plus une variable message.
et donnez une valeur à chacune.
Affichez ensuite le message : « Bonjour valeur_prenom valeur_nom !
puis sur la ligne suivante : « Votre téléphone est le valeur_no_tel »

Utilisez des noms de variables clairs, sans espace, sans accents.
Utilisez l’opérateur ‘.’ ou ‘.=’ pour concaténer (ajouter) les chaînes de caractères les unes aux autres et constituer le message.

2) utilisation des tableaux

Avec les mêmes variables que précédemment, déclarez en plus un tableau ‘ligne_annu’ de 3 cases, et rangez chaque valeur dans une case du tableau. Ensuite affichez le message en lisant les cases du tableau no 0, 1 et 2.

Dans un deuxième temps créez un tableau ‘annuaire’ qui contiendra des ‘ligne_annu’ (un tableau de tableaux en somme !).
Remplissez 2 ou 3 lignes avec des valeurs, puis affichez les 3 lignes avec leur prénom, nom et no de tel, en utilisant une boucle ‘for’ simple, avec un compteur allant de de 0 à 2, puis ensuite le même affichage avec une boucle ‘foreach’.

3) récupération des données à partir d’un formulaire

Ecrivez un formulaire HTML simple ‘form_annu.htm’, avec 5 champs texte à saisir : nom, prénom , nos de téléphones fixe et mobile et e-mail.
Vous pourrez utiliser un éditeur HTML pour vous simplifier la vie, comme Dreawweaver par exemple.
Attention à utiliser des noms de champs simples et à les retenir.
Ce formulaire appelera un programme PHP ‘affiche_annu.php’, avec la méthode POST (rappel : c’est l’attribut ‘ACTION=’ de la balise <FORM> du formulaure qui donne le nom du programme PHP et l’attribut ‘METHOD=POST’ qui précisera la méthode d’appel)

Ecrivez ensuite le programme PHP qui récupère les données du formulaire, les range dans un tableau et affiche les valeurs

4) récupération des données et écriture dans un fichier sur le serveur

Dans votre programme créez un fichier ‘annuaire.txt’ sur le serveur et écrivez dedans la ligne contenant les infos récupérées du formulaire. On utilisera notamment les fonctions fopen() et fputs()

5) récupération des données et insertion dans une table ‘annuaire’ de MySQL

Si elle n’existe pas créez une base de données nommée ‘TEST » , avec PHPMyAdmin par exemple.

Avec un éditeur de texte écrivez un script de création de table (ordre SQL ‘CREATE TABLE’)
Sauvegardez ce script avec le nom ‘cr_table_annu.sql’ puis exécutez le script avec un client Mysql quelconque (mysql, PHPmyAdmin ou SQLdevelopper) pour créer la table dans la base TEST.
Insérez une ligne dans la table, avec vos coordonnées grace à PHPMyAdmin.

Modifiez ensuite le programme précédent pour remplacer l’écriture dans le fichier par uen insertion d’une 2eme ligne dans la table annuaire…

Corrigés Annuaire PHP

Utilisation de chaînes de caractères

Voici un exemple de code affichant le résultat escompté :

<?php
// anuaire1.php

$nom = »Deléglise »;
$prenom = « Didier »;
$tel= « 0102030405 »;
$message = « Bonjour « . $prenom. » « .$nom. « ! <BR> »;
$message .= « Votre téléphone est le « . $tel;
print (« $message »);
?>

rem : on a utilisé l’opérateur ‘.=’ qui rajoute le contenu de la ligne à ce que contenait $message précédemment. On aurait pu n’utiliser q’ une seule occurence de la variable $message et tout concaténer sur une seule ligne, comme ceci :

$message = « Bonjour « . $prenom. » « .$nom. « ! <BR> Votre téléphone est le « . $tel;

Utilisation de tableaux

<?php
// anuaire2.php

// remplissage simple

$prenom = « Didier »;
$nom = »Deléglise »;
$tel= « 0102030405 »;

$ligne_annu[0]= $prenom;
$ligne_annu[1]= $nom;
$ligne_annu[2]= $tel;

print (« Prénom : « .$ligne_annu[0]. »<BR> »);
print (« Nom : « .$ligne_annu[1]. » <BR> »);
print (« No tel : « .$ligne_annu[2]. » <BR> »);

// déclaration explicite de tableau
// et remplissage avec indice…
// on peut donc le faire dans n’importe quel ordre

$ligne_annu = Array(1=> »Deléglise », 0=> »Didier »,2=> « 0102030405 »);
print (« Prénom : « .$ligne_annu[0]. »<BR> »);
print (« Nom : « .$ligne_annu[1]. » <BR> »);
print (« No tel : « .$ligne_annu[2]. » <BR> »);

// et la sans indice, c’est + court
// mais …l’ordre est important

$ligne_annu = Array(« Didier », « Deléglise », « 0102030405 »);
print (« Prénom : « .$ligne_annu[0]. »<BR> »);
print (« Nom : « .$ligne_annu[1]. » <BR> »);
print (« No tel : « .$ligne_annu[2]. » <BR> »);

?>

Utilisation de fichiers

<?php

// annuaire3.php

// recup des donnéesdu formulaire dans les variables
// … …
$prenom= »Didier » ; $nom= »Deleglise »; $tel= »0102030405″;

// preparation de la ligne
$ligne = $prenom. »; ».$nom. »; ».$tel;

/* ouverture du fichier en écriture */
$fp = fopen(‘annuaire.txt’,’a’);
fputs($fp, $ligne);
fclose($fp);
print (« Ecriture terminée… »);

?>