WWW - Cours Gratuit - Com CoursPhp Id1036
WWW - Cours Gratuit - Com CoursPhp Id1036
WWW - Cours Gratuit - Com CoursPhp Id1036
Campus numérique
francophone de Tunis
Formation TRANSFER
Tunis, du 14 au 18 Avril 2003
Atelier
Web dynamique
PhP + MySQL
AYARI Mejdi
[email protected]
1
Module 7 Web dynamique : PhP + MySQL
Apport de PhP :
Le langage PHP possède les mêmes fonctionnalités que les autres langages permettant
d'écrire des scripts CGI, comme par exemple:
La plus grande qualité du langage PHP est le support d'un grand nombre de bases de
données. Réaliser une page web dynamique interfaçant une base de données devient
extrêmement simple. PHP en supporte un grand nombre dont : Adabas D, dBase, Empress,
FilePro, Informix, InterBase, mSQL, MySQL, Oracle, PostgreSQL, Solid, Sybase, Velocis,
Unix dbm.
Le langage PHP inclut par ailleurs le support des services utilisant les protocoles tels que
IMAP, SNMP, NNTP, POP3 ou encore HTTP.
Evolution de PhP :
PHP est né avec le site de Rasmus Lerdof en 1994: une page personnelle, avec son CV
qui permettait à l'origine de conserver une trace des utilisateurs. A l'époque PHP supportait
déjà des requêtes SQL et, comme cela arrive souvent sur le Web, des internautes ont
rapidement voulu leur propre copie du programme. Rasmus a donc décidé de mettre en
ligne la version 1.0 de PHP (Personal Home Page). A la surprise de son auteur, PHP est
devenu rapidement très populaire. Conséquence : une multitude de suggestions ont atterri
dans sa boîte aux lettres. Certes, PHP 1.0 pouvait contrôler la saisie des utilisateurs et
remplacer certaines commandes HTML. Mais les utilisateurs commençaient à se
demander si PHP n'était pas capable de mieux faire : boucles, structures conditionnelles,
etc. A l'instar de tous les autres langages de programmation modernes, la seconde étape
logique de l'évolution de PHP consistait effectivement à adopter des fonctionnalités plus
puissantes. Rasmus étudia donc la structure des autres langages, il se documenta à propos
de YACC et de Bison GNU pour mettre au point la version 2.0.
2
Module 7 Web dynamique : PhP + MySQL
A partir de cette version 2 (appelé PHP/FI), PHP a représenté un outil crédible pour le
développement Web, et plusieurs sites commerciaux n'ont pas hésité à l'adopter. En 1996,
Clear INK mit en ligne SuperCuts et utilisa PHP pour créer un système de navigation
personnalisé. En janvier 1999, plus de 100 000 sites avaient adopté le langage PHP.
Après six mois de développement, la version 3.0 de PHP sortit le 6 juin 1998. PHP3 est la
troisième version de l'interprêteur de ce langage.
Actuellement, PhP est dans sa 4ème version.
· Le moteur Zend.
Ce moteur (qui se charge du scripting du PHP) comporte de nouveaux mécanismes :
- Compteur d’accès.
- Extensibilité.
· Le support des sessions HTTP.
Le support natif des sessions HTTP était l’une des fonctionnalités plus demandées pour la
sortie de la version 4.0 de PHP. Dans la version 3.0, ces sessions étaient gérer à travers la
PHPlib.
Les informations de configuration du fichier php.ini peuvent maintenant être chargées via les
fichiers de configuration Apache (pour les serveurs Apache) ou la base de registre (pour
Windows 32 bits).
Syntaxe :
La syntaxe du PhP est très proche de celle du langage C. Une instruction est terminée par
un point-virgule en fin de ligne.
on prendra soin d’insérer des commentaires, ce qui augmente la lisibilité. Il faut penser que
dans un script PHP on peut trouver pêle-mêle du HTML, du script PHP ainsi que du
JavaScript. On a donc tout interêt à se soucier de la lisibilité du code.
Il y a quatre méthodes pour insérer un script PhP dans une page Html :
3
Module 7 Web dynamique : PhP + MySQL
Le serveur http comprend, dès la rencontre d’un de ces caractères d’échappement, qu’il doit
commencer à traiter le code comme un script PHP.
Il exécute le code PhP et envoie la sortie du script (ici générée par echo) vers la navigateur
comme une partie du document.
Lorsqu’il a atteint la balise de fin du script PhP (par exemple ?>) le serveur Web revient en
mode Html, et poursuit l’envoi du contenu du document au navigateur sans autre traitement
côté serveur.
4
Module 7 Web dynamique : PhP + MySQL
Constantes :
Définition d’une constante :
Une constante est une valeur qui ne change pas : Par exemple la valeur de pi (environ 3,14).
Le recours à des constantes constitue un moyen pratique pour affecter une valeur à un
identifiant, puis de faire référence à cet identifiant dans l’ensemble du programme.
Pour définir une constante, on fait appel à la fonction define().
Exemple 1 :
define( SOCIETE , Société internationale d’Import Export );
echo ( Je travaille à la société : . SOCIETE) ;
Exemple 2 :
define( NL , <BR>\n );
Le deuxième exemple consiste à définir une constante nommée NL représentant une balise
d e saut de ligne Html suivi par un caractère de saut de ligne. C’est en pratique un raccourci
de programmation, puisque la séquence <BR\ est fréquemment utilisée>.
Une constante, comme son nom le laisse entendre, n'est pas prévue pour être
modifiée. La première définition sera celle qui servira à initialiser la constante. Les
suivantes seront sans effet.
Exemple :
<?php
define ("ZOPE", "Z Object Publishing Environment");
define ("ZOPE", "Z Object");
echo ZOPE;
// retournera toujours "Z Object Publishing Environment"
?>
Constantes prédéfinies :
PhP possède plusieurs constantes prédéfinies. Parmi ces constantes on peut citer :
• TRUE = 1
• FAUX = 0 ou chaîne vide
• E_ERROR = Dénote une erreur autre qu'une "parsing error" (erreur d’analyse) qu'il n'est
pas possible de corriger.
• E_WARNING =Dénote un contexte dans lequel le PHP trouve que quelque chose ne va
pas. Mais l'exécution se poursuit tout de même. Ces alertes peuvent être récupérées par le
script lui-même. Un exemple serait une expression régulière (regexp) invalide dans la
fonction ereg().
• E_PARSE = L’analyseur a rencontré une forme syntaxique invalide dans le script.
Correction de l'erreur impossible.
5
Module 7 Web dynamique : PhP + MySQL
• E_NOTICE = Quelque chose s'est produite, qui peut être ou non une erreur. L'exécution
continue. Par exemple, le cas de guillemets doubles (") non refermés, ou bien la tentative
d'accéder à une variable qui n'est pas encore affectée.
• PHP_VERSION = La chaîne de caractères de présentation de la version du PHP qui est
actuellement utilisée. Par exemple '4.0.0'.
• PHP_OS = Nom du système d'exploitation qui est utilisé par la machine qui fait tourner le
PHP. Par exemple, 'Linux'.
Détermination de types :
La détermination de types permet de modifier explicitement le type de données d’une
variable.
Exemple :
$var = 15,6 ; //$var est un double
$var = (int) $var ; //c’est maintenant un entier (valeur 15)
$var = (double) $var ; //c’est de nouveau un double (valeur 15,0)
$var_chaine = (string)$var ; //$var_chaine est une chaîne (valeur 15 )
6
Module 7 Web dynamique : PhP + MySQL
Exemple :
if(gettype($saisie_utilisateur) == integer ) {
$age=$saisie_utilisateur ;
}
Exemple :
$var = 0;
if (empty($var)) { //retourne TRUE
print 'soit $var vaut 0, soit il n'est pas défini';
}
PHP tient compte de la casse des caractères dans les noms de variables.
Ainsi, $chaine ou $Chaine permet d'adresser deux variables bien distinctes.
Notez enfin que PHP supporte les caractères accentués dans les noms de variable.
Les tableaux :
Un tableau est composé d’un certain nombre d’éléments possédant chacune une valeur
propore ainsi qu’une clé ou indice , permettant de faire référence à cet élément.
Par défaut, l’indice du premier élément d’un tableau est zéro.
7
Module 7 Web dynamique : PhP + MySQL
Initialiser un tableau :
Il y a plusieurs façons d'insérer des éléments dans un tableau. On peut tout simplement leur affecter
une valeur, de la même façon que pour une autre variable :
Exemple :
$tableau[]="a";
$tableau[]="b";
$tableau[]= c ;
Ce code crée un tableau de trois éléments. Comme aucun indice n’a été spécifié de façon
explicite entre les crochets [] , les éléments possèdent des indices respectifs par défaut 0, 1
et 2.
Le même code aurait pu être écrit en spécifiant des indices explicites :
Exemple :
$tableau[0]="a";
$tableau[1]="b";
$tableau[2]= c ;
Ce n'est cependant pas très pratique lorsque l'on souhaite insérer plusieurs valeurs d'un
coup.
En pratique on utilisera plutôt la fonction array(). Il suffit pour cela de transmettre à array()
les valeurs devant être assignées au nouveau tableau :
Exemple :
$tableau = array( a , b , c );
On peut utiliser l’opérateur => afin de spécifier les indices particuliers des éléments d’un
tableau.
Exemple :
$tableau = array(1=>"a",
2=>"b",
3=>"c") ;
Parcourir un tableau :
On peut procéder de plusieurs manières selon que le tableau est indexé en séquence ou
que ses indices sont imprévisibles.
Tout tableau possède un pointeur interne. Ce curseur interne conserve la trace de l’élément
actuellement actif.
Exemple :
$pays[50] = fr ;
$pays[20] = de ;
$pays[10] = us ;
$pays[] = ch ;
8
Module 7 Web dynamique : PhP + MySQL
$valeur = current($pays) ;
Comme ce tableau vient d’être créé, l’élément actif est le premeir, si bien que ce code va
imprimer : L’élément 50 est égal à fr. Remarquez que fr est le premier élément du tableau,
même si de et us possèdent des indices inférieurs, car c’est le premier à avoir été affecté
au tableau.
Les deux fonctions each() et list() peuvent être utilisées conjointement afin de parcourir un
tableau, même si les indices ne sont pas séquentiels.
Exemple :
reset ($pays);
while (list ($cle, $valeur) = each ($pays)) {
echo ("L'élément $cle est égal à $valeur <br>");
}
Cela signifie : Pour chaque élément du tableau, affectez comme valeur à $cle celle de
l’indice (ou de la clé) de l’élément, et à $valeur la valeur de celui-ci.
Enfin, il existe une série de fonctions permettant de se déplacer dans un tableau :
Fonction Description
Trier un tableau :
PhP dispose de plusieurs fonctions permettant de trier un tableau.
La plupart de ces fonctions ne retournent pas de valeur mais modifient simplement le tableau
passé en paramètre.
Les fonctions sort() et rsort() permettent de trier un tableau par valeur croissante ou
décroissante. Les indices sonts changés.
Exemple :
<?
$pays = array ("us" => "Etats-Unis",
"ch" => "Suisse",
9
Module 7 Web dynamique : PhP + MySQL
sort ($pays);
Cela réorganise le tableau afin que les valeurs soient en ordre alphabétique et que les
indices reflètent également cet ordre.
On peut également trier un tableau par indice, à l'aide des fonctions ksort() et krsort(), qui
s'utilisent de la même manière que les fonctions précédentes.
Exemple :
<?
$pays = array ("e" => "Etats-Unis" ,
"d" => "Suisse",
"c" => "Canada",
"b" => "France",
"a" => "Allemagne");
ksort ($pays);
while (list ($cle, $val) = each ($pays)) {
echo "L'élément $cle est égal à; $val<BR>\n";
}
?>
Cet exemple imprime :
L’élément a est égal à Allemagne
L’élément b est égal à France
L’élément c est égal à Canada
L’élément d est égal à Suisse
L’élément e est égal à Etats-Unis
La fonction usort() est un peu plus complexe. Elle prend un tableau comme argument,
comme toutes les autres fonctions de tri, mais accepte également un second argument.
Il s’agit d’une fonction définie par l’utilisateur et indiquant à usort() comment effectuer le tri.
L’exemple ci-dessous trie le tableau selon la longueur de la chaîne contenue dans ses
éléments.
Exemple :
<?
function par_taille ($a, $b) {
$l_a = strlen ($a);
$l_b = strlen ($b);
if ($l_a == $l_b) return 0;
return ($l_a < $l_b) ? -1 : 1;
}
10
Module 7 Web dynamique : PhP + MySQL
La fonction de comparaison doit retourner un entier, qui sera inférieur, égal ou supérieur à
zéro suivant que le premier argument est considéré comme plus petit, égal ou plus grand
que le second argument. Si les deux arguments sont égaux, leur ordre est indéfini.
• trim() :
string trim (string str)
Cette fonction retire les espaces blancs de début et de fin de chaîne, et retourne la chaîne
nettoyée. Les espaces blancs sont : "\n", "\r", "\t", "\v", "\0", et " " (espace).
Exemple :
echo(trim( chaîne exemple )) ;
//imprime ‘chaîne vide’
• strlen() :
11
Module 7 Web dynamique : PhP + MySQL
Exemple :
if(strlen($userinput) >30) {
echo( La saisie ne doit pas dépasser 30 caractères );
}
• implode()
string implode (string separator, array tableau)
Retourne une chaîne constituée de tous les éléments du tableau, pris dans l'ordre,
transformés en chaîne, et séparés par séparateur.
Exemple :
• explode()
array explode (string separator, string string)
Retourne un tableau qui contient les éléments de la chaîne string, séparés par separator.
Exemple :
<?php
$chaine="Nom|Prenom|Adresse";
$champs=explode("|",$chaine);
$boucle=0;
while($boucle<sizeof($champs)){
echo$champs[$boucle];
$boucle++;
}
?>
• str_replace()
string str_replace(modèle, remplacement, chaîne)
Remplace toutes les occurrences de modèle dans chaîne par remplacement
Exemple :
<?php
$chaine="tout est rouge";
$chaine=str_replace("rouge", "bleu", $chaine);
echo $chaine;
?>
Imprime : tout est bleu
Une expression régulière est une chaîne de caractères contenant des caractères spéciaux et
des caractères standards. Il existe une grande variété de caractères spéciaux, le plus facile
est de les voir au fur et à mesure à l'aide d'exemples.
12
Module 7 Web dynamique : PhP + MySQL
Exemples :
"abc+": chaine qui contient "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)
"abc*": chaine qui contient "ab" suivie de zero ou plusieurs "c" ("ab", "abc" etc..)
"abc?": chaine qui contient "ab" suivie de zero ou un "c" ("ab" ou "abc")
"^abc+": chaine qui commence par "ab" suivie de un ou plusieurs "c" ("abc", "abcc" etc..)
Exemples :
A noter que le premier nombre de la limite ("{0,2}", et pas "{,2}") est obligatoire. Les
symboles vus précédemment ('*', '+', and '?') sont équivalents à "{0,}", "{1,}", et "{0,1}".
Exemple :
"a(bc)*": chaîne qui contient "a" suivie de zéro "bc" ou plus
Exemple :
Exemple :
• Les crochets [ ] définissent une liste de caractères autorisés (ou interdits). Le signe -
permet, quant à lui, de définir un intervalle. Le caractère ^ après le premier crochet indique
une interdiction.
Exemples :
• Pour rechercher un caractère faisant partie des caractères spéciaux, il suffit de le faire précéder d'un
antislash (un antislash doit donc être doublé), SAUF entre crochets.
13
Module 7 Web dynamique : PhP + MySQL
En effet, dans les crochets, chaque caractère représente ce qu'il est. Pour représenter un ] il faut le
mettre en premier (ou après un ^ si c'est une interdiction), un - se met en premier ou en dernier.
Exemples :
Dans les applications Internet, les expressions régulières sont particulièrement pratiques
pour valider les saisies utilisateur (Numéro de téléphone, adresse électronique,…). Bien
évidemment, cela est impossible à l’aide d’une recherche littérale : Il faut disposer d’un
moyen permettant de décrire plus librement les valeurs à identifier, et c’est justement le but
des classes de caractère dont la syntaxe est : [:classe:].
Classes de caractères
[:alnum:] caractère alphanumérique (équivalent à [A-Za-z0-9])
[:alpha:] caractère alphabétique ([A-Za-z])
[:blank:] caractère blanc (espace, tabulation)
[:ctrl:] caractère de contrôle (les premiers du code ASCII)
[:digit:] chiffre ([0-9])
[:graph:] caractère d'imprimerie
[:print:] caractère imprimable (tout sauf les caractères de contrôle)
[:punct:] caractère de ponctuation
[:space:] caractère d'espacement
[:upper:] caractère majuscule
[:xdigit:] caractère hexadécimal
Exemples :
14
Module 7 Web dynamique : PhP + MySQL
La fonction "eregi" est identique à la fonction "ereg", mais ne tient pas compte de la casse
(de la différence entre majuscules et minuscules).
Exemple :
}else{
$pat = fakir ;
$repl = FAKIR ;
Ce code imprime :
print $chaine;
?>
<?php
15
Module 7 Web dynamique : PhP + MySQL
print $chaine;
?>
$chaine = eregi_replace("</font[^>.]*>","",$chaine);
16
Module 7 Web dynamique : PhP + MySQL
Une instruction se termine habituellement par un point virgule (";"). De plus, plusieurs
instructions peuvent être regroupées en bloc, délimité par des accolades ("{}"). Un bloc est
considéré comme une instruction.
Les instructions conditionnelles (structures conditionnelles) procurent aux programmes les
capacités décisionnelles nécessaires à l’accomplissement de la plupart des tâches
informatqiues. Nous détaillons ci-dessous la syntaxe des principales structures de contrôle.
Instruction If :
Elle permet l'exécution conditionnelle d'une partie de code. Les fonctionnalités de l'instruction
if sont les mêmes en PHP qu'en C : Si la condition renvoie false, PhP permet d’exécuter un
autre bloc de code à l’aide du mot clé else.
if (condition){
expression vrai
} else {
expression faux
}
PhP dispose également du mot clé elseif : Comme l'expression else, elle permet d'exécuter
une instruction après un if dans le cas oú le "premier" if est évalué comme FALSE. Mais, à la
différence de l'expression else, il n'exécutera l'instruction que si l'expression condionnelle
elseif est évaluée à TRUE.
Une instruction if peut comporter un nombre quelconque d’instructions elseif. La branche
finale else permet alors de spécifier le code devant être exécuté si aucune des conditions
précédentes n’est remplie.
Exemple :
<? php
$a = 10; $b = 11;
print "a est égale à $a, b est égale à $b. ";
if ($ a > $b) {
print "a est plus grand que b";
} elseif ($ a == $b) {
print "a est égal à b";
} else {
print "==> a est inférieure à b.";
}
?>
17
Module 7 Web dynamique : PhP + MySQL
Boucle While :
while (condition){
//instructions
}
La signification d'une boucle while est très simple. Le PHP exécute l'instruction tant que
l'expression de la boucle while est évaluée comme TRUE. La valeur de l'expression est
vérifiée à chaque début de boucle, et, si la valeur change durant l'exécution de l'instruction,
l'exécution ne s'arrêtera qu'à la fin de l'itération (chaquefois que le PHP exécute l'instruction,
on appelle cela une itération).
Si l'expression du while est FALSE avant la première itération, l'instruction ne sera jamais
exécutée.
Pour stopper l’éxécution de façon précoce, on peut utiliser l’instruction break.
Exemple :
<?php
/* Afficher tous les nombres de 1 à 10 */
$i = 1;
while ($i <= 10) {
print $i++; /* La valeur affichée est $i avant l'incrementation
(post-incrementation) */
}
?>
Comme l’instruction if, while accepte une autre syntaxe en utilisant les deux points ( :)
Exemple :
<?php
/* Afficher tous les nombres de 1 à 10 : Autrement*/
18
Module 7 Web dynamique : PhP + MySQL
$i = 1;
while ($i <= 10):
print $i;
$i++;
endwhile;
?>
La boucle ci-dessus ne va être exécutée qu'une seule fois, car lorsque l'expression est
évaluée, elle vaut FALSE (car la variable $i n'est pas plus grande que 0) et l'exécution de la
boucle s'arrête.
Boucle For :
for (expr1; expr2; expr3) {
instructions
}
Exemple :
for ($i=0 ; $i<10 ; $i++)
{
echo "$i";
}
PHP supporte aussi la syntaxe alternative suivante pour les boucles for :
for (expr1; expr2; expr3):
instructions; ...;
endfor;
Exemple :
for($i=0 ; $i<10 ; $i++) :
echo "$i";
endfor ;
19
Module 7 Web dynamique : PhP + MySQL
switch (expression) {
case resultat1 :
# instructions à exécuter si l’expression vaut resultat1...
break ;
case resultat2 :
# instructions à exécuter si l’expression vaut resultat2...
break ;
...
default :
# instructions à exécuter en dernier recours...
}
Exemple :
Switch ($type) {
case "Femme" :
echo "Bonjour Madame" ;
break ;
case "Homme" :
echo "Bonjour Monsieur" ;
break ;
default :
echo "Bonjour, vous êtes bizarre !" ;
}
20
Module 7 Web dynamique : PhP + MySQL
Les fonctions
Une fonction est un bloc de code défini une fois, puis invoqué à partir d’autres endroits du
programme.
Une fonction peut accepter un ou plusieurs arguments, accomplit un ensemble d’opérations
prédéfinis selon ces arguments puis renvoie une valeur en résultat.
En PHP toute fonction doit être préalablement définie avant d’être utilisée.
Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous les types
de variables peuvent être renvoyés (tableaux et objets compris).
Exemple :
function carre($nombre) {
return $nombre * $nombre ;
}
echo carre(3) ; # affiche la valeur 9
Exemple :
function imprime_double($n) {
$n = $n * 2 ;
echo($n) ;
}
$a = 5 ;
echo ( $a ) ; //imprime 5
imprime_double($a) ; //imprime 10
echo($a) ; //imprime de nouveau 5
La valeur de $a n’est pas modifiée, même après avoir été transmise à imprime_double(),
puisque l’argument a été transmis comme valeur.
En revanche, si un argument est transmis par référence, toute modification apportée à la
variable paramètre modifie la variable de l’instruction d’appel.
Pour passer un argument par référence, il faut ajouter un '&' devant l'argument dans la
déclaration de la fonction.
Exemple :
function augmentation(&$salaire, $pourcent) {
//augmente $salaire de $pourcent
$salaire+=$salaire * $pourcent/100 ;
}
21
Module 7 Web dynamique : PhP + MySQL
$sal = 50000 ;
echo( Salaire avant augmentation : $sal) ; //Imprime 50000
augmntation($sal, 4) ;
echo ( Salaire après augmentation : $sal<BR>\n ) ; //Imprime 52000
Si vous souhaitez passer une variable par référence à une fonction mais de manière
ponctuelle, vous pouvez ajouter un '&' devant l'argument dans l'appel de la fonction.
Exemple :
function augmentation($salaire, $pourcent) {
//augmente $salaire de $pourcent
$salaire+=$salaire * $pourcent/100 ;
}
$sal = 50000 ;
echo( Salaire avant augmentation : $sal) ; //Imprime 50000
augmntation(&$sal, 4) ;
echo ( Salaire après augmentation : $sal<BR>\n ) ; //Imprime 52000
Pour la plupart des variables, la portée concerne la totalité d'un script PHP. Mais, lorsque
vous définissez une fonction, la portée d'une variable définie dans cette fonction est locale à
la fonction.
Exemple :
$var= a ;
function change_var() {
$var = b ;
}
change_var() ;
echo( $var ) ; //affiche a
Ce code imprime a . La variable $var à l’intérieur de la fonction possède une portée locale,
et est de ce fait différente de la variable $var externe à la fonction.
La variable extérieure à la fonction possède une portée globale, car elle peut être atteinte et
modifiée par tout fragment du code du script général, hors d’une fonction.
Deux façons existent pour accéder à une variable globale au sein d’une fonction :
– Déclarer la variable comme global au sein de la fonction,
- Utiliser le tableau associatif $GLOBALS avec comme clé le nom de la variable globale.
Exemple :
$var= a ;
function change_var() {
global $var ;
$var = b ;
}
change_var() ;
echo( $var ) ; //affiche b
22
Module 7 Web dynamique : PhP + MySQL
Le code imprime maintenant b , parce que $var fait référence à la même variable, à
l’intérieur et à l’extérieur de la fonction.
On peut également avoir rcours au tableau intégré $GLOBALS, qui contient toutes les
variables globales du script :
Exemple :
$var= a ;
function change_var() {
$GLOBALS[ var ] = b ;
}
change_var() ;
echo( $var ) ; //affiche b
Remarquez que l’opérateur $ ne figure pas avant le mot var lors de l’utilisation de ce tableau.
Variables statiques :
Une variable statique est une variable locale qui ne perd pas sa valeur à chaque fois que la
fonction est exécutée. On utilise, comme en C, l’attribut static pour déclarer une telle
variable.
Ce type de variable est très utile pour la création de fonctions récursives.
Exemple :
function compte () {
static $compteur = 0 ;
$compteur++ ;
echo "$compteur " ;
if ($compteur < 10) compte() ;
}
compte() ;
Lors du tout premeir appel de la fonction compte(), la variable statique $compteur va être
créée et se voir affecter la valeur spécifiée (ici 0), mais par la suite elle conservera sa valeur
entre chaque appel de la fonction : La variable ne sera pas réinitialisée.
23
Module 7 Web dynamique : PhP + MySQL
Le but de ce chapitre est de présenter une méthodologie de traitement des formulaires dans
le cas d’un site web dynamique.
<html>
<body>
…
< ?php
//Est-ce la première fois qu’on passe dans le script
//NON
if(NON) {
//contrôle sur la saisie
….
//Si la saisie est correcte : SAISIE VALIDE
if(SAISIE VALIDE) {
// Actions diverses
…
// Message
…
}
//SINON : Saisie INVALIDE
else{
//Actions diverses
…
//Message
..
}
}
//OUI ou saisie invalide
if(OUI ou SAISIE INVALIDE) {
?>
<form method= POST action= script.php >
…
<INPUT TYPE= HIDDEN NAME= formulaire value= ok >
</FORM>
<?
}
?>
…
</BODY>
</HTML>
24
Module 7 Web dynamique : PhP + MySQL
Exemple :
Nous allons étudier un exemple concret en commençant par définir les objectifs de notre formulaire.
Admettons que nous devions élaborer un formulaire assurant la saisie du nom, prénom et de
l’adresse e-mail d’un visiteur, afin de les stocker dans une base de données.
Deux champs seront en saisie obligatoire : nom et adresse e-mail. Et dans une certaine mesure,
nous chercherons à contrôler la validité de l’adresse e-mail saisie.
Pour finir, notre formulaire devra renvoyer un message au client afin de l’inviter à modifier sa
saisie si cette dernière est invalide, ou de l’informer que sa saisie a été prise en compte dans le
cas contraire.
<html>
<body>
<?php
if($formulaire)
{
$echec="";
if($nom=="")
$echec=$echec."- Le champ nom est obligatoire<br>";
if($email=="")
$echec=$echec."- Le champ email est obligatoire";
elseif (!ereg("^(.+)@(.+)\\.(.+)$",$email))
$echec=$echec."- Le champ email est invalide";
if($echec=="") {
//traitement a effectué dans le cas de succéè
$message="Succès.<br>Votre saisie a été prise en
comptre.<br>Merci.";
print $message;
}
else {
$message="Echec.<br>Corrigez votre saisie.<br>".$echec;
print $message;
}
}
if(!$formulaire || $echec != "") {
?>
<form method="post" action="script.php">
Nom
<input type="text" name="nom" value="<? Print $nom ?>">
<br>
25
Module 7 Web dynamique : PhP + MySQL
Prénom
<input type="text" name="prenom" value="<? Print $prenom ?>">
<br>
Adresse email
<input type="text" name="email" value="<? Print $email ?>">
<br>
<input type="submit" value="Valider">
<input type="reset" value="Effacer">
<input type="hidden" name="formulaire" value="ok">
</form>
<?php
}
?>
</body>
</html>
<html>
<body>
<?php
if($chaine)
echo "chaine : $chaine";
?>
<form method=post action="texte.php">
<input type=text name=chaine size=16 maxlength=255 value="<?php echo
htmlentities($chaine) ?>">
<br>
<input type=submit value=Valider>
</form>
</body>
</html>
<html>
<body>
<?php
if($texte)
echo "text : <br>".nl2br($texte);
?>
<form method=post action="textarea.php">
<textarea name=texte cols=20 rows=10><?php echo $texte ?></textarea>
<br>
<input type=submit value=Valider>
</form>
</body>
</html>
26
Module 7 Web dynamique : PhP + MySQL
<html>
<body>
<?php
if($choix1)
echo "Choix 1 : Oui";
else
echo "Choix 1 : Non";
echo " / ";
if($choix2)
echo "Choix 2 : Oui";
else
echo "Choix 2 : Non";
?>
<form method=post action="case.php">
<input type="checkbox" name="choix1" value="Oui" <?php if($choix1) echo
"checked" ?>>Choix 1
<br>
<input type="checkbox" name="choix2" value="Oui" <?php if($choix2) echo
"checked" ?>>Choix 2
<br>
<input type=submit name=submit value=Valider>
</form>
</body>
</html>
<html>
<body>
<?php
if($liste)
echo "Choix : $liste";
?>
27
Module 7 Web dynamique : PhP + MySQL
Attention :
Ce code n'est qu'un exemple à titre indicatif et pédagogique. Le but n'est en aucun cas de
proposer une solution optimisée, souvent fortement dépendante de la problématique réelle à
traiter.
28
Module 7 Web dynamique : PhP + MySQL
Nous détaillons dans ce chapitre l’usage du PhP avec les bases de données et plus
précisément la base MySQL.
Le langage SQL ne sera pas traité en détail dans ce chapitre. Nous abordons
essentiellement les fonctions PhP permettant d’accéder et de manipuler les bases de
données MySQL.
Exemple :
<?
if( mysql_connect( ‘localhost’ , 'moi' , 'miaou' ) > 0 )
echo 'Connexion réussie !' ;
else
echo 'Connexion impossible !' ;
?>
29
Module 7 Web dynamique : PhP + MySQL
Sélection de la base :
Les étapes sélection et requête peuvent être faites en même temps, mais il est plus simple si
vous utilisez une seule base, de la sélectionner avant de commencer vos requêtes. Ainsi,
toutes les requêtes à venir utiliseront cette base par défaut.
Exemple :
<?
if( mysql_select_db( 'ma_base' ) == True )
echo 'Sélection de la base réussie' ;
else
echo 'Sélection de la base impossible' ;
?>
Requête :
Comme pour la connexion, cette fonction retourne un identifiant qui est à "0"
lorsqu'une erreur s'est produite.
Contrairement aux autres fonctions (connexion et sélection), cet identifiant est très
important, il est utilisé pour retrouver les données rapatriées par une requête de
sélection.
Lorsque l'on fait une requête de sélection, MySQL retourne les données et PHP les
place en mémoire. L'identifiant permet donc de retrouver ces données en mémoire.
En fin de script, la mémoire est libérée et les données sont donc perdues. Il est
possible de libérer la mémoire, pour ne pas surcharger le serveur, avant la fin du
script au moyen de la commande mysql_free_result.
Exemple :
On part du principe que la base de données est déjà sélectionnée et on veut avoir
des informations sur le membre nommé "alain" :
<?
$requete = "SELECT * FROM membres WHERE nom = 'alain' ";
$resultat = mysql_query( $requete );
?>
30
Module 7 Web dynamique : PhP + MySQL
Exemple :
$req= "SELECT * from employee";
$result = mysql_db_query("database1", $req, $linkId)
31
Module 7 Web dynamique : PhP + MySQL
?>
• object mysql_fetch_object (int result, int result_typ )
Retourne un objet (structure) correspondant à la ligne extraite de l’identificateur de
résultat.
L’argument optionnel result_typ est une constante qui peut prendre les valeurs
suivantes : MYSQL_ASSOC, MYSQL_NUM, et MYSQL_BOTH.
Exemple :
<?
$enregistrement = mysql_fetch_object($result);
//Affiche le champ –prenom-
echo $enregistrement->prenom ;
//Affiche le champ –nom-
echo $enregistrement->nom;
//Affiche le champ –date-
echo $enregistrement->date ;
?>
• int mysql_num_rows (int result)
Retourne le nombre d’enregistrements qui ont été retournés par la sélection.
Exemple :
On affiche le nombre d’enregistrement et on parcourt l’ensemble des données en
les affichant au moyen d’une boucle :
<?
$requete = "SELECT * FROM membres" ;
$result = mysql_query($requete);
echo "il y a" .mysql_num_rows($result) ." membre(s)";
while($enregistrement = mysql_fetch_array($result))
{
echo $enregistrement[‘nom’]. " " . $enregistrement[‘prenom’] ;
}
?>
Requête d’insertion :
Suite à une requête d’insertion, on peut récupérer la valeur d’un champ auto
incrémenté. Ceci est faisable grâce à la fonction suivante :
• int mysql_insert_id (int link_identifier )
mysql_insert_id() retourne le dernier identifiant généré par un champs de type
AUTO_INCREMENTED.
Cette fonction ne prend aucun argument. Elle retourne le dernier identifiant généré
par la dernière fonction INSERT effectuée.
Exemple :
Requête de modification :
Lorsque l’on change les données en insérant, supprimant ou modifiant, il est possible
de connaître le nombre d’enregistrements affectés par la requête. Ceci est faisable
grâce à la fonction suivante :
32
Module 7 Web dynamique : PhP + MySQL
Exemple :
Suite à une commande "UPDATE", on voudrait savoir combien de lignes ont été
modifiées :
<?
echo mysql_affected_rows() ." eregistrement(s) modifiés";
?>
Ce cas vous montre comment utiliser MySQL et PHP, en se basant sur un exemple :
un annuaire de personnes composé :
identifiant : chaîne de caractères de 10 caractères maximum, un identifiant est unique
nom : chaîne de caractères de 100 caractères maximum
prenom : chaîne de caractères de 100 caractères maximum
age : entier
dateajout : une date
Schéma de la table :
if (!$connexion) {
echo "Impossible d'effectuer la connexion";
exit;
33
Module 7 Web dynamique : PhP + MySQL
Ensuite, vous devez sélectionner la base sur laquelle vous voulez travailler !
if (!$db) {
echo "Impossible de sélectionner cette base de données";
exit;
}
Nous allons ensuite voir comment insérer des données en rajoutant une ligne dans la table
annuaire
sfim,airey,romuald,23
Voici la commande SQL le permettant
insert into annuaire values ('sfim','airey','romuald',23,curdate());
Il suffit ensuite d'utiliser la commande mysql_query, ce qui donne :
$resultat_sql = mysql_query("insert into annuaire values
('sfim','airey','romuald',23,curdate())",$connexion);
la table contient :
sfim,airey,romuald,23,2000-01-15
orawat,rawat,olivier,24,2000-01-15
dmarc,dupuis,marc,32,2000-01-15
adupont,dupont,antoine,22,2000-01-15
Par exemple, je veux sélectionner le nom, le prénom et l'âge des personnes dans l'annuaire
de moins de 30 ans et les ranger par âge décroissant :
voici la commande SQL :
select nom,prenom,age from annuaire where age < 30 order by age desc;
De même que pour l'insertion et la suppression j'utilise la commande mysql_query
$resultat_sql = mysql_query("select nom,prenom,age from annuaire where age <
30",$connexion);
Le résultat de cette commande est retourné dans $resultat_sql, il faut l'imaginer comme une
table qui serait de cette forme
34
Module 7 Web dynamique : PhP + MySQL
<?php
// ATTENTION, pour que le script fonctionne la table doit être créée
$dbhost = "localhost";
$user = "nom";
$password = "motdepasse";
$usebdd = "nomdelabdd";
$connexion = mysql_connect("dbhost","user","password");
if (!$connexion) {
echo "Impossible d'effectuer la connexion";
exit;
}
//sélection de la BDD
35
Module 7 Web dynamique : PhP + MySQL
// nombre de lignes
$nombreligne = mysql_num_rows($resultat_sql);
echo "<table><tr><th>Nom</th><th>Prenom</th><th>Age</th></tr>";
$i = 0;
while ($i<$nombreligne)
{
$enregistrement= mysql_fetch_row($resultat_sql);
echo "$enregistrement[0] $enregistrement[1] $enregistrement[2] ";
$i++;echo "<tr><td>$nom</td><td>$prenom</td><td>$age</td></tr>";
$i++;
}
echo "</table>";
?>
36
Module 7 Web dynamique : PhP + MySQL
Pour pouvoir tester les scripts PhP, on a besoin d’installer un serveur Web (Apache dans
notre cas).
On peut installer Apache et PhP de deux façons :
Installation d’Apache :
1. Récupérer la dernière version d’Apache (Site officiel : www.apache.org, sous la
rubrique : Apache for Win32)
Une fois installé vous devez avoir une arborescence comme ceci :
Arborescence Désignation
c:/Apache Contient l’exécutable du serveur
c:/Apache/bin Contient le programme permettant
de créer des utilisateurs
c:/Apache/cgi-bin Contient vos sources cgi-bin,
exemple : le compteur, le
guestbook,..
c:/Apache/conf Contient le fichier de configuration
(httpd.conf)
c:/Apache/htdocs Contient le site web proprement dit
(les fichiers html, les images, les
fichiers destinés à être téléchargés
..)
c:/Apache/icons Contient les icônes qui seront
affichées lors des requêtes
représentant le contenu d’un
répertoire.
c:/Apache/log Contient les fichiers d’accès au
serveur – accès et erreurs.
c:/Apache/modules Contient des modules additionnels
au seveur comme Perl ou les
Servlets (Java).
c:/Apache/src Contient le programme source du
serveur.
37
Module 7 Web dynamique : PhP + MySQL
3. Une fois l'installation terminée, il faut éditer le fichier httpd.conf (qui se trouve dans
le répertoire c:/Apache/ /conf)
option peut valoir None, auquel cas aucune fonction supplémentaire n'est disponible, ou
une ou plus des possibilités suivantes :
All : toutes options sauf MultiViews.
ExecCGI : L'exécution des scripts CGI est autorisée.
FollowSymLinks : Le serveur est autorisé à suivre les liens symboliques dans ce
répertoire.
AllowOverride = Surcharge : Lorsque le serveur trouve un fichier .htaccess (comme
spécifié par AccessFileName) il doit savoir lesquelles des directives declarées dans ce
fichier peuvent outrepasser les droits fixés par des directives précédentes. Surcharge
peut être pris comme None, auquel cas le serveur ne lit pas le fichier, All auquel cas le
serveur prendra en compte toutes les directives dans ce fichier
La directive deny empêche certains hôtes nommé d'accéder à un répertoire. Elle peut
prendre les mêmes valeurs que celles de allow.
Installation de PhP4
1. Récupérer la dernière version de PhP (php-4_X_X-win32.zip), du site web :
www.php.net.
38
Module 7 Web dynamique : PhP + MySQL
Par exemple :
6. Il faut maintenant configurer Apche pour qu’il puisse supporter PhP. Editer le
fichier c:\Apache\conf\httpd.conf.
Tout d'abord il faut définir les extensions des fichiers qui seront interprétés par l'analyseur
PHP, avec la directive AddType.
39
Module 7 Web dynamique : PhP + MySQL
40
Module 7 Web dynamique : PhP + MySQL
L'interface phpMyAdmin
Présentation :
PhpMyAdmin est un ensemble de scripts PHP3 permettant de gérer des bases MySQL via
une interface accessible par n'importe quel navigateur Web. Il permet entre autres de :
Installation
Pour l'installer, il suffit de décompresser l'archive dans un répertoire de notre serveur Web
qui sera protégé par un .htaccess, de plus certains fichiers de ce répertoire auront des droits
restreints.
Ensuite vous devez éditer le fichier config.inc.php3 pour configurer votre installation de
phpMyAdmin. Nous allons configurer un seul serveur (en effet, phpMyAdmin est capable
d'administrer plusieurs serveurs MySQL), une authentification avancée (utilisateur/password)
et la langue utilisée sera le français.
Comme vous pouvez le constater, on est obligé de coder dans ce fichier le nom et le mot de
passe de l'administrateur. Nous allons protéger le fichier de configuration config.inc.php3 par
un ".htaccess" qui interdit à tout le monde d'accéder au fichier. Créez le fichier .htaccess
dans le répertoire d'installation de phpMyAdmin :
<Files config.inc.php3>
Order Deny,Allow
Deny From All
</Files>
41
Module 7 Web dynamique : PhP + MySQL
3.Ouvrir le fichier config.inc.php3 dans votre éditeur favori et modifier les valeurs de
l'hôte, de l'utilisateur, du mot de passe et de la langue pour adapter phpMyAdmin à
votre environnement :
Au début du fichier :
$cfgServers[1]['host'] = 'localhost';
$cfgServers[1]['user'] = 'utilisateur';
$cfgServers[1]['password'] = 'mot de passe';
La ligne require("english.inc.php3"); définit la langue utilisée par l'interface
de phpMyAdmin. Remplacer english par french (ou toute autre langue, à condition
que le fichier langue.inc.php3 existe).
Toutes les autres variables sont décrites dans le fichier Documentation.html fourni
avec phpMyAdmin. Une FAQ y est aussi donnée dans cette page, qui contient des
tas d'informations utiles. A lire impérativement.
4. Protéger éventuellement (recommandé) le répertoire dans lequel vous avez installé
phpMyAdmin, par exemple en utilisant un système d'authentification HTTP-AUTH (fichier
.htaccess pour Apache).
42
Module 7 Web dynamique : PhP + MySQL
/*
* phpMyAdmin Configuration File
* All directives are explained in Documentation.html
*/
$cfgServers[2]['host'] = '';
$cfgServers[2]['port'] = '';
$cfgServers[2]['adv_auth'] = false;
$cfgServers[2]['stduser'] = '';
$cfgServers[2]['stdpass'] = '';
$cfgServers[2]['user'] = '';
$cfgServers[2]['password'] = '';
$cfgServers[2]['only_db'] = '';
$cfgServers[2]['verbose'] = '';
$cfgServers[3]['host'] = '';
$cfgServers[3]['port'] = '';
$cfgServers[3]['adv_auth'] = false;
$cfgServers[3]['stduser'] = '';
$cfgServers[3]['stdpass'] = '';
$cfgServers[3]['user'] = 'root';
$cfgServers[3]['password'] = '';
$cfgServers[3]['only_db'] = '';
$cfgServers[3]['verbose'] = '';
// If you have more than one server configured, you can set $cfgServerDefault
// to any one of them to autoconnect to that server when phpMyAdmin is started,
// or set it to 0 to be given a list of servers without logging in
// If you have only one server configured, $cfgServerDefault *MUST* be
// set to that server.
$cfgServerDefault = 1; // Default server (0 = no default server)
$cfgServer = '';
unset($cfgServers[0]);
$cfgManualBase = "http://www.tcx.se/Manual_chapter";
$cfgConfirm = true;
$cfgPersistentConnections = false;
$cfgBorder = "0";
$cfgThBgcolor = "#D3DCE3";
43
Module 7 Web dynamique : PhP + MySQL
$cfgBgcolorOne = "#CCCCCC";
$cfgBgcolorTwo = "#DDDDDD";
$cfgMaxRows = 30;
$cfgMaxInputsize = "300px";
$cfgOrder = "ASC";
$cfgShowBlob = true;
$cfgShowSQL = true;
$cfgColumnTypes = array(
"TINYINT",
"SMALLINT",
"MEDIUMINT",
"INT",
"BIGINT",
"FLOAT",
"DOUBLE",
"DECIMAL",
"DATE",
"DATETIME",
"TIMESTAMP",
"TIME",
"YEAR",
"CHAR",
"VARCHAR",
"TINYBLOB",
"TINYTEXT",
"TEXT",
"BLOB",
"MEDIUMBLOB",
"MEDIUMTEXT",
"LONGBLOB",
"LONGTEXT",
"ENUM",
"SET");
$cfgFunctions = array(
"ASCII",
"CHAR",
"SOUNDEX",
"CURDATE",
"CURTIME",
"FROM_DAYS",
"FROM_UNIXTIME",
"NOW",
"PASSWORD",
"PERIOD_ADD",
"PERIOD_DIFF",
"TO_DAYS",
"USER",
"WEEKDAY",
"RAND");
$cfgAttributeTypes = array(
"",
"BINARY",
"UNSIGNED",
"UNSIGNED ZEROFILL");
?>
44
Module 7 Web dynamique : PhP + MySQL
Ressources
Documentation :
Officiel
MySQL - Une des bases données les plus utilisés dans le monde de l'Internet, de
nombreux hébergeurs l'utilisent. en plus c'est du GPL ...
http://www.mysql.com
Apache - Le serveur le plus populaire plus de 50% des serveurs dans le monde
http://www.apache.org
Php français
PHP France - Site français sur PHP documentation, tutorials chat et forums sont au
rendez vous !
http://www.phpfrance.net
PHP INFO - Site d'information sur le langage de script PHP et le serveur de bases de
données avec lequel il se marie le mieux : MySQL
http://www.phpinfo.net
PHP INDEX - Site d'information sur PHP : news, forums, articles... un site très
complet
http://www.phpindex.com
Php anglais
Weber dev - Beaucoups d'exemple PHP de trucs et astuces mais aussi du javascript,
asp, mysql ...
http://www.weberdev.com/
Autres
ALL HTML - Un site français sur tout ce qui peut toucher le Web : HTML, DHTML,
JAVASCRIPT....
http://www.allhtml.com
Outils et solutions
Editeurs :
45
Module 7 Web dynamique : PhP + MySQL
On peut citer,
Sous Windows,
- UltraEdit : http://www.ultraedit.com/downloads/index.html
- PHPEd : http://www.soysal.com/PHPEd/
- HtmlTool : http://freedani.free.fr/htmltool.php3
- EditPlus : http://www.editplus.com/
- TextPad : http://www.textpad.com/
- PHPCoder : http://www.phpide.de/
- HomeSite : http://www.allaire.com/Products/HomeSite/
- phpEdit : http://www.phpedit.com/
- CuteHTML : http://www.globalscape.com/products/cutehtml/
- DreamWeaver : http://www.macromedia.com/software/dreamweaver/
- Editpad : http://www.editpadpro.net/editpadclassic.html
- GWD : http://www.gwdsoft.com/
- PrimalSCRIPT : http://www.sapien.com/PrimalSCRIPT.htm
- Jed : http://space.mit.edu/~davis/jed.html
- VIM : http://www.vim.org/
- Emacs : http://www.gnu.org/software/emacs/
- NEdit : http://www.nedit.org/
- ConTEXT : http://www.fixedsys.com/context/
Sous Unix,
- VIM : http://www.vim.org/
- Quanta+ : http://sourceforge.net/projects/quanta/
- asWedit : http://www.advasoft.com/
- BlueFish : http://bluefish.openoffice.nl/
46
Module 7 Web dynamique : PhP + MySQL
- Jed : http://space.mit.edu/~davis/jed.html
- NEdit : http://www.nedit.org/
- BBEdit : http://www.barebones.com/products/bbedit.html
- VIM : http://www.vim.org/
Frontal SGBD
phpMyAdmin : http://phpwizard.net/projects/phpMyAdmin/index.html
phpPgAdmin : http://www.greatbridge.org/project/phppgadmin/projdisplay.php
phpOracleAdmin : http://phporacleadmin.org/
phpSybaseAdmin : http://www.itlab.musc.edu/phpSybaseAdmin/Documentation.html
IDE
KPHPDevelop : http://www.kphpdev.com/
Cache
AfterBURNER*Cache : http://bwcache.bware.it/cache.htm
phpCache : http://0x00.org/phpCache/
Optimiseur
PHPCompiler : http://www.deskcode.com/phpcompiler/
Debogueur
47
Module 7 Web dynamique : PhP + MySQL
Sessions
PHPLib : http://phplib.netuse.de/
BDSM : http://www.lazycat.org/BDSM/
dbSessions : http://www.phpheaven.net/resources/libraries/dbSessions/
sqlsession : http://ecom1.onestop.net/~joshm/sqlsession.html
Abstraction SGBD
PHPLib : http://phplib.netuse.de/
dbMysql : http://www.phpheaven.net/resources/libraries/dbMysql/
PDAC : http://www.dsnet.net/~cris/dac.html
PHP-MySQL-Lib : http://www.claws-and-paws.com/software/
Commerce
- I-Store : http://www.w3-concept.net/
- FishCartSQL : http://www.fishcart.org/
Webmail
BasiliX : http://www.basilix.org/
DragonFlyMail : http://www.dflytech.com/products/dragonflymail/
IMP : http://www.horde.org/imp/
JAWmail : http://jawmail.sourceforge.net/
kenstermail : http://sourceforge.net/projects/kenstermail/
LearnLoop : http://www.learnloop.org/
Netmania : http://www.netmania.com
MyPhPim : http://sourceforge.net/projects/myphpim/
NOCC : http://nocc.sourceforge.net/
oMail-admin : http://omail.omnis.ch
Phorecast : http://ciaweb.net/free/phorecast/
PHPwebmail : http://www.bmpsystems.com/downloads/linux/webmail-2.1.tgz
Postaci : http://www.trlinux.com/
TMail : http://www.groovin.net/tmail/
48
Module 7 Web dynamique : PhP + MySQL
vpopmail : http://www.inter7.com/vpopmail/
werkmail : http://werkmail.sourceforge.net/
Hébergement
Il faut en premier lieu distinguer les hébergeurs gratuits et les hébergeurs professionnels.
Et pour ces derniers, dissocier les offres d'hébergement en co-hosting de ceux dédiés.
Notons aussi que si certains hébergeurs proposent PHP, il n'en va pas toujours de même
pour MySQL ou tout autres SGBD. C'est en particulier le cas des
- Free : http://www.free.fr
- Forez : http://www.forez.com
- Chez : http://www.chez.com
- Multimania : http://www.multimania.com
- Online : http://www.online.fr
- Nexen : http://www.nexen.fr
- OVH : http://www.ovh.com
- Amen : http://www.amen.fr
- Claranet : http://www.claranet.fr
- Agarik : http://www.agarik.com
- Claranet : http://www.claranet.fr
Pour une recherche et une sélection plus fine, vous pouvez aussi consulter le site abc-
hébergement sur http://www.abchebergement.com/
49
Module 7 Web dynamique : PhP + MySQL
Scripts et applications
Où trouver des scripts et applications en PHP
- Zend : http://www.zend.com/apps.php
- HotScripts : http://www.hotscripts.com/PHP/
- PHPScripts : http://phpscripts.free.fr/
- Freshmeat : http://freshmeat.net/browse/183/
- PHPIndex : http://www.phpindex.com/annuaire/annuaire_total.php3?categorie=500
Forum
- W-Agora : http://w-agora.araxe.fr/
- Phorum : http://www.phorum.org/
- phpBB : http://www.phpbb.com/
-HotScripts : http://www.hotscripts.com/PHP/Scripts_and_Programs/Discussion_Boards/
-PHPScripts : http://phpscripts.free.fr/?page=scripts&cat=forums
-PHPIndex :
http://www.phpindex.com/annuaire/annuaire_partiel.php3?sous_categorie=502&categori
e=500
Chat
phpMyChat : http://www.phpheaven.net/
ChatZoneSuivante : http://www.zonesuivante.com/
phpLittleChat : http://www.gamate.com/
HotScripts : http://www.hotscripts.com/PHP/Scripts_and_Programs/Chat_Scripts/
PHPScripts : http://phpscripts.free.fr/?page=scripts&cat=chats
Vote
- SimplePoll : http://www.quake-au.net/php/
- phpAnyVote : http://www.punknews.org/code/
- phpVault : http://www.phpvault.com/
-HotScripts : http://www.hotscripts.com/PHP/Scripts_and_Programs/Polls_and_Voting/
-PHPScripts : http://phpscripts.free.fr/?page=scripts&cat=polls
50
Module 7 Web dynamique : PhP + MySQL
-PHPIndex :
http://www.phpindex.com/annuaire/annuaire_partiel.php3?sous_categorie=511&categori
e=500
Guestbook
Probook : http://www.devpros.com/
phpBook : http://www.netone.at/
phpMyGB : http://narcolepsy.dhs.org/mysoftware/
HotScripts : http://www.hotscripts.com/PHP/Scripts_and_Programs/Guestbooks/
PHPScripts : http://phpscripts.free.fr/?page=scripts&cat=livresdor
Portail
phpNuke : http://www.phpnuke.org/
Drupal : http://www.drop.org/
ThatWare : http://www.thatware.org/
HotScripts : http://www.hotscripts.com/PHP/Scripts_and_Programs/Portal_Systems/
PHPScripts : http://phpscripts.free.fr/?page=scripts&cat=portails
Livres :
PhP Professionel
Programmation en php
51
Module 7 Web dynamique : PhP + MySQL
De : Leon Atkinson
Editeur : Campus Press
Paru en : mai 2000
Nombre de pages : 540
Prix éditeur : 229 F
De : G. A. Leierer, R. Stoll
Editeur : Micro Applications
Paru en : août 2000
Nombre de pages : 470
Prix éditeur : 209 F
De : Herellier, Mérigod
Editeur : Campus Press
Paru en : décembre 1999
Nombre de pages : 326
Prix éditeur : 135 F
52