Création de Pages Web Dynamiques Côté Serveur (En PHP)
Création de Pages Web Dynamiques Côté Serveur (En PHP)
Création de Pages Web Dynamiques Côté Serveur (En PHP)
PERL
– Surcharge rapide du serveur par la création de plusieurs processus
– Employé sur de nombreux serveurs. Il tourne sur de nombreuses
plateformes : Unix, Linux, Windows, Mac
– Prévu à l'origine pour la manipulation de chaînes de caractères, il
est rapidement devenu un véritable langage orienté objet.
– Abord difficile et faible lisibilité.
Introduction(9)
Utilisation de Java
– Au départ simple extension du langage Java
– Est devenu un véritable langage de développement web
Lenteur relative
Introduction(11)
Les langages de création de page web dynamiques côté
serveur
PHP
Histoire et Origine
PHP : Hypertext PreProcessor
Première version de PHP a été mis au point au début d'automne
par Rasmus Lerdorf en 1994
Version appelée à l'époque Personal Home Pages
Pour conserver la trace des utilisateurs venant consulter son CV sur son
site, grâce à l'accès à une base de données par l'intermédiaire de
requêtes SQL
La version 3.0 de PHP fut disponible le 6 juin 1998
A la fin de l'année 1999, une version bêta de PHP, baptisée PHP4 est
apparue
En 2001 cinq millions de domaines utilisent PHP
trois fois plus que l’année 2000
PHP : C’est QUOI ?
Définition
Un langage de scripts permettant la création d’applications Web
Indépendant de la plate-forme utilisée puisqu’il est exécuté côté
serveur et non côté client.
La syntaxe du langage provient de celles du langage C, du Perl et
de Java.
Ses principaux atouts sont:
La gratuité et la disponibilité du code source (PHP4 est distribué
sous licence GNU GPL)
La simplicité d'écriture de scripts
La possibilité d'inclure le script PHP au sein d'une page HTML
La simplicité d'interfaçage avec des bases de données
L'intégration au sein de nombreux serveurs web (Apache,
Microsoft IIS, ...)
Intégration PHP et HTML (1)
Principe
Les scripts PHP sont généralement intégrés dans le code d’un
document HTML
L’intégration nécessite l’utilisation de balises
avec le style xml : <? ligne de code PHP ?>
Avec le style php: <?php ligne de code PHP ?>
< ?php
//ligne de code PHP
?>
<html>
<head> <title> Mon script PHP
</title> </head>
<body>
//ligne de code HTML
< ?php
//ligne de code PHP
?>
//ligne de code HTML
….
</body> </html>
Intégration PHP et HTML (3)
Forme d’une page PHP
Inclure un fichier PHP dans un fichier HTML : include()
<html>
<?php
<head> $chaine=$salut. “ , C’est PHP “ ;
<title> Fichier d’appel </title> echo “ <table border= \“3“
</head> <tr> <td width = “ 100%\ “ >
<body> <h2> $chaine</h2>
<?php </td> </tr></table> “;
$salut = “ BONJOUR” ; ?>
include “information.inc” ;
?>
</body>
</html>
Intégration PHP et HTML (4)
Envoi du code HTML par PHP
Les commentaires
/* Voici un commentaire! */
// un commentaire sur une ligne
Syntaxe de base : Les constantes
Les constantes
Define("nom_constante", valeur_constante )
define (“ma_const”, “Vive PHP4”) ;
define (“an”, 2002) ;
Principe
Commencent par le caractère $
N'ont pas besoin d'être déclarées
Fonctions de vérifications de variables
Doubleval(), empty(), gettype(), intval(),
is_array(), is_bool(), is_double(), is_float(), is_int(), is_integer, is_long(),
is_object(), is_real(), is_numeric(), is_string()
Isset(), settype(), strval(), unset()
<?
$var = 100;
function test(){
global $var;
return $var;}
$resultat = test();
if ($resultat) echo $resultat; else echo " erreur ";
?>
Syntaxe de base : Les variables(3)
Les variables dynamiques
Permettent d'affecter un nom différent à une autre variable
$nom_variable = 'nom_var';
$$nom_variable = valeur; // équivaut à $nom_var = valeur;
Les variables tableaux sont également capables de supporter les noms
dynamiques
$nom_variable = array("val0", "val1", ...,"valN");
${$nom_variable[0]} = valeur; $val0 = valeur;
$nom_variable = "nom_var";
${$nom_variable}[0] = valeur;
$nom_var[0] = valeur;
Les accolades servent aussi à éviter toute confusion lors du rendu
d'une variable dynamique
echo "Nom : $nom_variable - Valeur : ${$nom_variable}";
// équivaut à echo "Nom : $nom_variable - Valeur :
$nom_var";
Syntaxe de base : Les variables (4)
Variables prédéfinies
Les variables d'environnement dépendant du client
Variable Description
$_SERVER["HTTP_HOST"] Nom d'hôte de la machine du client (associée
à l'adresse IP)
$_SERVER["HTTP_REFERER"] URL de la page qui a appelé le script PHP
$_SERVER["HTTP_ACCEPT_LANGUAGE"] Langue utilisée par le serveur (par défaut en-
us)
$_SERVER["HTTP_ACCEPT"] Types MIME reconnus par le serveur
(séparés par des virgules)
$_SERVER["CONTENT_TYPE"] Type de données contenu présent dans le
corps de la requête. Il s'agit du type MIME
des données
$_SERVER["REMOTE_ADDR"] L'adresse IP du client appelant le script CGI
Syntaxe de base : Les variables (5)
Variables prédéfinies
Les variables d'environnement dépendant du serveur
Variable Description
$_SERVER["SERVER_NAME"] Le nom du serveur
$_SERVER["HTTP_HOST"] Nom de domaine du serveur
$_SERVER["SERVER_ADDR"] Adresse IP du serveur
$_SERVER["SERVER_PROTOCOL"] Nom et version du protocole
utilisé pour envoyer la requête au
script PHP
$_SERVER["DATE_GMT"] Date actuelle au format GMT
Variables prédéfinies
Affichage des variables d'environnement
– la fonction phpinfo()
• <? phpinfo(); ?>
• echo phpinfo(constante);
– la fonction getenv()
• <? echo getenv("HTTP_USER_AGENT");?>
Syntaxe de base : Les types de données
Principe
Pas besoin d’affecter un type à une variable avant de l’utiliser
La même variable peut changer de type en cours de script
Principe
Peuvent être constituées de n'importe quel caractère alphanumérique et de
ponctuation, y compris les caractères spéciaux
\tLa nouvelle monnaie unique, l' €uro, est enfin là...\n\r
Une chaîne de caractères doit être toujours entourée par des guillemets simples
(')ou doubles (")
" Ceci est une chaîne de caractères valide."
'Ceci est une chaîne de caractères valide.'
"Ceci est une chaîne de caractères invalide.'
Des caractères spéciaux à insérer directement dans le texte, permettent de créer
directement certains effets comme des césures de lignes
Car Code ASCII Code hex Description
\car échappe un caractère spécifique.
"" 32 0x20 un espace simple.
\t 9 0x09 tabulation horizontale
\n 13 0x0D nouvelle ligne
\r 10 0x0A retour à chariot
\0 0 0x00 caractère NUL
\v 11 0x0B tabulation verticale
Syntaxe de base : Les chaînes de caractères(2)
chaîne_result = chop(chaîne);
supprime les espaces blancs en fin de chaîne.
caractère = chr(nombre);
retourne un caractère en mode ASCII
chaîne_result = crypt(chaîne [, chaîne_code])
code une chaîne avec une base de codage.
echo expression_chaîne;
affiche à l'écran une ou plusieurs chaînes de caractères.
$tableau = explode(délimiteur, chaîne);
scinde une chaîne en fragments à l'aide d'un délimiteur et retourne un tableau .
Syntaxe de base : les opérateurs (1)
Les opérateurs
les opérateurs de calcul
les opérateurs d'assignation
les opérateurs d'incrémentation
les opérateurs de comparaison
les opérateurs logiques
les opérateurs bit-à-dit
les opérateurs de rotation de bit
Syntaxe de base : Les opérateurs(2)
Opérateur Effet
+= addition deux valeurs et stocke le résultat dans la variable (à gauche)
-= soustrait deux valeurs et stocke le résultat dans la variable
*= multiplie deux valeurs et stocke le résultat dans la variable
/= divise deux valeurs et stocke le résultat dans la variable
%= donne le reste de la division deux valeurs et stocke le résultat dans la variable
|= Effectue un OU logique entre deux valeurs et stocke le résultat dans la variable
^= Effectue un OU exclusif entre deux valeurs et stocke le résultat dans la variable
&= Effectue un Et logique entre deux valeurs et stocke le résultat dans la variable
.= Concatène deux chaînes et stocke le résultat dans la variable
Syntaxe de base : Les opérateurs(4)
Autres opérateurs
Opérateur Dénomination Effet Syntaxe Résultat
"Bonjour"."Au "BonjourAu
. Concaténation Joint deux chaînes bout à bout
revoir" revoir"
Référencement de
$ Permet de définir une variable $MaVariable = 2;
variable
Permet d'accéder aux données membres $MonObjet-
-> Propriété d'un objet
d'une classe >Propriete
Syntaxe de base : Les opérateurs(7)
L'instruction if
if (condition réalisée) { liste d'instructions }
Opérateur ternaire
(condition) ? instruction si vrai : instruction si faux
Syntaxe de base : Les instructions conditionnelles(2)
L'instruction switch
switch (Variable) {
case Valeur1: Liste d'instructions break;
case Valeur1: Liste d'instructions break;
case Valeurs...: Liste d'instructions break;
default: Liste d'instructions break;
}
Syntaxe de base : Les instructions conditionnelles(3)
La boucle for
for ($i=1; $i<6; $i++) { echo "$i<br>"; }
La boucle while
While(condition) {bloc d’instructions ;}
While (condition) :Instruction1 ;Instruction2 ;
…. endwhile ;
La boucle do…while
Do {bloc d’instructions ;}while(condition) ;
<?php
function produit()
{
$nbarg = func_num_args() ;
$prod=1 ;
// la fonction produit a ici $nbarg arguments
for ($i=0 ; $i <$nbarg ; $i++)
{
$prod *= func_get_arg($i)
}
return $prod;
}
echo "le produit est : ", produit (3, 77, 10, 5, 81, 9),
"<br />" ;
// affiche le produit est 8 419 950
?>
Syntaxe de base : Les fonctions(3)
Passage de paramètre par référence
Pour passer une variable par référence, il faut que son nom soit précédé du
symbole & (exemple &$a)
<?
function dire_texte($qui, &$texte){ $texte = "Bienvenue $qui";}
$chaine = "Bonjour ";
dire_texte("cher phpeur",$chaine);
echo $chaine; // affiche "Bienvenue cher phpeur"
?>
L’appel récursif
PHP admet les appels récursifs de fonctions
Syntaxe de base : Les fonctions(4)
Appel dynamique de fonctions
Exécuter une fonction dont le nom n’est pas forcément connu à l’avance
par le programmeur du script
L’appel dynamique d’une fonction s’effectue en suivant le nom d’une
variable contenant le nom de la fonction par des parenthèses
<?php $datejour = getdate() ; // date actuelle
//récupération des heures et minutes actuelles
$heure = $datejour[hours] ; $minute=$datejour[minutes] ;
function bonjour(){ global $heure; global $minute;
echo "<b> BONJOUR A VOUS IL EST : ", $heure, " H ", $minute, "</b> <br />" ;}
function bonsoir (){
global $heure ; global $minute ;
echo "<b> BONSOIR A VOUS IL EST : ", $heure, " H ", $minute , "</ b> <br />" ;}
if ($heure <= 17) {$salut = "bonjour" ; } else $salut="bonsoir" ;
//appel dynamique de la fonction
$salut() ; ?>
Syntaxe de base : Les fonctions(5)
Variables locales et variables globales
variables en PHP : global, static, local
toute variable déclarée en dehors d’une fonction est globale
utiliser une variable globale dans une fonction, l’instruction global
suivie du nom de la variable
Pour conserver la valeur acquise par une variable entre deux appels de
la même fonction : l’instruction static.
Les variables statiques restent locales à la fonction et ne sont pas
réutilisables à l’extérieur.
<?php
function cumul ($prix) { static $cumul = 0 ;
static $i = 1 ;
echo "Total des achats $i = ";
$cumul += $prix; $i++ ;
return $cumul ; }
echo cumul (175), "<br />" ;echo cumul (65), "<br />" ;echo
cumul (69), "<br />" ; ?>
Syntaxe de base : Les tableaux(1)
Principe
Création à l’aide de la fonction array()
Uniquement des tableaux à une dimension
Les éléments d’un tableau peuvent pointer vers d’autres
tableaux
Les éléments d’un tableau peuvent appartenir à des types distincts
L’index d’un tableau en PHP commence de 0
Pas de limites supérieures pour les tableaux
La fonction count() pour avoir le nombre d’éléments d’un tableau
Syntaxe de base : Les tableaux(2)
$tableau[indice] = valeur;
$jour[3] = "Mercredi";
$note[0] = 20;
$variable = $tableau[indice];
$JJ = $jour[6]; // affecte "Samedi" à $JJ
echo $note[1] + $note[5];
Syntaxe de base : Les tableaux(3)
Les tableaux indicés et les tableaux associatifs
Tableau associatif (ou table de hachage)
$tableau["indice"] = valeur;
$jour["Dimanche"] = 7
$jour["Mercredi"] = "Le jour des enfants"
$variable = $tableau["indice"];
$JJ = $jour["Vendredi"]; //affecte 6 à $JJ
echo $jour["Lundi"]; //retourne la valeur 2
Syntaxe de base : Les tableaux(4)
Tableaux multidimensionnels
Pas d'outils pour créer directement des tableaux multidimensionnels
L'imbrication des tableaux est possible
$variable = $tableau[indice][indice];
$MM = $element_date[0][0]; //affecte "Janvier" à $MM
echo $element_date[1][5] . " 7 " . $element_date[0][2] . "2002"; //
retourne "Jeudi 7 Mars 2002"
Syntaxe de base : Les tableaux(5)
Lecture des éléments d’un tableau
Avec une boucle for
for ($i=0; $i<count($tab) ; $i++){
if ($tab[$i]== "a") {echo $tab[$i], "<br />"; }}
$tableau = array(clé1 => val1, clé2 => val2, ..., cléN => valN);
foreach($tableau as $clé => $valeur) {
echo "Valeur ($clé): $valeur"; }
Fonctions de tri
Tri selon les valeurs
La fonction sort() effectue un tri sur les valeurs des éléments d’un
tableau selon un critère alphanumérique :selon les codes ASCII :
– « a » est après « Z » et « 10 » est avant « 9 »)
– Le tableau initial est modifié et non récupérables dans son ordre original
– Pour les tableaux associatifs les clés seront perdues et remplacées par un
indice créé après le tri et commencant à 0
La fonction rsort() effectue la même action mais en ordre inverse des
codes ASCII.
La fonction asort() trie également les valeurs selon le critère des codes
ASCII, mais en préservant les clés pour les tableaux associatifs
La fonction arsort() la même action mais en ordre inverse des codes
ASCII
la fonction natcasesort() effectue un tri dans l’ordre alphabétique non
ASCII (« a » est avant « z » et « 10 » est après « 9 »)
Syntaxe de base : Les tableaux(8)
Fonctions de tri
Tri sur les clés
La fonction ksort() trie les clés du tableau selon le critère des codes ASCII,
et préserve les associations clé /valeur
La fonction krsort() effectue la même action mais en ordre inverse des codes
ASCII
<?php
$tab2 = array ("1622"=>"Molière","1802"=>"Hugo","1920"=>"Vian") ;
ksort ($tab2);
echo "<h3 > Tri sur les clés de \$tab2 </h3>" ;
foreach ($tab2 as $cle=>$valeur) {
echo "<b> l’élément a pour clé : $clé; et pour valeur : $ valeur </b>
<br />";
}
?>
Syntaxe de base : Les tableaux(9)
$tableau = array_count_values($variable);
retourne un tableau comptant le nombre d'occurrences des valeurs d'un tableau.
$tableau = array_flip($variable);
intervertit les paires clé/valeur dans un tableau.
<?php
function impair($var)
{return ($var % 2 == 1);}
function pair($var)
{return ($var % 2 == 0);}
<?php
class client {
var $nom; var $ville; var $naiss ;
function age() {
$jour = getdate(); $an=$jour["year"]; $age = $an - $this->naiss;
echo "Il a $age ans cette année <br />" ;}}
//création d’un objet
$client1 = new client() ;
//affectation des propriétés de l’objet
$client1 -> nom = "Dupont" ; $client1-> naiss = "1961" ; $client1->ville
= "Angers" ;
//utilisation des propriétés
echo "le nom du client1 est ", $client1->nom, "<br />" ;
echo "la ville du client1 est ", $client1-> ville, "<br />" ;
echo "le client1 est né en ", $client1->naiss, "<br />" ;
//appel de la méthode age()
$client1->age() ;
?>
Syntaxe de base : Les classes et les objets(2)
Le constructeur
Une fonction qui est appelée automatiquement par la classe lors de son
instanciation avec l'opérateur new
Doit posséder un nom identique à celle de la classe
Avec PHP 3, une fonction définie dans une classe héritée devient un
constructeur si son nom est similaire à celle de la nouvelle classe
Avec PHP 4, une fonction constructeur ne peut être définie que dans sa
propre classe
Lorsqu'une classe héritant d'une autre est instanciée et si aucun
constructeur n'est défini dans cette classe, alors la fonction constructeur
sollicitée sera celle de la super-classe
Syntaxe de base : Les classes et les objets(4)
L'opérateur ::
faire référence à une fonction définie dans une super-classe à partir
d'une classe héritant de cette dernière
class nouvelle_classe extends super_classe
{function fonction()
{echo "Blocs d'instructions de la fonction fonction() . "
dans la nouvelle-classe.";
super_classe::fonction(); }
}
Syntaxe de base : Les classes et les objets(5)
L'opérateur parent
faire référence à des variables ou des fonctions présentes dans la super-
classe à partir d'une autre classe héritant de cette dernière
class nouvelle_classe extends super_classe
{ function fonction() {
echo "Blocs d'instructions de la fonction fonction()"
. " dans la nouvelle-classe.";
// se référe à la fonction fonction() de la super_classe
parent::fonction(); }
}
Syntaxe de base : Les classes et les objets(6)
?>
Syntaxe de base : Les classes et les objets(9)
Sauvegarde des objets : exemple suite
<form action="resultat.php" method="post">
<table border="0">
<tr>
<th colspan="2">
<h3>Calcul de l'hypothénuse d'un triangle rectangle</h3>
</th></tr>
<tr>
<td><u>longueur :</u></td>
<td><input type="text" name="longueur" size="10" maxlength="10">
</td></tr>
<tr>
<td><u>hauteur :</u></td>
<td><input type="text" name="hauteur" size="10" maxlength="10">
</td></tr>
<tr>
<th colspan="2"><input type="submit" value="Calculer"></th></tr>
</table>
</form>
Syntaxe de base : Les classes et les objets(10)
<?php // Seconde page : resultat.php
include("trigo.inc"); // inclusion de la définition de classe
/* regroupe tous les éléments du tableau retourné par la fonction file dans une
chaîne */
$objet_chaine = implode("", file("fic"));
$trigo = unserialize($objet_chaine); // désérialise l'objet
// appelle deux propriétés et une méthode de l'objet
$trigo->BC = $hauteur;
$trigo->AC = $longueur;
?>
<table border="0">
<tr><th><h3>Calcul de l'hypothénuse d'un triangle rectangle</h3></th></tr>
<tr><td>hauteur (BC)</td><td>=</td>
<td><?php echo $trigo->BC ?></td></tr>
<tr><td>longueur (AC)</td>
<td>=</td>
<td><?php echo $trigo->AC ?></td></tr>
<tr><td>hypothénuse (AB)</td>
<td>=</td>
<td>
<?php echo $trigo->hypothenuse() ?>
</td></tr>
</table>
Syntaxe de base : Les classes et les objets(11)
class nom_classe{
function __sleep()
{Instructions à accomplir avant serialize()...}
function __wakeup() {
Instructions à accomplir avant unserialize()...}
}
Syntaxe de base : Les classes et les objets(12)
Manipulation des classes et des objets
Les fonctions __sleep et __wakeup
La fonction serialize recherche la méthode __sleep dans une
classe afin de la lancer avant le processus de linéarisation.
– Effectuer un traitement préliminaire de l'objet dans le but de
terminer proprement toutes les opérations relatives à cet objet,
• la fermeture des connexions sur des bases de données,
• suppression des informations superflues ne nécessitant pas de
sauvegarde, etc..
La fonction unserialize recherche la méthode __wakeup dans
une classe afin de la lancer avant le processus de délinéarisation
– Accomplir des opérations de reconstruction de l'objet
• en ajoutant des informations,
• en réouvrant des connexions vers des bases de données,
• en initialisant des actions, etc..
Syntaxe de base : Les classes et les objets(13)
Principe
PHP prend en charge l’accès au système de fichiers du système
d’exploitation du serveur
Les opérations sur les fichiers concernent la création, l’ouverture, la
suppression, la copie, la lecture et l’écriture de fichiers
Les possibilités d’accès au système de fichiers du serveur sont
réglementées par les différents droits d’accès accordés au propriétaire, à
son groupe et aux autres utilisateurs
La communication entre le script PHP et le fichier est repérée par une
variable, indiquant l'état du fichier et qui est passée en paramètre aux
fonctions spécialisées pour le manipuler
La gestion des fichiers avec PHP (2)
Ouverture de fichiers
La fonction fopen() permet d'ouvrir un fichier, que ce soit pour le lire, le
créer ou y écrire
: entier fopen(chaine nom du fichier, chaine
mode);
– mode : indique le type d'opération qu'il sera possible d'effectuer
sur le fichier après ouverture. Il s'agit d'une lettre (en réalité une
chaîne de caractères) indiquant l'opération possible:
• r (comme read) indique une ouverture en lecture seulement
• w (comme write) indique une ouverture en écriture seulement (la
fonction crée le fichier s'il n'existe pas)
• a (comme append) indique une ouverture en écriture seulement avec
ajout du contenu à la fin du fichier (la fonction crée le fichier s'il
n'existe pas)
Ouverture de fichiers
Mode Description
w ouverture en écriture seulement (la fonction crée le fichier s'il n'existe pas)
ouverture en écriture seulement avec ajout du contenu à la fin du fichier (la fonction
a
crée le fichier s'il n'existe pas)
w+ ouverture en lecture et écriture (la fonction crée le fichier s'il n'existe pas)
ouverture en lecture et écriture avec ajout du contenu à la fin du fichier (la fonction crée
a+
le fichier s'il n'existe pas)
La gestion des fichiers avec PHP (4)
Ouverture de fichiers
Exemple
$fp = fopen("fichier.txt","r"); //lecture
Ouverture de fichiers
Il est généralement utile de tester si l'ouverture de fichier s'est bien
déroulée ainsi que d'éventuellement stopper le script PHP si cela n'est
pas le cas
<?
if (!$fp = fopen(”fichier.txt","r")) {
echo "Echec de l'ouverture du fichier";
exit;}
else {// votre code;}
?>
<?
$nom="Jean"; $email="[email protected]";
$fp = fopen("fichier.txt","a"); // ouverture du fichier en
écriture
fputs($fp, "\n"); // on va a la ligne
fputs($fp, $nom."|".$email); // on écrit le nom et email
dans le fichier
fclose($fp);
?>
La gestion des fichiers avec PHP (9)
Les tests de fichiers
is_dir() permet de savoir si le fichier dont le nom est passé en
paramètre correspond à un répertoire.
– La fonction is_dir() renvoie 1 s’il s'agit d'un répertoire, 0
dans le cas contraire
ftp://nom_utilisateur:[email protected]/nouvelle_page.html
<?php
function recherche_contenu($adresse){
$id_fichier = fopen($adresse, "r");
if ($id_fichier)
{
$regexp = "<!-- Début contenu -->.*<!-- Fin contenu -->";
$contenu = fread($id_fichier, filesize($adresse));
if (eregi($regexp, $contenu, $donnee)){
echo "<h3><u>Données contenu :</u></h3> "
. str_replace("<", "<", $donnee[0]);
}
else echo "<p>Impossible de le contenu.\n";
}
else echo "<p>Impossible d'ouvrir le fichier distant.\n";
fclose($id_fichier);
}
recherche_contenu("http://www.site.com/page.html");
?>
La gestion des fichiers avec PHP(23)
Les fonctions de système de fichiers
$chaine = basename(chemin_fichier);
retourne le nom du fichier à partir de l'adresse du fichier spécifiée.
clearstatcache();
efface la mémoire cache remplie par les fonctions lsat et stat.
• inconvénients :
- rendre visibles les données dans la barre d’adresse du
navigateur.
- De plus, la longueur totale est limitée à 255 caractères, ce qui
rend impossible la transmission d’un volume de données
important
<?php
$resultat = $_GET["Champ_saisie"] . "<br>";
$resultat .= $_GET["Liste_Choix"] . "<br>";
$resultat .= $_GET["Zone_Texte"] . "<br>";
for ($i = 0; $i < count($_GET["Case_Cocher"]); $i++)
{
$resultat .= $_GET["Case_Cocher"][$i] . "<br>";
}
$resultat .= $_GET["Case_Radio"] . "<br>";
echo $resultat;
?>
PHP et les formulaires(7)
Principe
Un cookie est un fichier texte créé par un script et stocké sur l’ordinateur
des visiteurs d’un site
Les cookies permettent de conserver des renseignements utiles sur
chaque utilisateur, et de les réutiliser lors de sa prochaine visite
Exemple : personnaliser la page d’accueil ou les autres pages du
site
– un message personnel comportant par exemple son nom, la date
de sa dernière visite, ou tout autre particularité.
Les cookies étant stockés sur le poste client, l’identification est
immédiate et ne concernent que les renseignements qui le
concernent
Pour des raisons de sécurité, les cookies ne peuvent être lus que par
des pages issues du serveur qui les a créés
Les cookies(2)
Principe
Le nombre de cookies qui peuvent être définis sur le même poste
client est limité à 20 et la taille de chacun est limitée à 4ko.
Un navigateur peut stocker un maximum de 300 cookies
La date d’expiration des cookies est définie de manière explicite par
le serveur web chargé de les mettre en place.
Les cookies disponibles sont importés par PHP sous forme de
variables identifiées sous les noms utilisés par ces cookies
La variable globale du serveur $_COOKIES enregistre tous les
cookies qui ont été définis
Les cookies(3)
<?php
setcookie (“PremierCookie", “Salut", time() +3600*24*7) ;
…
if (!$PremierCookie) {
echo “le cookie n’a pas été défini”;}
else {
echo $premierCookie, “<br>”;
}
?>
Les cookies(5)
Écriture de cookies
Nom_var : nom de la variable qui va stocker l’information sur le
poste client et qui sera utilisée pour récupérer cette information
dans la page qui lira le cookie.
C’est la seule indication obligatoire pour un cookie
<?
$col="#FF0000" ;
$size=24;
$font="Arial" ;
$text="Je suis le ookie« ;
$arr=compact("col" , " size" , " font" , "text" );
$val=implode(" &" , $arr);
Setcookie("la_cookie" , $val, time()+600);
Les cookies(9)
<?php
echo " <b> voici le contenu de la chaîne cookie : </b><br>";
echo $le_cookie, "<br> <br>";
}
$arr=explode("&", $la_cookie);
echo "<b> ces variables ont été établies à partir de la chaîne
cookie : </b> <br> <br>";
foreach ($arr as $k=>$elem) {
echo "$k=>$elem <br>";
}
?>
Les cookies(10)
Supprimer un cookie
Il suffit de renvoyer le cookie grâce à la fonction setcookie() en
spécifiant simplement l'argument NomDuCookie
<?php
setcookie("Visites");
?>
<?php
setcookie("Visites","",time()-1 )
?>
Les cookies(11)
Quelques précisions sur les cookies
Principe
Est un mécanisme permettant de mettre en relation les différentes requêtes
du même client sur une période de temps donnée.
Les sessions permettent de conserver des informations relatives à un
utilisateur lors de son parcours sur un site web
Des données spécifiques à un visiteur pourront être transmises de page en
page afin d'adapter personnellement les réponses d'une application PHP
Chaque visiteur en se connectant à un site reçoit un numéro d'identification
dénommé identifiant de session (SID)
La fonction session_start() se charge de générer automatiquement cet
identifiant unique de session et de créer un répertoire. Elle doit être placée
au début de chaque page afin de démarrer ou de continuer une session.
<?php
session_start();
$Session_ID = session_id();
// $Session_ID = 7edf48ca359ee24dbc5b3f6ed2557e90 ?>
Les sessions(2)
Principe
Un répertoire est créé sur le serveur à l'emplacement désigné par le
fichier de configuration php.ini, afin de recueillir les données de la
nouvelle session.
[Session]
session.save_path= C:\PHP\sessiondata
; Rép session = \sess_7edf48ca359ee24dbc5b3f6ed2557e90
Le transport des informations entre les documents est réalisé par l'entremise
soit d'un cookie
soit d'une requête HTTP
Cette dernière solution est la plus fiable puisque les cookies peuvent ne pas être
acceptés par le client ou celui-ci pourrait les détruire en cours de session.
Il suffit de concaténer l'identifiant de session à l'adresse URL de la page cible pour
que cette dernière puisse accéder aux informations conservées par la session.
echo '<a href=” http://www.site.com/doc.php? ’. session_name(). ’=‘ . session_id().‘>
lien</a>‘
Les sessions(5)
Le traitement des variables de session
Par défaut, PHP tente de passer par les cookies pour sauvegarder
l'identifiant de session dans le cas où le client les accepterait. Il est
possible d’éviter cela, il suffit de désactiver l'option de
configuration session.use_cookies dans le fichier php.ini.
[Session]
session.use_cookies 0; //désactive la gestion des sessions par cookie
Les sessions(6)
Exemple
<!-- Fichier : formulaire.html -->
<html><body>
<form method="post" action="traitement.php">
<table border="0">
<tr>
<td><u>Nom :</u></td>
<td><input type="text" name="Nom" size="20" value="RIVES"></td></tr>
<tr>
<td><u>Prénom :</u></td>
<td><input type="text" name="Prenom" size="20" value="Jean-Pierre"></td></tr>
<tr>
<td><u>eMail :</u></td>
<td><input type="text" name="cEmail" size="20" value=”[email protected]"></td></tr>
<tr><td> </td>
<td><input type="submit" name="soumettre" value="Envoyer"></td></tr></table>
</form>
</body
</html>
Les sessions(7)
<?
session_start();
$nom = $_POST["Nom"];
$prenom = $_POST["Prenom"];
$email = $_POST["cEmail"];
session_register("nom");
session_register("prenom");
session_register("email");
$_SESSION["nom"]=$nom;
$_SESSION["prenom"]=$prenom;
$_SESSION["email"]=$email;
header("Location: session.php?" . session_name() . "=" . session_id());
?>
Les sessions(8)
<?
session_start();
?>
<html><body><?
echo("<u>Identifiant de session :</u> <b>"
. session_id() . "</b><br>");
echo("<u>Nom de la session :</u> <b>"
. session_name() . "</b><br><br>");
echo("<u>Nom :</u> <b>". $_SESSION["nom"] . "</b><br>");
echo("<u>Prénom :</u> <b>" . $_SESSION["prenom"] . "</b><br>");
echo("<u>eMail :</u> <b>" . $_SESSION["email"] . "</b><br>");
//session_destroy();
?>
</body>
</html>
Les sessions (9)
Principe
Les entêtes sont des informations envoyées lors de chaque échange
par le protocole HTTP entre un navigateur et un serveur
Informations sur les données à envoyer dans le cas d'une
requête
Permettent aussi d'effectuer des actions sur le navigateur comme le
transfert de cookies ou bien une redirection vers une autre page
Ce sont les premières informations envoyées au navigateur
(pour une réponse) ou au serveur (dans le cas d'une requête),
– elles se présentent sous la forme: en-tête: valeur
la syntaxe doit être rigoureusement respectée
aucun espace ne doit figurer entre le nom de l'en-tête et les deux
points (:). Un espace doit par contre figurer après celui-ci
Les en-têtes HTTP (2)
Principe
PHP fournit une fonction permettant d'envoyer des en-tête HTTP
manuellement du serveur au navigateur
booléen header(chaîne en-tête HTTP)
Principe
PHP fournit une fonction permettant d'envoyer des en-tête HTTP
manuellement du serveur au navigateur
booléen header(chaîne en-tête HTTP)
<?
$headers = getallheaders();
foreach ($headers as $nom => $contenu) {
echo "headers[$nom] = $contenu<br />\n";
}
?>
Les en-têtes HTTP (4)
fichier test.htm
<html><body><img src=‘rotation_test.php></body></html>
Création d’image à la volée (3)
Redimensionnement
int imagecopyresized ( resource dst_image , resource src_image , int dst_x ,
int dst_y , int src_x , int src_y , int dst_w , int dst_h , int src_w , int src_h )
imagecopyresized copie une partie rectangulaire d'une image dans une autre
image.
Si les dimensions de la source et de la destination ne sont pas égales,
un étirement adéquat est effectué pour faire correspondre
Exemple :
$message = "Bonjour, ceci est mon message.’’;
$objet ="Bonjour"
mail(‘’[email protected]’’, $objet, $message);
<?php
$recipient = ‘’Tony <[email protected]>, ‘’;
$recipient .= ‘‘’Peter <[email protected]>’’;
$subject = ‘’Notre rendez-vous’’;
$message = ‘‘’Je vous propose le samedi 15 juin \n’’;
$message .= ’’--\r\n’’; // Délimiteur de signature
$message .= ‘’Hugo’’;
$headers = ‘’From: Hugo <[email protected]>\n’’;
$headers .= ‘’Content-Type: text/html; charset=iso-8859-1\n’’ ;
$headers .= ‘’Cc: [email protected]\n’’;
mail($recipient, $subject, $message, $headers);
?>
Principes de sécurité (1)
veiller à limiter au strict nécessaire les droits et permissions
de l'utilisateur : il vaut mieux l'entendre se plaindre de son manque de liberté plutôt
que de constater les dégâts causés par une trop grande libéralité (principe universel)
Principe
PHP propose de nombreux outils permettant de travailler avec la
plupart des SGBDR
Oracle, Sybase, Microsoft SQL Server, PostgreSQL ou encore MySQL
<? // connexion_data.php4
/* Accès au serveur de bases de données MySQL */
$MySql_Hot=“localhost”;
$MySql_User=“admin”;
$MySql_Passw=“admin”;
?>
Interfaçage avec une base de données(5)
La connexion à un SGBDR
La connexion à (un serveur) un système de gestion de base de
données s'effectue par l'entremise des fonctions spécialisées
mysql_connect("nom_serveur","nom_utilisateur","mot_passe");
– retourne une valeur de type Integer servant d’identificateur de connexion lorsque la
connexion a été établie
– retourne False si une erreur se produit lors de l ’établissement de la connexion
mssql_connect("nom_serveur","nom_utilisateur","mot_passe");
ocilogon("nom_utilisateur","mot_passe", "nom_base");
pg_connect("dbname=nom_base,host=nom_serveur port=num_port"
"user=nom_utilisateur password=mot_passe");
sybase_connect("nom_serveur","nom_utilisateur","mot_passe");
Interfaçage avec une base de données(6)
La connexion à un SGBDR
Il existe deux façons de se connecter à une base de données
Les connexions non-persistantes (base_connect)
Les connexions persistantes (base_pconnect).
Les deux types de connexions sont parfaitement identiques au
niveau des fonctionnalités qu'elles apportent
Néanmoins, les connexions persistantes ne se referment pas
automatiquement à la fin du script
PHP s'assure qu'il n'existe pas un processus semblable, déjà ouvert avec
les noms de serveur et d'utilisateur ainsi que le mot de passe. Si tel est
le cas, ce processus est réutilisé sinon un nouveau est ouvert
le principal avantage des connexions persistantes est leur réutilisabilité
Interfaçage avec une base de données(7)
La connexion à un SGBDR
La déconnexion des bases de données s'effectue par l'intermédiaire
des fonctions de fermeture
mysql_close($id_connexion);
mssql_close($id_connexion);
$nb_champs = msql_num_fields($id_resultat);
$nb_lignes = msql_num_rows($id_resultat);
$nb_champs = mysql_num_fields($id_resultat);
$nb_lignes = mysql_num_rows($id_resultat);
$nb_champs = ociNumCols($id_resultat);
$nb_lignes = ociRowCount($id_resultat);
$nb_champs = pg_NumFields($id_resultat);
$nb_lignes = pg_NumRows($id_resultat);
$nb_champs = sybase_num_fields($id_resultat);
$nb_lignes = sybase_num_rows($id_resultat);
Interfaçage avec une base de données(24)
L'exploitation des données
A partir des enregistrements, chacun des champs devient accessible
aisément par des fonctions appropriées. Certaines fonctions sont
capables d'extraire directement un champ déterminé
$valeur = mssql_result($id_resultat, $num_ligne, $num_col)
$valeur = msql_result($id_resultat, $num_ligne, $num_col);
$valeur = mysql_result($id_resultat, $num_ligne, $num_col);
$valeur = pg_result($id_resultat, $num_ligne, $num_col);
$valeur = sybase_result($id_resultat, $num_ligne, $num_col);
Syntaxe et conventions
Les nombres
Les nombres à virgule flottante utilisent le point(.) comme séparateur
décimal
Les valeur négatives sont précédées du signe moins
Les nombres entiers utilisés en relation avec les nombres à virgule
flottante sont interprétés comme des nombres à virgule flottante
Mysql prend en charge les nombres hexadécimaux
NULL signifie « aucune donnée » et ne doit pas être confondu avec le
nombre 0 ou la chaîne de caractère vide "" .
Les bases de données avec MySQL(4)
Syntaxe et conventions
Les variables
Les variables peuvent contenir des nombres entiers, des nombres réels ou des
chaînes de caractères
Select NomArt,
PrixArt AS Prix,
PrixArt * 0.196 AS ‘TVA’
PrixArt / 10 as ‘Marge’
From article as A,
groupeArticle as G
Where A.NumGrArt=G.NumGrArt
And ( G.NumGrArt<>1 OR Not (A.type = 2))
Les bases de données avec MySQL(9)
Syntaxe :
Syntaxe :
– L’attribut UNIQUE_KEY : définit une clé d’index. Elle ne peut
comporter que des valeurs uniques.
– L’attribut INDEX : définit un index.
• Les champs TEXT et BLOB ne peuvent pas être indexés
Remplacer un enregistrement
Suppression d’enregistrements
DELETE FROM tbl_name [WHERE_definition]
Les bases de données avec MySQL(18)
Sélection d’enregistrement
Syntaxe
SELECT [DISTINCT|ALL] expression_de_selection
FROM tebles
WHERE expression_where
GROUP BY col_name, …]
HAVING where_definition]
[ORDER BY [ASC|DESC]]
Exemples
SELECT * FROM article WHERE PrixArt > 50
SELECT NumGrArt, AVG(PrixArt) FROM article GROUP BY
NumArt
Les bases de données avec MySQL(19)
Les bases de données avec MySQL(20)
Les bases de données avec MySQL(21)
Les bases de données avec MySQL(22)