Avant toutes choses !
Descriptif
Avant de commencer à écrire vos pages en PHP, il faut d'abord connaître un minimum de choses sur ce formidable langage.
PHP (officiellement, ce sigle est un acronyme récursif pour "PHP: Hypertext Preprocessor") est un langage de scripts généraliste, Open Source, et spécialement conçu pour le développement d'applications web. Il peut être intégré facilement à vos pages HTML.
Le code PHP que vous allez insérer dans vos pages WEB sera repéré par un serveur WEB (si il est muni de l'extension PHP) qu'il l'enverra à PHP pour l'interpréter (je parle bien d'interprétation et non de compilation).
Pour information sachez que PHP est supporté par de nombreux serveurs WEB, dont le fameux projet Apache.
Grâce à ces portions de code PHP que vous allez insérer dans vos pages WEB, PHP vous permettra d'écrire rapidement des pages WEB à contenus dynamiques.
Surtout si il est couplé avec un serveur de bases de données relationnelles tel que MySQL.
Le fonctionnement
Il est à noter une différence avec les autres scripts CGI écrits dans d'autres langages tels que le Perl ou le C : au lieu d'écrire un programme avec de nombreuses lignes de commandes afin de générer une page HTML, avec PHP, vous écrivez une page HTML avec du code PHP inclus à l'intérieur afin de réaliser une action précise.
Le code PHP est inclus entre une balise de début et une balise de fin qui permettent au serveur web de passer en "mode PHP".
La connaissance du code HTML est donc vivement conseillée, voir même indispensable pour commencer ses premières pages en PHP (ceci car le PHP ne fait que générer du code HTML ; et qu'il est inconcevable de générer quelque chose que l'on ne maîtrise pas).
Il faut également savoir que lorsque vous insérez le moindre petit bout de code PHP dans une page HTML, vous devrez changer l'extension de ce fichier en .php (en clair : si vous avez une page nommée et que vous y insérez du code PHP, il vous faudra la renommer en ).
Comme nous venons de le voir, il est tout à fait possible de mélanger, au sein d'une même page WEB, des instructions HTML et des instructions PHP.
Seulement, pour que le serveur qui vous héberge puisse repérer les portions de code en PHP, il suffit simplement de lui indiquer le début ainsi que la fin du code PHP. Ces marques qui délimitent la portion de code, s'appellent des balises : - on utilisera la balise <?php pour marquer le début d'une portion de code PHP
- on utilisera la balise ?> pour marquer la fin d'une portion de code PHP
Les instructions du code PHP se placeront naturellement entre ces deux balises.
<html>
<head>
<title>Test</title>
</head>
<body>
<p>un bout de code en HTML</p>
<?php echo 'Mon premier script en PHP';
?>
</body>
</html>
Ne vous inquiétez pas pour le moment, on décrira plus tard ce que produit cette ligne de PHP.
Ce petit exemple est juste là pour vous montrer comment on insère du code PHP dans une page WEB.
Comme tout bon langage de programmation, PHP offre la possibilité de commenter son code.
Pour cela, deux techniques :
- pour commenter une seule ligne de code PHP, on précédera cette ligne de deux slashs //
- pour commenter une portion de code, on précédera la première ligne de code que l'on souhaite commenter par un /* et on fera suivre la dernière ligne de code que l'on souhaite commenter par un */
<?php
// ceci est un commentaire sur une seule ligne
/* ceci est un commentaire
sur plusieures lignes */ ?>
Ce qui distingue le PHP des langages de script comme le Javascript est que le code est exécuté sur le serveur. Si vous avez un script similaire sur votre serveur, le client ne reçoit que le résultat du script, sans aucun moyen d'avoir accès au code qui a produit ce résultat. Vous pouvez configurer votre serveur web afin qu'il analyse tous vos fichiers HTML comme des fichiers PHP.
Ainsi, il n'y a aucun moyen de distinguer les pages qui sont produites dynamiquement des pages statiques.
Le grand avantage de PHP est qu'il est extrêmement simple pour les néophytes, mais offre des fonctionnalités avancées pour les experts.
Ne craignez pas de lire la longue liste de fonctionnalités PHP. Vous pouvez vous plonger dans le code, et en quelques instants, écrire des scripts simples.
Bien que le développement de PHP soit orienté vers la programmation pour les sites web, vous pouvez en faire bien d'autres usages.
Les besoins pour bien commencer
Pour bien commencer, il vous faut deux choses essentielles :
- un éditeur de texte pour écrire vos portions de code en PHP
- un environnement de développement afin de tester ces portions de code
En ce qui concerne les éditeurs de textes, vous pourrez en trouver des dizaines sur la toile, suivant votre système d'exploitation et vos diverses exigences de fonctionnalités.
Pour vous décider, vous pouvez consulter des sites comparants des nombreux éditeurs.
Pour l'environnement de développement, si vous ne voulez pas trop vous compliquer la vie est installant Apache, PHP et MySQL à la main, je vous conseille d'utiliser des "packages" proposant des solutions pretes à l'emploi. En quelques clics, votre environnement sera installé et fonctionnel.
Voici quelques sites proposant ce genre d'environnement :
- EasyPHP (Windows)
- wampserver (Windows)
- mamp (Apple) - BigApache
Conclusion
Peu de choses à dire pour ce premier cours, si ce n'est qu'il faut bien comprendre le fonctionnement de PHP : PHP travaille du côté serveur et non du côté client.
C'est à dire que PHP va générer des pages compréhensibles par les navigateurs WEB des clients, soit de l'HTML (un navigateur WEB ne comprend pas le PHP).
A ne pas oublier :
- insertion de code PHP à l'aide des balises <?php et ?>
- écrire des commentaires sur son code PHP avec un // ou un /* */
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:27
Etudions dans un premier cours la déclaration des différents types de variables.
Pour simplifier les choses, nous allons admettre qu'une variable correspond à un espace de la mémoire où l'on peut stocker une information.
Or, afin de pouvoir récupérer cette information lorsque l'on en a besoin, nous allons attribuer un nom à notre variable (si mes prof m'entendaient parler, ils me zapperaient tous mes diplômes).
En PHP, les variables sont représentées par une chaîne de caractères, ayant toujours comme premier caractère, le caractère dollar ($).
Les variables peuvent avoir n'importe quelle lettre en deuxième caractère du moment qu'il ne s'agit pas d'un chiffre. De plus, on ne peut mettre d'espace dans le nom d'une variable.
Puis, pour assigner une valeur à une variable, on tachera d'utiliser l'opérateur =, tout en prenant soin de toujours placer la variable qui reçoit le résultat d'une opération à gauche du signe =.
Démonstration :
- Lorsque l'on désire affecter une chaîne de caractères à une variable, il faut placer cette chaîne de caractères entredeux ".
- Lorsque l'on désire affecter une valeur numérique à une variable, il ne faut pas placer de " autour cette valeur (en fait, c'est possible de mettre des " autour d'une valeur numérique, mais ensuite, il faut être vraiment vigilent, car on pourrait faire la confusion entre une valeur numérique et une chaîne de caractères).
Voici quelques exemples de déclarations de variables :
<?php
$nom = "LA GLOBULE";
// $nom contient alors la chaîne de caractères LA GLOBULE.
$mon_chiffre = 12;
// $mon_chiffre contient la valeur numérique 12.
$5toto = "test";
// Cette déclaration n'est pas valide car le nom de la variable commence par un chiffre
Voyons maintenant la déclaration des variables de type tableau (array).
Pour ceux qui sont débutants en programmation, nous allons prendre un exemple plutôt simplet afin de comprendre ce qu'est un tableau.
Imaginons un classeur d'écolier (ce sera notre tableau) contenant différentes feuilles (qui seront les indices du tableau). Imaginons également que ces feuilles soient numérotées, et chaque feuille contienne un texte particulier. Dés lors, on peut chercher le contenu d'une feuille de ce classeur grâce à son numéro (on cherche donc l'information contenu dans le classeur à la page numéro x).
En informatique, un tableau, c'est exactement la même chose que notre classeur. Il s'agit d'une variable contenant différentes informations (les textes) et ces informations sont classées suivant le numéro de l'indice (c'est à dire le numéro de la feuille).
Par exemple, supposons que l'on ai la variable $fruit de type array.
On pourrait alors avoir le code suivant :
<?php
$fruit = Array();
$fruit[0] = "fraise";
$fruit[1] = "banane";
$fruit[2] = "abricot"; ?>
En reprenant l'exemple du classeur, c'est comme si nous avions un classeur de nom fruit, ayant 3 pages : - sur la page 0, on aurait l'information fraise
- sur la page 1, on aurait l'information banane - sur la page 2, on aurait l'information abricot
Nous venons, dans ce bout de code, de déclarer une variable de type array qui comporte 3 éléments (les pages).
Nous aurions eu le même résultat en exécutant le bout de code suivant :
<?php
$fruit = Array();
$fruit[] = "fraise";
$fruit[] = "banane";
$fruit[] = "abricot";
?>
En revanche, cette syntaxe est moins lisible, vu que souvent, on n'arrive plus vraiment à savoir à quelle page se trouve l'information recherchée (on s'emmêle dans les indices).
Aparté !
Ce qui pourrait alors donner :
<?php
$fruit = Array();
$fruit['le_meilleur'] = "fraise";
$fruit['le_prefere_de_Julien'] = "banane";
$fruit['mon_prefere'] = "abricot"; ?>
Or dans ce cas, il faut évidement utiliser pour chaque indice du tableau, une chaîne de caractère unique.
- nous pouvons également déclarer des tableaux à plusieurs éléments. Pour ceux qui désirent vraiment exploiter cette possibilité, je vous invite à aller consulter la documentation officielle PHP.
Auteur : LA GLOBULE
Dernière révision du cours : le 18/12/2007 à 22:23
Lors de cet exercice, nous allons mettre en pratique notre premier bout de code en PHP.
Il faut également savoir que toutes les variables en PHP commencent par le signe dollar ($), et il faut également ne pas oublier de placer un ; à chaque fin d'instruction PHP.
Etudions le code suivant :
<?php
$nom = "LA GLOBULE"; echo 'Bonjour '; echo $nom; echo ' !'; ?>
Ce qui affichera à l'écran :
Bonjour LA GLOBULE !
En effet, nous avons placé la chaîne de caractères LA GLOBULE dans la variable $nom, puis nous avons demander à PHP d'écrire la chaîne de caractères Bonjour, puis le contenu de la variable $nom (qui contient donc la chaîne LA GLOBULE), et enfin, nous affichons un !.
Ce qui donne bien comme résultat "Bonjour LA GLOBULE !"
(Remarquons au passage qu'une variable contenant une chaîne de caractères se déclare en mettant le nom de la variable puis un signe = et enfin, la chaîne de caractères entre deux ").
Au passage, remarquons également que nous venons d'apprendre notre première commande PHP, la commande echo(). Cette fonction nous permet d'afficher à l'écran des chaînes de caractères, qui peuvent être définies directement par l'utilisateur (comme lorsque l'on fait un echo 'Bonjour ';) ou qui peuvent être des contenus de variables (lorsque l'on fait echo $nom;).
Attention !!!
<?php
$nom = "LA GLOBULE"; echo 'Bonjour '; echo '$nom'; echo ' !'; ?>
Nous aurions eu à l'écran :
Bonjour $nom !
Attention donc à bien utiliser les ' qui ne servent qu'à délimiter les chaînes de caractères, et donc, il ne faut surtout pas les utiliser pour afficher le contenu d'une variable. En effet, lorsque l'on tape echo '$nom'; PHP pense que l'on désire afficher la chaîne de caractères $nom et non le contenu de la variable $nom.
Prenons un autre exemple où nous allons afficher la date et l'heure du jour.
On a le code suivant :
<?php
$date_du_jour = date ("d-m-Y"); $heure_courante = date ("H:i"); echo 'Nous sommes le : '; echo $date_du_jour; echo ' Et il est : '; echo $heure_courante; ?>
Ce qui affichera à l'écran :
Nous sommes le 17-09-2002 Et il est 12:10
Dans ce cas, nous venons d'utiliser la fonction date() qui nous permet d'afficher la date du jour ainsi que l'heure courante (en fait, la date du serveur). Dans un premier temps, nous avons affecté à la variable $date_du_jour le contenu que retourne la fonction date() munie des paramètres "d-m-Y", soit 17-09-2002, puis nous avons affecté à la variable $heure_courante le contenu que retourne la fonction date() munie des paramètres "H:i", soit 12:10.
Voici la liste des paramètres possibles pour la fonction date() :
- a : "am" (matin) ou "pm" (après-midi)
- A : "AM" (matin) ou "PM" (après-midi)
- d : Jour du mois, sur deux chiffres (éventuellement avec un zéros) : "01" à "31"
- D : Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
- F : Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier) - h : Heure, au format 12h, "01" à "12"
- H : heure, au format 24h, "00" à "23"
- g : Heure, au format 12h sans les zéros initiaux, "1" à "12"
- G : Heure, au format 24h sans les zéros initiaux, "0" à "23"
- i : Minutes; "00" à "59"
- l : Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour Vendredi)
- L : Booléen pour savoir si l'année est bissextile ("1") ou pas ("0")
- m : Mois; i.e. "01" à "12"
- n : Mois sans les zéros initiaux; i.e. "1" à "12"
- M : Mois, en trois lettres (et en anglais) : par exemple "Jan" (pour Janvier)
- s : Secondes; i.e. "00" à "59" - S : Suffixe ordinal d'un nom
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:27
Lors de cet exercice, nous allons mettre en pratique notre premier bout de code en PHP.
Il faut également savoir que toutes les variables en PHP commencent par le signe dollar ($), et il faut également ne pas oublier de placer un ; à chaque fin d'instruction PHP.
Etudions le code suivant :
<?php
$nom = "LA GLOBULE"; echo 'Bonjour '; echo $nom; echo ' !'; ?>
Ce qui affichera à l'écran :
Bonjour LA GLOBULE !
En effet, nous avons placé la chaîne de caractères LA GLOBULE dans la variable $nom, puis nous avons demander à PHP d'écrire la chaîne de caractères Bonjour, puis le contenu de la variable $nom (qui contient donc la chaîne LA GLOBULE), et enfin, nous affichons un !.
Ce qui donne bien comme résultat "Bonjour LA GLOBULE !"
(Remarquons au passage qu'une variable contenant une chaîne de caractères se déclare en mettant le nom de la variable puis un signe = et enfin, la chaîne de caractères entre deux ").
Au passage, remarquons également que nous venons d'apprendre notre première commande PHP, la commande echo(). Cette fonction nous permet d'afficher à l'écran des chaînes de caractères, qui peuvent être définies directement par l'utilisateur (comme lorsque l'on fait un echo 'Bonjour ';) ou qui peuvent être des contenus de variables (lorsque l'on fait echo $nom;).
Attention !!!
En effet, si nous avions écris le code suivant :
<?php
Nous aurions eu à l'écran :
Bonjour $nom !
Attention donc à bien utiliser les ' qui ne servent qu'à délimiter les chaînes de caractères, et donc, il ne faut surtout pas les utiliser pour afficher le contenu d'une variable. En effet, lorsque l'on tape echo '$nom'; PHP pense que l'on désire afficher la chaîne de caractères $nom et non le contenu de la variable $nom.
Prenons un autre exemple où nous allons afficher la date et l'heure du jour.
On a le code suivant :
<?php
$date_du_jour = date ("d-m-Y"); $heure_courante = date ("H:i"); echo 'Nous sommes le : '; echo $date_du_jour; echo ' Et il est : '; echo $heure_courante; ?>
Ce qui affichera à l'écran :
Nous sommes le 17-09-2002 Et il est 12:10
Dans ce cas, nous venons d'utiliser la fonction date() qui nous permet d'afficher la date du jour ainsi que l'heure courante (en fait, la date du serveur). Dans un premier temps, nous avons affecté à la variable $date_du_jour le contenu que retourne la fonction date() munie des paramètres "d-m-Y", soit 17-09-2002, puis nous avons affecté à la variable $heure_courante le contenu que retourne la fonction date() munie des paramètres "H:i", soit 12:10.
Voici la liste des paramètres possibles pour la fonction date() :
- a : "am" (matin) ou "pm" (après-midi)
- A : "AM" (matin) ou "PM" (après-midi)
- d : Jour du mois, sur deux chiffres (éventuellement avec un zéros) : "01" à "31"
- D : Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi)
- F : Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier) - h : Heure, au format 12h, "01" à "12"
- H : heure, au format 24h, "00" à "23"
- g : Heure, au format 12h sans les zéros initiaux, "1" à "12"
- G : Heure, au format 24h sans les zéros initiaux, "0" à "23"
- i : Minutes; "00" à "59"
- j : Jour du mois sans les zéros initiaux: "1" à "31"
- L : Booléen pour savoir si l'année est bissextile ("1") ou pas ("0")
- m : Mois; i.e. "01" à "12"
- n : Mois sans les zéros initiaux; i.e. "1" à "12"
- M : Mois, en trois lettres (et en anglais) : par exemple "Jan" (pour Janvier)
- s : Secondes; i.e. "00" à "59" - S : Suffixe ordinal d'un nom
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:27
Voyons maintenant les variables d'environnements.
En effet, PHP propose toute une série de variables qui sont déjà présentes dans le langage sans que vous n'ayez à les déclarer. Ces variables s'écrivent toujours en majuscules et nous fournissent divers renseignements.
Voici la liste des variables d'environnement existantes :
Variable | Description |
$_SERVER['DOCUMENT_ROOT'] | Racine du serveur |
$_SERVER['HTTP_ACCEPT_LANGUAGE'] | Langage accepté par le navigateur |
$_SERVER['HTTP_HOST'] | Nom de domaine du serveur |
$_SERVER['HTTP_USER_AGENT'] | Type de navigateur |
$_SERVER['PATH_INFO'] | Chemin WEB du script |
$_SERVER['PATH_TRANSLATED'] | Chemin complet du script |
$_SERVER['REQUEST_URI'] | Chemin du script |
$_SERVER['REMOTE_ADDR'] | Adresse IP du client |
$_SERVER['REMOTE_PORT'] | Port de la requête HTTP |
$_SERVER['QUERY_STRING'] | Liste des paramètres passés au script |
$_SERVER['SERVER_ADDR'] | Adresse IP du serveur |
$_SERVER['SERVER_ADMIN'] | Adresse de l'administrateur du serveur |
$_SERVER['SERVER_NAME'] | Nom local du serveur |
$_SERVER['SERVER_SIGNATURE'] | Type de serveur |
$_SERVER['REQUEST_METHOD'] | Méthode d'appel du script |
Ces variables peuvent être utilisées n'importe quand dans vos scripts.
Voici un exemple où vous pouvez afficher l'adresse IP de la personne qui se connecte sur votre site :
<?php
echo 'Votre adresse IP est : '.$_SERVER['REMOTE_ADDR']; ?>
Votre adresse IP est : 80.12.45.26
(par exemple)
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:34
© 2002 - 2007 - Page 1/1
Voyons maintenant la concaténation de chaîne de caractères.
Déjà, il faut bien savoir ce qu'est la concaténation de chaîne de caractères. Prenons un exemple simple avec deux chaînes de caractères :
- la première chaîne de caractères sera : "J'apprend " - la seconde chaîne sera : "le PHP"
En faisant une concaténation de ces deux chaînes, nous obtiendrons la chaîne suivante : "J'apprend le PHP".
Tachons maintenant de mettre alors en évidence l'importance de la concaténation de chaîne de caractères avec l'exemple de l'exercice précédent.
On avait alors comme code PHP :
<?php
$nom = "LA GLOBULE"; echo 'Bonjour '; echo $nom; echo ' !'; ?>
Or, les trois lignes avec l'instruction echo() peuvent se simplifier en une seule grâce à la concaténation. En PHP, la concaténation de chaîne s'effectue grâce au point.
On a alors :
<?php
$nom = "LA GLOBULE"; echo 'Bonjour '.$nom.' !'; ?>
Ce qui affichera à l'écran :
Bonjour LA GLOBULE !
Résumons les choses :
On affiche en fait la chaîne Bonjour concaténée avec le contenu de la variable $nom, soit LA GLOBULE, également concatène avec la chaîne !, ce qui au final, se résume par l affichage de la chaîne Bonjour LA GLOBULE.
La encore, il faut faire attention car si l'on avait écrit echo 'Bonjour $nom !'; donc sans l'opérateur de concaténation qu'est le point, on aurait eu à l'écran l'affichage suivant :
Bonjour $nom !
(Car dans ce cas, PHP comprend que l'on désire afficher la chaîne $nom et non le contenu de la variable $nom).
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:33
© 2002 - 2007 - Page 1/1
Voici un petit récapitulatif des principales structures de contrôles :
Instruction | Signification |
if | Si |
else | Sinon |
elseif | Sinon si |
switch | Selon |
for | Pour chaque (boucle) |
while | Tant que (boucle) |
== | Strictement égal |
!= | Différent |
< | Strictement inférieur |
> | Strictement supérieur |
<= | Inférieur ou égal |
>= | Supérieur ou égal |
and ou && | ET logique |
or ou || | OU logique |
Nous allons maintenant illustrer toutes ces structures de contrôles.
- if, else, elesif :
Nous allons initialiser une variable numérique $nombre à la valeur 11 par exemple, et faire différent tests dessus.
<?php
$nombre = 11;
if ($nombre >= 0 && $nombre < 10) {
// on teste si la valeur de notre variable est comprise entre 0 et 9 echo $nombre.' est compris entre 0 et 9';
}
elseif ($nombre >= 10 && $nombre < 20) {
// on teste si la valeur de notre variable est comprise entre 10 et 19 echo $nombre.' est compris entre 10 et 19';
} else {
// si les deux tests précédents n'ont pas aboutis, alors on tombe dans ce cas echo $nombre.' est plus grand que 19';
}
?>
A l'affichage on aura :
11 est compris entre 10 et 19
(Remarquons déjà que les instructions qui doivent être exécutées lorsqu'un test est validé sont systématiquement comprises entre des crochets { }).
En effet, résumons ce qui vient de se passer.
Dans un premier temps, on teste si $nombre est supérieur ou égal à 0 et strictement inférieur à 10, et dans ce cas, et seulement dans ce cas, on écrira alors sur l'écran, $nombre est compris entre 0 et 9. Or vu que $nombre est égal à 11, on se rend compte que ce test ne sera pas satisfait.
Nous avons choisis de faire un second test (elseif).
La, on teste si $nombre est supérieur ou égal à 10 et strictement inférieur à 20 (ce qui est notre cas car $nombre est égal à 11).
Le test est donc validé, et l'on exécute alors les instructions présentes entre les crochets { } du elseif.
On affichera donc à l'écran : 11 est compris entre 10 et 19
Viens ensuite le cas else qui est exécuté seulement si aucunes des conditions définies par les if et les elseif n'est vérifiées.
- switch :
Le switch représente exactement la même chose qu'une succession d'un if et de plusieurs elseif. En revanche, utiliser un switch à un certain avantage comparé à un if et à plusieurs elesif, c'est que sa structure est beaucoup moins lourde et nettement plus agréable à lire.
Prenons un exemple simple. Nous allons déclarer une variable contenant une chaîne de caractères, puis nous allons tester cette chaîne grâce au switch. On aura alors le code suivant :
<?php
$nom = "LA GLOBULE";
switch ($nom) { case 'Jean' :
echo 'Votre nom est Jean.'; break;
case 'Benoît' :
echo 'Votre nom est Benoît.'; break;
case 'LA GLOBULE' :
echo 'Votre nom est LA GLOBULE.'; break; default :
echo 'Je ne sais pas qui vous êtes !!!'; }
?>
Dans notre cas, vu que $nom contient la chaîne de caractère LA GLOBULE, on verra alors s'afficher à l'écran la phrase suivante :
Votre nom est LA GLOBULE.
En revanche, si la variable $nom avait contenu la chaîne de caractère "toto", ce même code aurait affiché à l'écran :
Je ne sais pas qui vous êtes !!!
En utilisant un if puis une succession de elseif, le code suivant aurait exactement eu le même affichage sur l'écran :
<?php
$nom = "LA GLOBULE"; if ($nom == "Jean") { echo 'Votre nom est Jean.';
}
elseif ($nom == "Benoît") { echo 'Votre nom est Benoît.';
}
elseif ($nom == "LA GLOBULE") { echo 'Votre nom est LA GLOBULE.';
}
?>
Attention !
Notez bien l'utilisation de break dans chaque cas de votre switch. Si celui-ci est omis, tous les messages s'afficheront.
- for (pour chaque) :
La structure de contrôle for nous permet d'écrire des boucles. En clair, cela veut dire que nous allons exécuter une série d'instructions un nombre de fois bien déterminé.
Prenons l'exemple suivant :
<?php
$chiffre = 5;
// Début de la boucle for ($i=0; $i < $chiffre; $i++) { echo 'Notre chiffre est différent de '.$i.'<br />'; }
// Fin de la boucle
echo 'Notre chiffre est égal à '.$i; ?>
Ce qui affichera à l'écran :
Notre chiffre est différent de 0
Notre chiffre est différent de 1
Notre chiffre est différent de 2
Notre chiffre est différent de 3
Notre chiffre est différent de 4
Notre chiffre est égal à 5
En effet, on initialise notre variable $chiffre à 5. On démarre la boucle for qui dit que l'on va exécuter les instructions situées entre les crochets de la boucle ({ }) pour i variant de 0 à $chiffre-1 (donc jusqu'à 4), i étant incrémenter à chaque passage de boucle ($i++).
($i varie de 0 à $hiffre-1 car on impose que $i soit strictement inférieur à $chiffre).
On exécute alors 4 fois les instructions présentes dans la boucle, et à chaque passage, $i verra sa valeur augmentée de 1.
Aparté :
L'utilisation des boucles est extrêmement importante (et indispensable) en programmation. La compréhension de ce passage est capital.
- while (tant que)
Voyons maintenant l'autre boucle, la boucle while (dite boucle tant que). Il faut déjà savoir que la boucle while n'est pas vraiment d'une nécessité absolue (elle est absente dans certains langages de programmation) vu qu'elle est toujours remplaçable par une boucle for.
Reprenons l'exemple précédent, et écrivons le à l'aide de la boucle while, on a :
<?php
$chiffre = 5; $i = 0;
$i = $i + 1;
}
// Fin de la boucle
echo 'Notre chiffre est égal à '.$i; ?>
Ce qui affichera à l'écran exactement la même chose que ce qu'affiche le code que l'on a utilise pour la boucle for.
Ici, on initialise notre variable $chiffre à 5, puis la variable $i à 0.
Ensuite, nous faisons le test suivant : "tant que $i et augmenter la valeur de $i de 1"
Puis dès que la condition $i < $chiffre n'est plus vérifiée, nous sortons de la boucle pour finir l'exécution des instructions qui suivent.
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:37
Tentons maintenant de lire et d'écrire dans un fichier texte, fichier se trouvant sur votre serveur FTP. Afin de mettre en pratique cet exercice, vous allez créer un fichier que vous allez placer dans le même répertoire que le script
PHP.
Supposons que ce fichier texte contienne la ligne suivante :
"Salut à tous :)".
Soit alors, le code PHP suivant :
<?php
// Instruction 1
$fp = fopen ("", "r");
// Instruction 2
$contenu_du_fichier = fgets ($fp, 255);
// Instruction 3 fclose ($fp); // Instruction 4
echo 'Notre fichier contient : '.$contenu_du_fichier; ?>
Ce qui affichera à l'écran :
Notre fichier contient : Salut à tous :)
Détaillons alors ce qui se passe :
- Instruction 1 : on ouvre le fichier en lecture seule à l'aide de la fonction fopen() (la lecture seule est obtenue à l'aide du paramètre r ; nous détaillerons plus loin tous les paramètres possibles de cette fonction).
- Instruction 3 : on referme le fichier à l'aide de la fonction fclose(). En effet, nous avons déjà le contenu du fichier dans la variable $contenu_du_fichier, alors le fichier ne nous intéresse plus.
- Instruction 4 : on affiche donc le contenu du fichier (notez encore une fois l'utilité de la concaténation des chaînes de caractères).
Aparté
Vous n'êtes absolument pas oblige de mettre ce fichier texte dans le même répertoire que le script PHP. En effet, si votre script PHP est à la racine de votre site et que le fichier à lire se trouve dans le répertoire /toto, vous écrirez alors votre script de la manière suivante :
<?php
$fp = fopen ("", "r"); $contenu_du_fichier = fgets ($fp, 255); fclose ($fp); echo 'Notre fichier contient : '.$contenu_du_fichier; ?>
© 2002 - 2007 - Page 1/2
Ce qui produira un résultat tout a fait identique.
Etudions maintenant tous les paramètres possibles de la fonction fopen() :
- 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 file. 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.
Un exemple concret : un mini compteur du nombre de visites.
Tout d'abord vous allez créer un fichier que vous allez placer dans le même répertoire que le script qui va suivre. Placez le chiffre "0" dans ce fichier.
Soit alors le bout de code PHP suivant :
<?php
// Instruction 1
$fp = fopen ("", "r+");
// Instruction 2
$nb_visites = fgets ($fp, 11); // Instruction 3
$nb_visites = $nb_visites + 1;
// Instruction 4 fseek ($fp, 0); // Instruction 5 fputs ($fp, $nb_visites);
// Instrcution 6 fclose ($fp); // Instrcution 7
echo 'Ce site compte '.$nb_visites.' visiteurs !'; ?>
On a alors :
- Instruction 1 : on ouvre le fichier en lecture et en ecriture.
- Instruction 2 : on lit le contenu du fichier et on place ce contenu (qui est donc le nombre de visiteurs de notre page) dans la variable $nb_visites.
- Instruction 3 : on augmente le nombre de visites de 1.
- Instruction 4 : on place le pointeur du fichier à l'offset 0 grâce à l'instruction fseek(). En clair, on se positionne au tout début de notre fichier.
- Instruction 5 : grâce à l'instruction fputs(), on écrit dans notre fichier la nouvelle valeur correspondant au nombre de visites.
- Instruction 6 : on ferme le fichier.
- Instruction 7 : on affiche le nombre de visites de notre page !!!
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 21:39
© 2002 - 2007 - Page 2/2
Voyons maintenant comment créer des formulaires, et surtout comment bien les utiliser. Les formulaires vont permettre à vos visiteurs de soumettre des informations, que ce soit un nom, un prénom, un chiffre, etc
Prenons le code suivant :
<html>
<head>
<title>Ma page de test</title>
</head>
<body>
<form action = "" method="post">
Votre nom : <input type = "text" name = "nom"><br />
Votre fonction : <input type = "text" name = "fonction"><br />
</form>
</body>
</html>
Puis, lorsque l'utilisateur cliquera sur le bouton "Envoyer", les données du formulaire seront envoyées sur la page .
Et dans la page , nous allons récupérer une variable de type tableau ($_POST : car notre formulaire a comme method la valeur post).
En clair, dans la page , on aura une variable $_POST['nom'] qui contiendra la chaîne de caractères qu'aura saisi le visiteur dans le champ "Votre nom : " (on a la variable $_POST['nom'], car dans l'attribut name de notre formulaire pour le champ concernant le nom).
De même, on aura une variable $_POST['fonction'] qui contiendra la chaîne de caractères qu'aura saisi le visiteur dans la champ "Votre fonction : " (encore une fois, on a la variable $_POST['fonction'] car l'attribut name du champ prend la valeur fonction).
Prenons ensuite le code suivant pour la page :
<html>
<head>
<title>Ma page de traitement</title>
</head>
<body> <?
// on teste la déclaration de nos variables
if (isset($_POST['nom']) && isset($_POST['fonction'])) {
// on affiche nos résultats
echo 'Votre nom est '.$_POST['nom'].' et votre fonction est '.$_POST['fonction'];
}
?>
</body>
</html>
En supposant que l'on écrive "LA GLOBULE" dans le champ "Votre nom" et "Webmaster" dans le champ "Votre fonction", on verra alors s'afficher à l'écran :
Votre nom est LA GLOBULE et votre fonction est Webmaster
PS : dans le cas où le formulaire utilise une méthode get, nous utilisons la variable tableau $_GET.
© 2002 - 2007 - Page 1/2
Voyons maintenant le cas des formulaires munis d'un champ de type file (formulaire permettant le téléchargement de fichiers sur votre site).
Imaginons que l'on ai le formulaire suivant :
<html>
<head>
<title>Ma page de test</title>
</head>
<body>
Votre fichier : <input type = "file" name = "mon_fichier"><br />
<input type = "hidden" name="MAX_FILE_SIZE" value="20000">
<input type = "submit" value = "Envoyer">
</form>
</body>
</html>
Pour récupérer votre fichier, vous avez à votre disposition le tableau $_FILES qui aura plusieurs entrées :
- $_FILES['mon_fichier']['tmp_name'] : le nom temporaire du fichier sur le serveur
- $_FILES['mon_fichier']['name'] : le nom original du fichier sur la machine cliente
- $_FILES['mon_fichier']['type'] : le type MIME du fichier- $_FILES['mon_fichier']['size'] : la taille du fichier
Naturellement, vous pourrez utiliser ces valeurs pour tester votre fichier.
Si il correspond à vos attentes, vous pourrez finaliser votre téléchargement à l'aides des fonctions copy ou move_uploaded_file (afin de copier le fichier téléchargé sur le disque dur du serveur).
Auteur : LA GLOBULE
Dernière révision du cours : 2007-06-18 15:11:57
© 2002 - 2007 - Page 2/2
Vous savez tous que PHP comprend, de base, une liste assez impressionnante de fonctions mises à votre disposition. En revanche, vous aussi, vous pouvez très bien écrire vos propres fonctions.
Nous allons donc écrire une fonction qui va nous permettre d'écrire un texte en gras, tout en spécifiant la couleur de ce texte, ainsi que sa taille.
On a alors le code suivant :
<?php
function affichage_texte ($taille, $couleur, $texte) { echo '<font size = "'.$taille.'" color = "'.$couleur.'">'.$texte.'</font>';
}
?>
Placons ce code dans un fichier nommé .
Attention !!!
Placer juste et SEULEMENT ce bout de code dans le fichier .
Soit ensuite le code du fichier :
<?php
// on inclut le code de , donc le code de notre fonction include ('');
// on affiche un texte
affichage_texte ("2", "red", "Mon texte"); ?>
Ce qui affichera à l'écran :
Auteur : LA GLOBULE
Dernière révision du cours : le 29/05/2007 à 22:43
© 2002 - 2007 - Page 1/1
|
Nous allons maintenant faire une petite introduction sur les bases de données. En effet, les bases de données prennent aujourd'hui une proportion tellement importante dans les sites WEB que vous devriez sûrement en utiliser un jour pour un site développé en PHP.
Pour l'information, sachez que ce site WEB utilise pratiquement que les données d'une base de données (tous les tutoriaux, les astuces, etc sont contenus dans une base de données).
De plus, en utilisant les bases de données, vous allez vraiment découvrir toutes les possibilités d'un environnement PHP / MySQL.
Cette introduction pourra vous paraître vraiment longue et inutile, néanmoins, je vous recommande chaudement de la lire attentivement dans son intégralité. Elle comporte énormément de notions capitales à comprendre.
Prenons un exemple simple et concret : supposons que l'on désire développer une base de données contenant une liste de CD audio. Cette liste de CD sera en fait composée de tous les CD que possède chaque personne d'un groupe d'amis. Et ceci, afin de pouvoir se prêter mutuellement les différents CD, et de savoir exactement qui à quoi comme CD.
On suppose que le groupe d'amis est composé de 3 personnes :
- LA GLOBULE
- Jeremy
- Benoît
Chaque personne a un numéro de téléphone, et chaque personne possède un certain nombre de CD. On prendra aussi en considération le titre de l'album et le nom de l'interprète.
On aurait alors très bien pu obtenir (sous forme d'un tableau) la base de données suivante :
Propriétaire | N. tél | Auteur | Titre |
LA GLOBULE | 06-48-85-20-54 | Cassius | Au rêve |
LA GLOBULE | 06-48-85-20-54 | Daft Punk | Discovery |
Jeremy | 06-48-74-26-01 | Cassius | Au rêve |
Jeremy | 06-48-74-26-01 | Genetic world | |
Benoît | 06-47-01-59-36 | Clamaran | Release yourself |
Notez bien que ce tableau, en terme de base de données, se nomme une table et que chaque ligne du tableau se nomme un tuple. La première ligne du tableau comporte les attributs de la table (Propriétaire, N. tél, Auteur et Titre sont les attributs de notre table).
Note : une base de données peut contenir plusieurs tables.
Faisons maintenant quelques interrogations sur cette base de données :
Qui possède un album de Cassius ?
>> réponse : LA GLOBULE et Jeremy
Quel est le numéro de téléphone de Benoît ? >> réponse : 06-47-01-59-36
Quels sont les albums des Daft Punk disponibles dans la liste de CD ?
>> réponse : Discovery (il n'y en a qu'un seul)
A première vue donc, le principe des bases de données est très facilement assimilable.
Il faut également savoir que dans la table d'une base de données, on ne peut pas avoir 2 tuples (donc 2 lignes du tableau) ayant les mêmes éléments (en effet, il serait quand même bête qu'une personne ai un CD en double).
Imaginons maintenant que Jeremy vienne de se faire pick-pocketter son tout nouveau portable (un beau 8310) dans le métro, et qu'il change alors naturellement de numéro.
Supposons que son nouveau numéro est 06-85-98-78-12 et qu'en plus il vienne de s'acheter un nouveau CD : Paradise de Bob Sinclar.
On insère alors une nouvelle ligne dans notre table (un nouveau tuple), et l'on obtient donc :
Propriétaire | N. tél | Auteur | Titre | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LA GLOBULE | 06-48-85-20-54 | Cassius | Au rêve | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LA GLOBULE | 06-48-85-20-54 | Daft Punk | Discovery | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jeremy | 06-48-74-26-01 | Cassius | Au rêve | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jeremy | 06-48-74-26-01 | Télépopmusik | Genetic world | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Benoît | 06-47-01-59-36 | Clamaran | Release yourself | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Jeremy | 06-85-98-78-12 | Bob Sinclar | Paradise Quel est le numéro de téléphone de Jeremy ? >> réponse : 06-85-98-78-12 ou bien 06-48-74-26-01 Nous remarquons tout de suite qu'un problème majeur arrive : c'est à dire que Jeremy possède deux numéros de téléphone alors qu'il ne devrait (en théorie) n'en posséder qu'un seul. Pour remédier a ce problème, il faudrait, par exemple modifier tous les premiers tuples et ainsi mettre à jour le numéro de téléphone de Jeremy. Dans notre cas, cette solution n'est pas vraiment gênante, en revanche, lorsque la table comporte quelques centaines voir milliers de tuples, c'est déjà beaucoup plus gênant. En fait, ce problème survient généralement à cause d'une mauvaise conception de la base de données. En effet, au lieu de créer une seule table contenant toutes les informations, nous aurions du créer deux tables : - une contenant la liste des CD (Auteur et Titre) - une contenant les informations des propriétaires des CD (Propriétaire et N. de tel) Ensuite, il nous resterait a faire un lien entre les tables, nous permettant de savoir qui possède tel ou tel CD. Mettons cette solution en pratique. On a alors notre table contenant la liste des propriétaires qui aura les attributs suivants : - numéro du propriétaire - nom du propriétaire - numéro de téléphone du propriétaire Et la table contenant la liste de CD, aura les attributs suivants : - numéro du propriétaire du CD - Auteur du CD - Titre du CD (Et c'est grâce au numéro du propriétaire que l'on fera la liaison entre les deux tables, l'opération se nommant une jointure) On aura alors :
En ici, on remarque facilement que si une personne change de numéro de téléphone, et bien nous avons qu'une seule modification à effectuer (vu que chaque numéro de téléphone n'apparaît qu'une fois dans toute la base). Puis dans ce cas, nous remarquons également que c'est le N. de propriétaire qui effectue la liaison entre les deux tables (c'est à dire la jointure). En conclusion : Faites extrêmement attention au moment où vous créer les tables de votre base de données afin de ne pas se retrouver dans une situation où tout retour en arrière serait impossible : visualiser bien votre idée, écrivez sur papier ce dont vous avez réellement besoin pour votre base de données, et tentez au maximum d'éviter d'avoir des redondances dans vos tables. Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 22:45 Création des tables en SQLLe SQL (Structured Query Langage) est un langage de requêtes qui nous permet de faire des interrogations (les requêtes) sur un SGBD (Système de Gestion de Base de Données). Nous venons de faire une petite introduction sur les bases de données, et maintenant, nous allons voir en détail comment utiliser le SQL pour developper cette base de données. Tout le code donné dans ce tutorial ne peut être interprété que par votre SGBD. Ce code ne pourra pas être inclus dans vos pages PHP. En effet, vous devrez utiliser ce code dans votre PHPMyAdmin par exemple. Reprenons l'exemple précédent, et on observe comment faire pour créer nos deux tables. Créons tout d'abord la table liste_proprietaire : CREATE TABLE liste_proprietaire ( numero INT(5) NOT NULL, nom VARCHAR(20) NOT NULL, telephone VARCHAR(14) NOT NULL ) TYPE=MyISAM; Nous venons ici de créer notre table liste_proprietaire, table contenant trois attributs : - nom qui correspond à une suite de caractères (VARCHAR) de 20 caractères - telephone qui correspond à une suite de caractères (VARCHAR) de 14 caractères Nous utilisons VARCHAR pour des chaînes de caractères pouvant mêler du texte et des nombres. Toutefois, à la fin de ce tutorial, nous allons passer en revue tous les types d'attributs possibles. De plus, pour chacun de ces attributs, nous imposons que pour chaque tuple donné, aucun attribut ne peut être vide (on a mis un NOT NULL pour tous les attributs). Enfin, le type MyISAM précise que nous avons affaire à une base de données de type MySQL. Créons ensuite la table liste_disque : CREATE TABLE liste_disque ( numero INT(5) NOT NULL, auteur VARCHAR(50) NOT NULL, titre VARCHAR(50) NOT NULL ) TYPE=MyISAM; Vu que les attributs ressemblent beaucoup à la première table, nous ne ferons aucun commentaire sur cette table. En revanche, nous aurions pu utiliser l'extra AUTO_INCREMENT pour les attributs numero de la table liste_proprietaire. En effet, si on imagine la page WEB nous permettant d'insérer des membres dans la liste des propriétaires, on s'imagine mal qu'il faille préciser a chaque fois le numéro du nouveau propriétaire. Afin de palier à ce léger désagrément, nous allons applique un extra à l'attribut de la première table, nous permettant de faire en fait une incrémentation automatique à chaque insertion d'un nouveau propriétaire. On aura alors la table liste_proprietaire définit comme ceci : CREATE TABLE liste_proprietaire ( numero INT(5) NOT NULL AUTO_INCREMENT, nom VARCHAR(20) NOT NULL, © 2002 - 2007 - Page 1/2 telephone VARCHAR(14) NOT NULL, PRIMARY KEY (numero) ) TYPE=MyISAM; Passons maintenant en revue l'intégralité des types possibles pour les attributs d'une table SQL. On a alors : - TINYINT : entier de 0 à 255 (non signé) - SMALLINT : entier de 0 à 65 535 (non signé) - MEDIUMINT : entier de 0 à 16 777 215 (non signé) - INT : entier de 0 à 4 294 967 295 (non signé) - BIGINT : entier de 0 à 18 446 744 073 709 551 615 (non signé) - DECIMAL : un nombre à virgule flottante (soit un nombre réel) - DATE : une date allant du 1000-01-01 au 9999-12-31 - DATETIME : une date comportant une heure allant du 1000-01-01 00:00:00 au 9999-12-31 23:59:59 - TIMESTAMP : une date comportant une heure exprimée en secondes depuis le 1er janvier 1970 jusqu'à l'instant présent - TIME : une mesure de l'heure qui va de -838:59:59 à 838:59:59 - YEAR : une année qui va de 1901 à 2155 - CHAR : une chaîne de caractères de taille fixée (de 1 à 255 caractères) - VARCHAR : une chaîne de caractères de taille variable (de 1 à 255 caractères) - TINYTEXT ou TINYBLOB : un objet BLOB ou TEXT ayant une longueur maximale de 255 caractères - TEXT ou BLOB : un objet BLOB ou TEXT ayant une longueur maximale de 65 535 caractères - MEDIUMTEXT ou MEDIUMBLOB : un objet BLOB ou TEXT ayant une longueur maximale de 16 777 215 caractères - LONGTEXT ou LONGBLOB : un objet BLOB ou TEXT ayant une longueur maximale de 4 294 967 295 caractères Attention !!! Il est tout de fois possible de créer des tables directement à partir d'une page en PHP. Dans ce cas, pour créer les tables, il n'est absolument pas nécessaire de passer par votre PHPMyAdmin, chose que je déconseille fortement pour les débutants. En clair, au début, utiliser PHPMyAdmin pour créer vos tables, puis, une fois que vous aurez bien compris le principe, vous pourrez alors créer vos tables directement à partir de vos scripts (ce qui est tout de même déconseillé). Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 23:05
Nous venons de voir comment créer nos tables SQL à l'aide d'un PHPMyAdmin (par exemple). Avant de voir comment faire pour insérer, modifier, supprimer et afficher des tuples de notre base de données, il est bon de connaître les fonctions PHP permettant de manoeuvrer ces tuples. Ce tutorial est un peu comme une documentation, afin que les tutoriaux suivants ne ressortent pas à vos yeux comme des choses provenant de Mars ou de Jupiter. Il faut déjà savoir que les fonctions PHP pour MySQL commence toujours par mysql_ ce qui est plutôt bien pensé, non ? Voici donc la liste de ces fonctions (nous étudierons que les principales, regardez la documentation pour de plus amples connaissances) :
Voyons maintenant comment faire pour se connecter à une base de données. En effet, afin de pouvoir utiliser tous les éléments contenus dans une base de données, vous devez indiquer, sur toutes vos pages PHP où vous utilisez votre base, différents paramètres de connexion à votre base. Etudions le code suivant : exemple1<?php La chaîne de caractères mon_serveur doit être remplacé par celle qui correspond au nom de votre serveur (en règle générale, il s'agit de localhost ; si ce n'est pas le cas, veuillez contacter votre hébergeur pour de plus amples informations). login correspond à votre login pour accéder à votre base. password, votre mot de passe. Et ma_base_de_donnees correspond au nom de votre base de données. Grâce à ce code nous allons donc pouvoir effectuer toutes nos requêtes SQL sur les tables de notre base de données fraîchement créée. Attention !!! Ce code doit toujours être présent avant toute opération sur votre base de données (une seule fois par page suffit par © 2002 - 2007 - Page 1/2 contre). Mon conseil : faites vous un fichier ou apparaîtra seulement ce morceau de code, et dans chaque page ou vous souhaitez utiliser votre base de données, vous n'aurez alors qu'à include() ce fichier de connexion. Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 22:48 © 2002 - 2007 - Page 2/2 Afficher les données de votre baseMaintenant que les tables de votre base de données sont créées, nous allons pouvoir voir comment faire pour pouvoir interroger cette base de données, et par conséquent afficher les résultats sur vos pages WEB :) Avant de plonger à l'inconnu dans le code PHP pour faire ces interrogations, nous allons voir comment s'effectuent ces interrogations par le biais de requêtes SQL. Et pour ce faire, nous allons nous baser sur l'exemple que nous avons suivi lors du tutorial sur l'introduction aux bases de données. Je vous rappelle que l'on avait alors deux tables qui peuvent être représentées ainsi : La table liste_proprietaire :
La table liste_disque :
Nous allons alors interroger la table pour connaître par exemple le numéro de téléphone de LA GLOBULE. On aura alors (en SQL je vous le rappelle, on verra plus tard comment obtenir le même résultat dans une page WEB) : SELECT telephone FROM liste_proprietaire WHERE nom="LA GLOBULE"; Etudions ce code : - on sélectionne l'attribut que l'on désire obtenir (ici l'attribut telephone qui correspond effectivement au numéro de téléphone des propriétaires). - on utilise la table liste_proprietaire pour faire notre sélection (en fait, on n'a besoin que de cette table pour faire notre sélection, on verra plus tard que la clause FROM peut contenir plusieurs tables, notamment dans le cas des jointures). - on impose une condition, en effet, on veut le téléphone de qui ? De LA GLOBULE, donc en écrivant WHERE nom="LA GLOBULE", on impose au SGBD de ne sélectionner dans notre table que les tuples qui possèdent l'attribut nom qui est égal à LA GLOBULE. En revanche, en n'écrivant pas cette ligne, on aurai obtenu tous les numéros de téléphone de notre table (car dans ce cas, on n'aurait eu aucune condition quand au nom du propriétaire). Etudions maintenant le cas ou l'on effectue une sélection lorsque l'on doit effectuer une jointure entre deux tables. Interrogeons alors notre base de données pour connaître le nom des propriétaires de l'album Au rêve de Cassius. © 2002 - 2007 - Page 1/5 On aura alors : SELECT liste_proprietaire.proprietaire FROM liste_proprietaire, liste_disque WHERE liste_disque.auteur = "Cassius" AND liste_disque.titre = "Au rêve" AND liste_proprietaire.numero = liste_disque.numero ORDER BY liste_proprietaire.proprietaire ASC; Etudions ce code : En effet, si l'attribut proprietaire avait existe dans plusieurs tables, nous aurions dû préciser de quelle table il s'agit (le SGBD n'aurait pas su de quelle table l'attribut dont nous parlons fait partie). Toutefois, je vous recommande chaudement (sauf dans les cas extrêmement simple, de toujours préciser au SGBD à quelle table appartient l'attribut que vous sélectionnez). - On utilise les tables liste_proprietaire et liste_disque pour faire notre requête. - On fait notre recherche sur la liste de disque en ne retenant que les disques dont l'auteur est Cassius. - Puis on retient les disques dont le titre est Au rêve. - Ensuite (le plus important), on effectue une jointure entre les tables, en disant que l'attribut numero de la table liste_proprietaire correspond à l'attribut numero de la table liste_disque. - Enfin, on impose au SGBD de nous fournir les résultats dans l'ordre alphabétique des noms de propriétaire (et ceci grâce à la clause ORDER BY). Notes : - Pour organiser les résultats suivant l'ordre inverse de l'ordre alphabétique, on aurait pu mettre en dernière condition, lacondition ORDER BY liste_proprietaire.proprietaire DESC. - La clause ORDER BY est également valable dans le cas d'attribut numérique. Dans ce cas, le SGBD organise les résultats suivant un ordre croissant (lorsque l'on met ASC à la fin) ou décroissant (lorsque l'on met DESC à la fin). - Cette astuce fonctionne également dans le cas où l'attribut est de type date. Remarque : Nous avons que dans nos requêtes SQL nous pouvions imposer au SGBD de ne sélectionner que les tuples dont on impose la valeur de certains attributs (comme par exemple en imposant que l'attribut auteur soit égal à Cassius par le biais de la ligne WHERE liste_disque.auteur = "Cassius"). Prenons l'exemple suivant : SELECT liste_proprietaire.proprietaire FROM liste_proprietaire, liste_disque WHERE liste_disque.auteur LIKE "C%" AND liste_disque.titre = "Au rêve" AND liste_proprietaire.numero = liste_disque.numero ORDER BY liste_proprietaire.proprietaire ASC; Dans ce cas, nous n'avons plus la ligne WHERE liste_disque.auteur = "Cassius" mais la ligne WHERE liste_disque.auteur LIKE "c%". Ce changement implique que nous allons choisir non pas les disques dont l'auteur est Cassius mais les disques dont l'auteur commence par la lettre c. © 2002 - 2007 - Page 2/5 On aurait également pu faire :
Et dans ce cas, nous aurions sélectionné les tuples dont l'attribut auteur de la table liste_disque contient la lettre s. Remarque : La clause LIKE n'est pas limitée à une seule lettre. En effet, on peut très bien faire un LIKE avec un mot complet. Maintenant que vous connaissez tout de la sélection de tuples en langage SQL, nous allons voir comment intégrer ces requêtes SQL à vos pages PHP. Créons une page PHP nous permettant de réaliser exactement la même requête que la première de ce tutorial, c'est-à-dire la sélection du numéro de téléphone de LA GLOBULE. On a alors le code suivant : exemple1<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Numéro de téléphone de LA GLOBULE</title> </head> <body> <?php // lancement de la requete $sql = 'SELECT telephone FROM liste_proprietaire WHERE nom = "LA GLOBULE"'; se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on recupere le resultat sous forme d'un tableau $data = mysql_fetch_array($req); // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); mysql_close (); ?> Le numéro de téléphone de LA GLOBULE est :<br /> <?php echo $data['telephone']; ?> </body> </html> Ce qui affichera à l'écran : © 2002 - 2007 - Page 3/5 Le numéro de téléphone de LA GLOBULE est : 06-48-85-20-54 Mettons maintenant dans le cas où l'interrogation de la base de données ne retourne pas un, mais un certain nombre de tuples (nombre que l'on ne connaît pas). En effet, recherchons tous les noms de propriétaires de disque, ainsi que leur numéro de téléphone. On aura alors le code suivant : exemple2<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Nom et tél des membres</title> </head> <body> <?php // lancement de la requête (on impose aucune condition puisque l'on désire obtenir la liste complète des propriétaires $sql = 'SELECT telephone, nom FROM liste_proprietaire'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on va scanner tous les tuples un par un while ($data = mysql_fetch_array($req)) { // on affiche les résultats echo 'Nom : '.$data['nom'].'<br />'; echo 'Son tél : '.$data['telephone'].'<br /><br />'; } mysql_free_result ($req); mysql_close (); ?> </body> </html> Pour finir, nous pouvons juste dire que lorsque l'on effectue une sélection qui contient une jointure, le principe reste exactement le même. Que faire en plus ? Afin d'améliorer vos sélections, vous pouvez faire dépendre vos sélections du résultat obtenu par un formulaire. En effet, imaginons une première page avec un formulaire nous permettant de choisir le nom d'un propriétaire via un menu déroulant. Ensuite, dans la page où vous allez faire votre requête (qui donc être également la page contenue dans le champ action de votre formulaire), vous allez récupérer une variable, par exemple $_POST['nom_proprio'] (cf. le tutorial sur la récupération des données par le biais des formulaires). De plus, imaginons que l'on désire retrouver le numéro de téléphone de ce propriétaire (celui choisi dans le menu-déroulant). On aura alors (page pointée par le champ action du formulaire): exemple3<?php © 2002 - 2007 - Page 4/5 // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Numéro de téléphone du membre choisi</title> </head> <body> <?php // on teste si notre variable est déclarée if (isset($_POST['nom_proprio'])) { // lancement de la requête $sql = 'SELECT telephone FROM liste_proprietaire WHERE nom = "'.$_POST[ 'nom_proprio'].'"'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on récupère le résultat sous forme d'un tableau $data = mysql_fetch_array($req); // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); mysql_close (); // on affiche le résultat echo 'Le numéro de téléphone est : '.$data['telephone']; } ?> </body> </html> Ouf :) On a enfin fini ce tutorial primordial. Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 23:05 © 2002 - 2007 - Page 5/5 Insérer des données dans votre baseNous allons maintenant voir comment faire pour insérer des données dans les tables de votre base de données. Comme pour le tutorial précédent, nous allons le faire en se basant sur l'exemple pris lors du tutorial faisant une introduction sur les bases de données. Et tout comme dans le tutorial précédent, nous allons tout d'abord voir comment faire ces insertions en SQL, puis nous verrons comment les faire directement à partir de vos pages WEB. Pour vous remettre les idées au clair, je vous que l'on avait alors deux tables, dont la structure ressemble à : La table liste_proprietaire :
La table liste_disque :
Supposons alors que l'on décide d'ajouter un nouveau propriétaire de disques : tibo par exemple. Pour insérer ce nouveau propriétaire, il faut fournir au SGBD les informations lui permettant d'insérer ce nouveau tuple dans la table liste_proprietaire. Ces informations sont : - le numéro du nouveau propriétaire - le nom du nouveau propriétaire - son numéro de téléphone Bref, vous le voyez par vous-même, il s'agit en fit de fournir tous les attributs de la table afin de produire un nouveau tuple. On aura alors : INSERT INTO liste_proprietaire VALUES ('','tibo','06-98-42-01-36'); On remarque tout de suite que la syntaxe pour une insertion est relativement simple. En effet, étudions ce code : On insére où ? --> dans la table liste_proprietaire On insérer quoi ? --> la valeur des différents attributs, c'est-à-dire une première valeur qui correspond à l'attribut numero (qui je vous le rappelle est AUTO_INCREMENT, on n'a donc pas l'utilité de préciser sa valeur, le SGBD sachant quoi mettre), puis on insère la valeur tibo pour l'attribut nom, et enfin la valeur 06-98-42-01-36 pour l'attribut telephone. © 2002 - 2007 - Page 1/4 Simple, non ? Passons tout de suite à l'insertion d'un nouveau tuple, et ce, à partir d'une page WEB. Supposons que l'on désire insérer exactement le même tuple que dans l'exemple précédent (c'est-à-dire que tibo fait tellement partie de nos amis, qu'on a envie de partager nos disques avec lui). On aura alors : exemple1<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Insertion de tibo dans la base</title> </head> <body> <?php // lancement de la requete $sql = 'INSERT INTO liste_proprietaire VALUES ("", "tibo", "06-98-42-01-36")'; // on insere le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die) mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base mysql_close(); ?> Tibo vient d'être inseré dans la base. </body> </html> Imaginons, alors que l'on désire alors ajouter à la base un disque grâce à la contribution de tibo. Dans l'absolu, réfléchissons une minute sur ce que nous avons besoin : - il s'agit d'un nouveau disque (soit son auteur et son titre). Comment qu'on fait donc ce truc ? En effet, on voit bien que si l'on insère directement un nouveau disque, la jointure entre les deux tables risque de ne pas se faire. En fait, il faudrait tout d'abord sélectionner le numéro qu'a pris tibo dans la table_proprietaire (par le biais d'un requete SQL de type SELECT, je vous renvoies au tutorial précèdent pour revoir la récupération des données d'une base). Cependant, imaginons que nous n'avons pas encore inséré le propriétaire tibo dans notre base de données, et que l'on désire directement insérer ce nouveau propriétaire ainsi qu'un disque lui appartenant. Nous allons voir comment récupérer simplement le nouveau numero qui vient d'être inséré (donc celui de tibo) et ainsi l'utiliser pour insérer notre disque. On a : exemple2<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Insertion de tibo et d'un nouveau disque dans la base</title> © 2002 - 2007 - Page 2/4 </head> <body> <?php // on prépare la requête $sql = 'INSERT INTO liste_proprietaire VALUES("", "tibo", "06-98-42-01-36")'; // on insère le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die) mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on récupère le dernier numéro inséré, soit le numéro de tibo $numero_insere = mysql_insert_id(); // on insère le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die) $sql = 'INSERT INTO liste_disque VALUES ("'.$numero_insere.'", "The supermen lovers", "The player")'; // on insère le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die) // on ferme la connexion à la base mysql_close(); ?> Tibo vient d'être inseré dans la base, ainsi que son nouveau disque : The player des Supermen lovers. </body> </html> Que faire en plus ? Et bien, tout comme dans le tutorial précédent, vous pouvez rendre vos insertions vraiment dynamiques en effectuant tout simplement vos insertions à partir des valeurs fournies par un formulaire. Imaginons que l'on désire insérer des nouveaux disques. Supposons que l'on dispose d'une page html contenant un formulaire permettant de saisir le nom du propriétaire, et que ce formulaire vous demande également le titre d'un album ainsi que son interprète (on suppose également que le champ action de notre formulaire correspond au nom de la page PHP qui traite les données, soit la page contenant le code ci-dessous). On suppose enfin, que le champ du formulaire contenant le nom du propriétaire porte le nom proprio (on pourra alors utiliser la variable $_POST['proprio'] dans notre page PHP, tout en supposant de notre formulaire à une méthode POST et npn GET), que le champ contenant l'interprète porte le nom interprete et que le champ contenant le titre porte le nom titre. On aura alors : exemple3<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Insertion de nouveaux disques dans la base</title> </head> <body> <?php // on teste si les variables du formulaire sont bien déclarées if (isset($_POST['proprio']) && isset($_POST['interprete']) && isset($_POST['titre'])) { // on prépare la requête pour récupérer le numero du propriétaire $sql = 'SELECT numero FROM liste_proprietaire WHERE nom = "'.$_POST['proprio'].'"' © 2002 - 2007 - Page 3/4 ; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on récupère le résultat sous forme d'un tableau $data = mysql_fetch_array($req); // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); // on insère le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die) $sql = 'INSERT INTO liste_disque VALUES("'.$data['numero'].'", "'.$_POST[ 'interprete'].'", "'.$_POST['titre'].'")'; // on insère le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die) mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base mysql_close(); echo 'Nous venons d\'insérer un nouveau disque : '.$_POST['titre'].' de '.$_POST[ 'interprete'].' appartenant à '.$_POST['proprio']; } else { echo 'Les variables du formulaire ne sont pas déclarées'; } ?> </body> </html> Et voila :) Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 23:05 © 2002 - 2007 - Page 4/4 Modifier des données de votre baseAprès avoir vu comment on affiche les données d'une base de données et comment on les insère, voyons maintenant comment modifier ces données. Reprenons les deux tables que nous étudions depuis le début des tutoriaux sur les bases de données. Je vous rappelle que l'on avait alors : La table liste_proprietaire :
La table liste_disque :
Voyons, en SQL tout d'abord comment modifié un tuple de la table liste_proprietaire. Supposons que Benoît vienne de changer son numéro de portable (et que son nouveau numéro est : 06-55-99-10-00), il faudra alors faire la modification dans la base de données afin que soit ancien numéro soit remplacé par le nouveau. On aura alors : UPDATE liste_proprietaire SET telephone="06-55-99-10-00" WHERE nom="Benoît"; En effet, on modifie quelle table ? On modifie liste_proprietaire. Quel attribut modifie-t-on ? On modifie l'attribut telephone (qui prendra la valeur 06-55-99-10-00). Et on fait les modifications pour quel(s) tuple(s) ? On modifie le(s) tuple(s) où l'attribut nom prend la valeur Benoît (dans notre cas, seul un tuple sera modifié car notre table comporte qu'un seul tuple où l'attribut nom prend la valeur Benoît). Simple non ? En revanche, notez bien que dans notre clause WHERE, nous n'avons mis qu'une seule condition. Bien évidemment, tout est possible, vous pouvez en mettre plusieurs (ainsi que des clauses utilisant le LIKE vu dans les tutoriaux précédents). Tout dépend des tuples que vous voulez modifier. © 2002 - 2007 - Page 1/4 Cependant, imaginons que nous désirons modifier plusieurs attributs d'un même tuple. En effet, supposons alors que nous possédons dans notre base de données une table ressemblant à la table liste_proprietaire (que nous avons déjà étudié), mais qui comportera plus d'attributs, comme par exemple l'adresse du propriétaire ainsi que son age. On pourrait alors très bien avoir une table ressemblant à ceci :
Supposons alors que l'on se soit trompé dans l'age de Benoît et qu'au lieu d'avoir 66 ans (il n'est pas si vieux que ça notre Benoît !), et bien, il a tout simplement 65 ans :) Supposons également que l'adresse de Benoît soit erronée et qu'il n'habite pas 2 rue des tulipes, mais 3 rue des tulipes. On aura alors : UPDATE liste_proprietaire SET adresse="3, rue des tulipes", age="65" WHERE nom="Benoît"; On remarque alors qu'il suffit de séparer les diverses modifications opérées sur un même tuple par une simple virgule. Voyons maintenant comment effectuer ces modifications dans une page PHP. Pour ce faire, prenons notre deuxième modification, celle concernant l'adresse et l'age de Benoît. On aura alors : exemple1<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Modification du tél et de l'adresse de Benoît</title> </head> <body> <?php // lancement de la requête $sql ='UPDATE liste_proprietaire SET adresse="3, rue des tulipes", age="65" WHERE nom="Benoît"'; // on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base mysql_close(); ?> L'adresse et l'age de Benoît viennent d'être modifiés. </body> </html> Attention !!! © 2002 - 2007 - Page 2/4 En effet, les modifications peuvent être vraiment dangereuses pour votre base de données. En effet, si vous ne prenez pas un minimum de précaution pour effectuer vos modifications, vous pouvez très bien modifier un tuple d'une table et perde en même temps la jointure avec une autre table. Ceci implique donc que si pour une raison ou pour une autre, nous sommes amené à modifier ce numéro (dans la table liste_proprietaire par exemple), il faudra également penser à faire la modification de ce même numéro dans l'autre table (liste_disque) afin que la jointure entre les deux tables soit toujours fonctionnelle. Que faire en plus ? Et bien comme dans les tutoriaux précédents, vous pouvez effectuer des modifications de tuples par le biais de formulaires. Par exemple, supposons que l'on dispose d'un page WEB comportant un formulaire disposant des champs suivants : - un menu déroulant (de NAME proprio) permettant de choisir le nom d'un propriétaire. - un champs texte classique (de NAME nouvelle_adresse) permettant à l'utilisateur de saisir une nouvelle adresse pour le propriétaire sélectionne dans le menu déroulant Supposons ensuite que ce formulaire a pour balise ACTION la page qui nous permet de modifier l'adresse du propriétaire en question. On aura alors le code suivant (pour la page ) : exemple2<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Modification de l'adresse d'un propriétaire</title> </head> <body> <?php // on teste si les variables du formulaire sont déclarées if (isset($_POST['nouvelle_adresse']) && isset($_POST['proprio'])) { // lancement de la requête $sql = 'UPDATE liste_proprietaire SET adresse="'.$_POST['nouvelle_adresse'].'" WHERE nom="'.$_POST['proprio'].'"'; // on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base mysql_close(); 'nouvelle_adresse']; } else { echo 'Les variables du formulaire ne sont pas déclarées'; } ?> </body> </html> © 2002 - 2007 - Page 3/4 Et maintenant, vous êtes vraiment parés pour faire vos modifications de tuples :) Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 23:06 © 2002 - 2007 - Page 4/4 Supprimer des données de votre baseAprès avoir vu l'affichage des données provenant d'une base de données, l'insertion et la modification de ces mêmes données, voyons maintenant la dernière opération fondamentale concernant ces base de données : la suppression de tuples. Reprenons alors nos deux tables liste_proprietaire et liste_disque que nous avons utilise pendant tous les tutoriaux concernant les bases de données. Je vous rappelle que l'on avait alors : La table liste_proprietaire :
La table liste_disque :
Voyons alors, en SQL, comment supprimer un tuple de la table liste_proprietaire. Supposons que l'on désire supprimer Tibo de notre base de données. On écrira alors : DELETE from liste_proprietaire WHERE nom="Tibo"; En effet, on efface un tuple (ou plusieurs, tout dépend de la clause WHERE) de quelle table ? De la table liste_proprietaire. Quel(s) tuple(s) efface-t-on ? On efface tous les tuples de la table liste_proprietaire ou l'attribut nom prend la valeur Tibo (dans notre cas, un seul tuple porte la valeur Tibo pour l'attribut nom). Cependant, je vous rappelle que des requêtes SQL peuvent être beaucoup plus complexes, et dans ce cas, je vous renvoie à la documentation MySQL, ce qui à notre niveau (débutant) n'est pas vraiment intéressant (cela ne sert à rien de vous embrouiller les idées dès le départ). Attention !!! Lorsque l'on effectue une suppression de tuples, il faut toujours faire attention à effacer non seulement les tuples de la table dont on veut supprimer le(s) élément(s) mais éventuellement les autres tuples d'une autre table (si les deux © 2002 - 2007 - Page 1/3 // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Suppression d'un membre de la base</title> </head> <body> <?php // on teste si la variable du formulaire est bien déclarée if (isset($_POST['proprio'])) { // on recherche le numero du membre à supprimer $sql = 'SELECT numero FROM liste_proprietaire WHERE nom = "'.$_POST[proprio].'"'; // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die) $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); // on recupere le resultat sous forme d'un tableau $data = mysql_fetch_array($req); // on recupere la valeur qui nous intersse $numero_du_proprio = $data['numero']; // on libère l'espace mémoire alloué pour cette interrogation de la base mysql_free_result ($req); // lancement de la requête pour effacer notre membre $sql ='DELETE from liste_proprietaire WHERE nom="'.$_POST['proprio'].'"'; // on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // lancement de la requête pour effacer les disques de notre membre // on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base mysql_close(); // un petit message afin de voir ce qui s'est passé echo 'Nous venons de supprimer '.$_POST['proprio'].' de la base ainsi que tous ces disques'; } else { echo 'La variable de notre formulaire n\'est pas initialisée.'; } ?> </body> </html> Et voila, maintenant, vous devez maîtriser tout ce qui concerne les bases de données et les pages dynamiques en PHP. Auteur : LA GLOBULE Dernière révision du cours : le 29/05/2007 à 23:07 © 2002 - 2007 - Page 3/3 tables sont jointes par le biais d'un attribut). En effet, dans notre exemple, nous venons de supprimer de la table liste_proprietaire le tuple dont l'attribut nom valait Tibo. Cependant, on remarque que la table liste_disque comporte des éléments qui étaient liés à Tibo. Or, vu que ces elements ne nous servent plus à rien maintenant (car on a supprimer Tibo de la liste), il faut également penser à les supprimer (afin d'avoir une base de données homogène). Voyons maintenant comment effectuer ces suppressions par le biais d'une page WEB écrite en PHP. Prenons par exemple le cas d'une page PHP permettant la suppression de Tibo de la base de données ainsi que de toutes les informations le concernant (c'est-à-dire les disques lui appartenant). On aura alors : exemple1<?php // on se connecte à notre base $base = mysql_connect ('serveur', 'login', 'pass'); mysql_select_db ('ma_base', $base) ; ?> <html> <head> <title>Suppression de Tibo de la base</title> </head> <body> <?php // lancement de la requête pour effacer Tibo $sql ='DELETE from liste_proprietaire WHERE nom="Tibo"'; se passait pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // lancement de la requête pour effacer les disques de Tibo (je vous rappelle que Tibo à le numéro 4) $sql ='DELETE from liste_disque WHERE numero="4"'; // on exécute la requête (mysql_query) et on affiche un message au cas où la requête ne se passait pas bien (or die) mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); // on ferme la connexion à la base mysql_close(); ?> Tibo et tous ces disques ont étés supprimés de la base de données. </body> </html> Que faire en plus ? Comme dans les tutoriaux précédents, afin de rendre vos pages beaucoup plus dynamiques, il serait intéressant de faire une page WEB contenant un formulaire possédant un menu déroulant permettant de choisir le nom du membre à effacer. On suppose alors que ce menu déroulant à le champ NAME qui prend la valeur proprio, et que le formulaire a son champ ACTION qui prend la valeur . Ceci implique que dans la page , on aura une variable $proprio qui contient le nom du propriétaire à supprimer. On aura alors le code suivant (pour la page placée dans le même répertoire que la page WEB contenant le formulaire) : exemple2<?php © 2002 - 2007 - Page 2/3 Les cookiesDans ce tutorial, nous allons voir comment cr? des cookies, et surtout comment bien les manipuler. Tout de suite, mettons les choses au clair. En effet, beaucoup de personnes d'imaginent que les cookies sont des petites b?s malveillantes (alors que c'est totalement faux), tout simplement parce qu'elles ne savent pas exactement de quoi il s'agit. Par exemple, on pourrait tr?bien stocker dans ce cookie le nom du visiteur et par la suite, afficher son nom ?haque fois qu'il se connectera sur le site (ceci bien sur, s'il n'efface pas les cookies de son disque dur). Cependant, tout cela n'arrive pas par le saint esprit. En effet, ceci n'est possible que si le visiteur ?ntr?ui-m? ses informations dans un formulaire sur le site. Les cookies sont stock? selon votre navigateur Internet, ?n certain endroit de votre disque dur. Par exemple, avec un syst? compos?e Windows et du navigateur INTERNET EXPLORER (le plus usit? Dans cette configuration, les cookies sont stock?dans le r?rtoire C:WindowsTemporary Internet Files comme ci-dessous : Voyons ?r?nt comment cr? de tels cookies, gr? ?a fonction setcookie(). Soit alors la portion de code suivante : exemple1<?php // on d?nit une dur?de vie de notre cookie (en secondes), donc un an dans notre cas $temps = 365*24*3600; // on envoie un cookie de nom pseudo portant la valeur LA GLOBULE setcookie ("pseudo", "LA GLOBULE", time() + $temps); ?> Explications : Gr? ?e code, nous venons d'envoyer, chez le client (donc le visiteur du site) un cookie de nom pseudo portant la valeur LA GLOBULE. De plus, time() retournant le nombre de secondes ?ul? depuis le 1er janvier 1970 jusqu'?'instant pr?nt, nous imposons que le cookie ai une dur?de vie de un an (soit en fait l'instant pr?nt plus un an, donc un an). Enfin, maintenant, si le visiteur ne supprime pas ce cookie, et bien, dans toutes les pages WEB de notre site, on pourra acc?r ?a variable $pseudo qui contiendra la cha? de caract?s LA GLOBULE. En revanche, l'envoie d'un cookie ayant la m? valeur pour tous les visiteurs d'un site, ce n'est pas vraiment int?ssant. On aurait alors le code suivant pour notre page (par exemple ) : exemple2<html> <head> <title>Index du site</title> <body> <? // on teste la d?aration de notre cookie if (isset($_COOKIE['pseudo'])) { © 2002 - 2009 - Page 1/3 © 2002 - 2009 - Page 3/3 echo 'Bonjour '.$_COOKIE['pseudo'].' !'; } else { echo 'Notre cookie n\'est pas d?ar?; // si le cookie n'existe pas, on affiche un formulaire permettant au visiteur de saisir son nom echo '<form action="" method="post">'; echo 'Votre nom : <input type = "texte" name = "nom"><br />'; echo '<input type = "submit" value = "Envoyer">'; } ?> </body> </html> Et le code pour la page : exemple3<?php If (isset($_POST['nom'])) { // on d?nit une dur?de vie de notre cookie (en secondes), donc un an dans notre cas $temps = 365*24*3600; // on envoie un cookie de nom pseudo portant la valeur de la variable $nom, c'est-?ire la valeur qu'a saisi la personne qui a rempli le formulaire setcookie ("pseudo", $_POST['nom'], time() + $temps); // fonction nous permettant de faire des redirections function redirection($url){ if (headers_sent()){ print('<meta http-equiv="refresh" content="0;URL='.$url.'">'); } else { header("Location: $url"); } } // on effectue une redirection vers la page d'accueil redirection (''); } else { echo 'La variable du formulaire n\'est pas d?ar?'; } ?> Attention !!! Plusieurs conditions sont ?especter afin que l'utilisation des cookies se passe au mieux : - l'envoie d'un cookie doit ?e la premi? fonction PHP que vous utilisez dans votre script, ce qui veut dire que vous devez utiliser la fonction setcookie() tout en haut de votre script (AUCUN AFFICHAGE ET AUCUN CODE CODE HTML AVANT UN SETCOOKIE). Si d'autres fonctions interviennent avant l'envoie du cookie, celui-ci ne fonctionnera pas. Note : Pour effacer un cookie, vous devez lancer un cookie qui aura le m? nom que le cookie que vous voulez effacer, tout en lui donnant une valeur nulle (vous pouvez ?lement l'envoyer avec un temps de vie d?ss? © 2002 - 2009 - Page 2/3 Les sessionsVoyons maintenant un tutorial vraiment important pour la sécurité de vos scripts : les sessions. En effet, afin de transmettre des variables de pages en pages, plusieurs possibilités s'offrent à vous : - les divers champs des formulaires, qu'ils soient hidden ou non. - passer les variables directement à travers les liens. - utiliser les cookies. - utiliser les sessions. Cependant, toutes ces possibilités n'offrent pas le même niveau de sécurité. En effet, certaines de ces possibilités sont vraiment pratiquent dans leurs modes d'utilisation (comme les cookies par exemple mais tout le monde n'est pas obligé d'accepter les cookies), ce qui implique, dans la majorité des cas, un bas niveau de sécurité (cas du passage des variables par les liens, ce qui implique que les variables seront visibles de tout le monde). De même, faire dans chaque page un formulaire contenant des champs hidden permettant de faire circuler les différentes variables à travers toutes les pages du site n'est pas vraiment pratique. C'est pourquoi, dans tous ces cas où la sécurité de vos données est primordiale, vous devrez utiliser les sessions qui vous permettront de faire circuler différentes variables (comme un mot de passe par exemple) à travers les pages de votre site, tout en étant assez confortables à l'emploi. Pour utiliser les sessions, différentes fonctions PHP s'offrent à nous. Voici déjà un petit tableau vous permettant de vous familiariser avec ces différentes fonctions (que nous détaillerons bien sur dans la suite de ce tutorial) :
Sachez également qu'ils existent d'autres fonctions agissant sur les sessions. En revanche, étant donné qu'elles ne sont pas nécessaires à la compréhension de notre tutorial, nous ne les détaillerons pas ici (cf. la documentation pour de plus amples informations). Cependant, ces fonctions commencent toujours par session. Attention !!! Avant d'aller plus loin dans le tutorial, vous devez savoir que les sessions ne sont accessibles qu'à partir de PHP 4. Cependant, je vous rassure, la plupart des hébergeurs sont aujourd'hui fait évoluer leur PHP en PHP 4. Afin de voir concrètement comment fonctionnent les sessions, prenons alors un exemple simple : - imaginons que notre site possède une section membre où chaque membre devra se logué avant de pouvoir y entrer. - de plus, on aimerait bien être sur qu'il s'agisse toujours de ce même membre qui est connecté. On aura alors une page contenant un formulaire permettant à notre visiteur de se connecter à une section membre (page ) : © 2002 - 2007 - Page 1/4 exemple1<html> <head> <title>Formulaire d'identification</title> </head> <body> <form action="" method="post"> Votre login : <input type="text" name="login"> <br /> Votre mot de passé : <input type="password" name="pwd"><br /> <input type="submit" value="Connexion"> </form> </body> </html> On aura alors par exemple (page ) : exemple2<?php // On définit un login et un mot de passe de base pour tester notre exemple. Cependant, vous pouvez très bien interroger votre base de données afin de savoir si le visiteur qui se connecte est bien membre de votre site $login_valide = "moi"; $pwd_valide = "lemien"; // on teste si nos variables sont définies if (isset($_POST['login']) && isset($_POST['pwd'])) { // on vérifie les informations du formulaire, à savoir si le pseudo saisi est bien un pseudo autorisé, de même pour le mot de passe if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) { // dans ce cas, tout est ok, on peut démarrer notre session // on la démarre :) session_start (); // on enregistre les paramètres de notre visiteur comme variables de session ($login et $pwd) (notez bien que l'on utilise pas le $ pour enregistrer ces variables) $_SESSION['login'] = $_POST['login']; $_SESSION['pwd'] = $_POST['pwd']; // on redirige notre visiteur vers une page de notre section membre header ('location: '); } else { // Le visiteur n'a pas été reconnu comme étant membre de notre site. On utilise alors un petit javascript lui signalant ce fait echo '<body onLoad="alert(\'Membre non reconnu \')">'; // puis on le redirige vers la page d'accueil echo '<meta http-equiv="refresh" content="0;">'; } } else { echo 'Les variables du formulaire ne sont pas déclarées.'; } ?> © 2002 - 2007 - Page 2/4 Remarquer également que nous utilisons notre session_start avant tout code HTML. Voyons alors le code de la page de notre section membre, la page . On a : exemple3<?php // On démarre la session (ceci est indispensable dans toutes les pages de notre section membre) session_start (); // On récupère nos variables de session if (isset($_SESSION['login']) && isset($_SESSION['pwd'])) { echo '<html>'; echo '<head>'; echo '<title>Page de notre section membre</title>'; echo '</head>'; echo '<body>'; echo 'Votre login est '.$_SESSION['login'].' et votre mot de passe est '.$_SESSION ['pwd'].'.'; echo '<br />'; // On affiche un lien pour fermer notre session echo '<a href="/">Déconnection</a>'; } else { echo 'Les variables ne sont pas déclarées.'; } ?> Voyons alors le code de la page permettant au membre de se déconnecter (la page ). On aura alors : exemple4<?php // On démarre la session session_start (); // On détruit les variables de notre session session_unset (); // On détruit notre session session_destroy (); // On redirige le visiteur vers la page d'accueil header ('location: '); ?> Résumons alors tout ce que nous venons de voir : - chaque session à un id différent (ce qui permet d'éviter la confusion entre les connexions). - à chaque page où notre session doit être active, on doit placer un session_start en tout début de page (avant tout code HTML). - toutes les variables enregistrées au cours de notre session, seront accessibles dans les pages de notre session. - n'oubliez JAMAIS de détruire vos variables de session lors de la déconnexion. En respectant ces règles vous pourrez très rapidement faire vous-même votre espace membre, voir même pourquoi pas une boutique en ligne :) © 2002 - 2007 - Page 3/4 Auteur : LA GLOBULE Dernière révision du cours : le 30/05/2007 à 00:11 © 2002 - 2007 - Page 4/4 Les variables globalesVoici le tutorial concernant les variables globales. Ceci n'est pas vraiment un tutorial, mais plutôt une note d'information. En conséquence, suivant votre hébergeur, et donc de sa configuration de PHP, il se pourrait très bien que tout ce que vous avez vu jusque là ne fonctionne pas sur votre site. Cependant, cette différence d'initialisation de paramètre n'influence que sur la méthode permettant de récupérer les variables, que ce soit : - des variables provenant de formulaires POST ou GET - la valeur des cookies - des variables de sessions - des variables d'environnement - des variables de serveurs Comme vous le savez, auparavant, pour récupérer nos variables, on les appelait simplement avec un $ suivi de leur nom. Dans le cas où les variables globales ne sont activées, vous ne pouvez plus utiliser cette méthode afin de récupérer vos variables. En effet, maintenant, nous récupérerons toutes cas variables et toutes ces valeurs par le biais de tableaux associatifs, que l'on résumer ainsi :
Voyons alors maintenant, cas par cas, comment récupérer ces variables et ces valeurs. Le cas des formulaires GET (ou des variables passées par une URL) : Supposons que l'on a une page contenant un formulaire permettant de saisir un login ainsi qu'un mot de passe. On pourrait alors très bien avoir une page ressemblant à : exemple1<html> <head> <title>Formulaire d'identification</title> </head> <body> <form action="" method="get"> © 2002 - 2007 - Page 1/9 <br /> Votre mot de passe : <input type="password" name="pwd"><br /> <input type="submit" value="Connexion"> </form> </body> </html> Pour récupérer nos variables correspondant aux champs login et pwd, nous allons utiliser le tableau associatif $_GET. On aura lors, par exemple, la page suivante : exemple2<html> <head> <title>Page de récupération des variables</title> </head> <body> <?php // On teste si nos variables sont déclarées if (isset($_GET['login']) && isset($_GET['pwd'])) { // On fait ce que l'on veut ensuite :) echo 'Votre login est '.$_GET['login'].' Et votre mot de passe est '.$_GET['pwd']; } else { echo 'Les variables du formulaire ne sont pas déclarées.'; } ?> </body> </html> Simple, non ? :) Précisons également, que lorsque l'on passe des variables par une URL, la méthode ne change absolument pas. En effet, imaginons la page suivante : exemple3<html> <head> <title>Juste un lien :)</title> </head> <body> <a href="/?login=GLOBULE&pwd=haha">Notre lien</a> </body> </html> Et bien en gardant la même page que précédemment, l'affichage de la page serait strictement identique que dans le cas du formulaire GET. Le cas des formulaires POST : La méthode et strictement identique que le cas des formulaires GET, sauf, naturellement, au lieu d'utiliser le tableau associatif $_GET, nous allons ici utiliser le tableau associatif $_POST. En reprenant les mêmes exemples que précédemment, on aurait alors : © 2002 - 2007 - Page 2/9 - la page exemple4 <html> <head> <title>Formulaire d'identification</title> </head> <body> <form action="" method="get"> Votre identifiant : <input type="text" name="login"> <br /> <input type="submit" value="Connexion"> </form> </body> </html> - la page exemple5<html> <head> <title>Page de récupération des variables</title> </head> <body> <?php // On teste nos deux variables if (isset($_POST['login']) && isset($_POST['pwd'])) { // On fait ce que l'on veut ensuite :) echo 'Votre login est '.$_POST['login'].' Et votre mot de passe est '.$_POST['pwd' ]; } else { 'Les variables du formulaire ne sont pas déclarées.'; } ?> </body> </html> Récupération d'un fichier par le biais d'un formulaire : Supposons que l'on dispose d'un formulaire nous permettant d'envoyer un fichier. On pourrait alors très bien avoir une page ressemblant à : exemple6<html> <head> <title>Formulaire permettant d'envoyer un fichier</title> </head> <body> <form action="" method="post" ENCTYPE="multipart/form-data"> Votre fichier : <input type="file" name="mon_fichier"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="20000"> <input type="submit" value="Envoyer"> </form> © 2002 - 2007 - Page 3/9 </body> </html> Dans la page , on a alors accès aux différentes valeurs (suivant les indices) prises par le tableau associatif $_FILES. Voici les valeurs que contient ce tableau (suivant les différents indices) :
|