Developpement web formulaire php support de formation

Problème à signaler:


Télécharger Developpement web formulaire php support de formation



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

PHP/MySQL: Sites dynamiques

For

mulaires et bases de données

François Gannaz

INP Formation Continue

16, 17, 23, 24 juin 2011

 

PHP/MySQL — INP FCo

p.1

                                        Web    Rappels     PHP       PHP&MySQL      Fin

       Web statique     CGI    Modules     Applications n-tier

Web statique : client-serveur

 

           PHP/MySQL — INP FCo                                                                                                                  p.2

       
 
 

                                     Web    Rappels     PHP       PHP&MySQL      Fin

 

Web statique     CGI    Modules     Applications n-tier

Discussion HTTP

 

           PHP/MySQL — INP FCo                                                                                                         p.3

 

                                     Web    Rappels     PHP       PHP&MySQL      Fin

 

Web statique     CGI    Modules     Applications n-tier

Caractéristiques du HTTP

Un dialogue client-serveur est formé de :

I Requête HTTP

I source d’informations variées :

IP, version du navigateur, OS, langue, page de provenance, etc.

I Réponse HTTP

I entête + contenu

I contenu pas forcément en HTML : Content-Type (MIME) I permet la redirection d’URL

Exemple de réponse : Redirection HTTP

HTTP/1.x 301 Moved Permanently

Date : Tue, 13 Nov 2007 10 :32 :48 GMT

Location : http

           PHP/MySQL — INP FCo                                                                                                         p.4

     
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

       Web statique     CGI    Modules     Applications n-tier

 

Serveur : Common Gateway Interface (CGI)

 

I Le serveur web (apache) lance un nouveau processus

I ce processus envoie un contenu sur la sortie standard

I apache redirige ce contenu vers le navigateur

Lent et lourd

Il existe des variantes (FAST_CGI) pour améliorer les performances.

 

PHP/MySQL — INP FCo

p.5

                                        Web    Rappels     PHP       PHP&MySQL      Fin

       Web statique     CGI    Modules     Applications n-tier

 

Serveur : Modules et langages web

On remplace le CGI par une extension du serveur web (module).

 

I permet d’utiliser un langage interprété I cette extension (module) est spécifique au serveur web.

=? seuls certains langages sont possibles :

PHP, C#, Perl, Ruby, Python

 

PHP/MySQL — INP FCo

p.6

       
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Web statique     CGI    Modules     Applications n-tier

Applications n-tier

 

3 parties : client — serveur — SGDB

Les données persistantes sont stockées dans MySQL.

     PHP/MySQL — INP FCo                                                                                                                  p.7

                                  Web    Rappels     PHP       PHP&MySQL      Fin

   

Rappels HTML (X)HTML, CSS, JS, etc.

 

PHP/MySQL — INP FCo

p.8

       
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

 

Exemple type

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"">

<html xmlns=";>

<head>

<title>Horloge</title>

</head>

<body>

<p>

Nous sommes le lundi 12 janvier 2154.<br /> Il est <strong>10 h 15</strong>.

</p>

</body>

</html>

Listing 1:

     PHP/MySQL — INP FCo                                                                                                                  p.9

                                  Web    Rappels     PHP       PHP&MySQL      Fin

 

Formulaires HTML

<form name="ex" action="" method="get"> <fieldset>

<legend>Groupe 1</legend>

<label>Login :</label>

<input name="login" type="text" />

<label>Mot de passe :</label>

<input name="mdp" type="password" />

<label>Choix :</label> <select name="choix">

<option selected="selected">1</option>

<option value="2">deuxieme</option>

</select>

<button type="submit">OK</button>

</fieldset>

</form>

Listing 2:

     PHP/MySQL — INP FCo                                                                                                                p.10

     
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Recommandations

Respecter les standards

I Choisir HTML4.01 (avec balises fermées) ou XHTML1 (véritable

XML sur du HTML 4.01)

I Donner le DOCTYPE correspondant au navigateur

I Se référer aux spécifications :

Pour un HTML de qualité

I Séparer la présentation CSS du HTML : placer dans le

<link rel=" stylesheet " type="text/css" href=" " />

<style type="text/css"> </style>

I Utiliser les attributs HTML class et id pour aider CSS et JS

I Tester sur plusieurs navigateurs dont au minimum IE7, IE8 et

Firefox (+ Safari, Chrome, Opera?)

 

PHP/MySQL — INP FCo

p.11

                                        Web    Rappels     PHP       PHP&MySQL      Fin

      Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Le langage PHP

           PHP/MySQL — INP FCo                                                                                                                p.12

       
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Rendre dynamique le HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

"">

<html xmlns=";>

<head>

<title>Horloge</title>

</head>

<body>

<p>

Nous sommes le <?php setlocale(LC_TIME, ’fr_FR’); echo strftime("%A %e %B %Y") ?>.<br />

Il est <?php echo strftime("%H h %M") ?>.

</p>

</body>

</html>

     PHP/MySQL — INP FCo                                                                                                                p.13

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

PHP : qu’est-ce ?

Les raisons du succès

I langage spécialisé : embarqué web

I simple (mais inspiré de C et de Perl)

La maturité, enfin ?

I En évolution constante depuis sa création

1994 : PHP 3 (première version publique)

2000 : PHP 4 (ajout de la programmation objet)

2004 : PHP 5 (programmation objet refaite!)

2009 : PHP 5.3

I Débarrassé de quelques erreurs de jeunesses

Certaines tentatives de simplification sont obsolètes en PHP5. I Programmation objet possible : depuis PHP4 et surtout PHP5 I beaucoup de bibliothèques libres :

e-mail, images, PDF, base de données

     PHP/MySQL — INP FCo                                                                                                                p.14

     
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

      Exemple    Données     Formulaires    Fonctions     Divers    Sessions

PHP : installation

Logiciels nécessaires

I Serveur web (apache)

I Module PHP pour le serveur web (mod_php)

I Serveur de base de données MySQL

I Compléments optionnels : PHPMyAdmin

Sous Linux

Installer les paquets nécessaires. Par exemple, Debian/Ubuntu : aptitude install apache2 libapache2-mod-php5 mysql-server

Sous Windows

Choisir un installateur complet : WampServer, EasyPHP, XAMPP

           PHP/MySQL — INP FCo                                                                                                                p.15

                                        Web    Rappels     PHP       PHP&MySQL      Fin

      Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Exemple

Coté serveur :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.1 Strict//EN"

"">

<html>

<head>

<title>Exemple</title>

</head>

<body>

<!-- un commentaire HTML --> <p>

<?php echo "1789*19.6/100=" . (1789*19.6/100); ?> </p>

</body>

</html>

, sur le serveur

Coté client (répo

nse à une requête HTTP) :PHP/MySQL — INP FCo                                                p.16

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

PHP à grands traits

<?php

if (2 > 1) {

/* Le test ci-dessus devrait nous amener ici */ echo "Tout va bien !";

} // fin du bloc du if

?>

I Le code PHP est toujours entre < ?php et ?>

Éviter les "short tags" : <? ?>

I Généralement sensible à la casse : $a6=$A

I instructions terminées par ;

I blocs délimités par { . . . }

I commentaires avec // en fin de ligne ou /* . . . */ I toujours se référer à la documentation officielle :

     PHP/MySQL — INP FCo                                                                                                                p.17

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Première expérimentation

Le but est de réaliser une multiplication par un formulaire web.

1.   Créer une page avec un formulaire permettant de saisir 2 nombres. Les noms des champs du formulaire seront "a" et

"b".

2.   Cette page est-elle en HTML ou en PHP? Pourquoi?

3.   Ce formulaire doit être envoyé sur une page .

Y afficher le contenu de $_GET[’a’] et $_GET[’b’].

4.   Sur la page , afficher l’opération avec son résultat, par exemple : 13x14 = 182.

     PHP/MySQL — INP FCo                                                                                                                p.18

     
 

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Premiers pas en PHP

Les données

        PHP/MySQL — INP FCo                                                                                                                p.19

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Variables

Préfixées par $

$nombre = 174;

Déclaration

La déclaration n’est pas obligatoire, mais recommandée.

Une variable est créée à sa première utilisation. Par défaut, elle vaut toujours NULL.

Certaines variables spéciales sont créées par PHP avant l’exécution du script : $_GET, par exemple.

Fonctions utiles

I isset() Teste l’existence

I unset() Supprime une variable

I empty() Teste si une variable est vide (inexistante, 0, "", etc.)

        PHP/MySQL — INP FCo                                                                                                                p.20

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Types de données

Langage faiblement typé (types non déclarés).

Conversion automatique des scalaires : echo 5 ?? echo "5"

PHP connaît en interne différents types de données :

I scalaire entier : -157

I scalaire flottant : 15.7

I scalaire chaîne : "Ceci est un texte"

I scalaire booléen : TRUE, FALSE I tableau

I objet

Fonctions utiles

I var_dump($var) : détaille le contenu de $var

I gettype($var)

I is_integer($var), is_string($var), etc.

     PHP/MySQL — INP FCo                                                                                                                p.21

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Les scalaires : les nombres

Opérateurs numériques

Identiques à ceux du C.

Affectation : =

Calcul : + - * /

Combiné : += -= *= /=

Modulo : %

Comparaison : == < <= > >= !=

Incrémentation/décrémentation : ++ --

Exemple :

$a = 1;

$a++;

$a += 4;

$a *= 2; // au final : 12

     PHP/MySQL — INP FCo                                                                                                                p.22

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Les scalaires : les chaînes de caractères

Interpolation

I Sans interpolation

                                                         $t = ’Salut! ’;                             Salut!

                                                            $t = ’Salut\n a \\toi ’;              Salut\n?a?\toi

                                                          $t = ’j\’ arrive ’;                         j’arrive

Tous les caractères sont conservés, sauf \\ et \´. I Avec interpolation

                                                           $t = "Salut\n a \\toi";              Salut

?a?\toi

$a = ’PHP’;

                                                          $b = "Le site de $a";               Le?site?de?PHP

$j = 40;

                                                        $t = "Les $j      voleurs ";

Les?40?voleurs

     PHP/MySQL — INP FCo                                                                                                                p.23

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Les scalaires : les chaînes de caractères

Affichage echo / print / printf()

Exemple : echo ’<p>La variable "$a"</p>’;

Opérateurs

Concaténation : .

Comparaison : == < <= > >= !=

Attention :

les opérateurs peuvent induire des conversions implicites. Les comparaisons suivantes valent-elles TRUE ou FALSE?

I "précédent" < "suivant"

I 8 < "13"

I "21" < "9"

I 9 < "dix-huit"

Si on n’est pas sûr d’avoir une chaîne non numérique, utiliser strcmp() au lieu de <.

     PHP/MySQL — INP FCo                                                                                                                p.24

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

En résumé : variables

I Une variable peut contenir des nombres

$a = 15; $prix = 2.50;

I ou du texte

$txt = ’La monnaie est le $’;

Interpolation : $msgPrix = "Vendu pour $prix euros"; I ou un booléen

$vrai = true;

I ou un tableau, un objet (à suivre)

I Comparaisons et opérations

if ($a < 2) { $pluriel = true; }

     PHP/MySQL — INP FCo                                                                                                                p.25

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

En résumé : tests et boucles

PHP utilise la syntaxe du C :

// boucle pour $i allant de 0 a 99 // le plus simple des tests for ($i=0 ; $i<100 ; $i++) { if ($a > 10) {

}    } else {

                  // en PHP, on utilise       rarement " for "                    

}

// idem serie         de " if / else         if / else "     // on boucle tant que $i!=0 switch ($var) {       while ($i != 0) { case ’a’:      break;     } default:

break;

}

     PHP/MySQL — INP FCo                                                                                                                p.26

     
 

                                      Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Exercices

1.   Créer une page PHP affichant “Hello world!” en utilisant 2 variables PHP. Proposer des variantes.

2.   Qu’affichent les instructions suivantes?

$a=1;

$b="2+$a";

$a=2;

echo $b . $a;

3.   Que se passe-t-il quand on incrémente une variable inexistante? Quand on l’affiche? Expérimenter.

Moralité : mieux vaut donner une valeur initiale à ses variables.

4.   Calculer et afficher les tables de multiplication dans un tableau HTML.

        PHP/MySQL — INP FCo                                                                                                                p.27

                                      Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Attention aux comparaisons !

Qu’affiche le code suivant?

if (3 == "3") { echo "1\n"; } if (0 == "") { echo "2\n"; } if ("FALSE" == TRUE) { echo "3\n"; }

Il faut pouvoir comparer exactement, sans conversion :

=== et !==

if (3 === "3") { echo "1\n"; }  // FALSE if (0 === "") { echo "2\n"; }       // FALSE if ("FALSE" === TRUE) { echo "3\n"; } // FALSE

Remarque :

if ($a) { };

if ($a == TRUE) { }; // idem ci?dessus if ($a === TRUE) { }; // PLUS RESTRICTIF sur $a !

2 notations équivalentes : if (empty($a)) { };

if (isset($a) &&

$a) { };PHP/MySQL — INP FCo                                                                                                p.28

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Les tableaux

I plus précisément : tableaux associatifs ordonnés I paires clé / valeur (dictionnaire) :

$tab = array( 0=>1, 1=>1, 2=>2, 3=>3, 4=>5 );

$tab = array( 0=>1, 1=>1, 2=>2, 3=>3, 4=>5,

"nom" => "Fibonacci" ); I accès aux valeurs :

$tab["nombre"] = "d’or"; echo $tab["nombre"];

I cas des tableaux numériques : simplification Création abrégée (les clés sont 0, 1, 2 ) :

$tab = array( 1, 1, 2, 3, 5 );

Ajout en "fin de tableau"

$tab[] = "derniere valeure "; // ici $tab [5] I multitude de fonctions pour les tableaux :

     PHP/MySQL — INP FCo                                                                                                                p.29

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Parcours d’un tableau

Pour un tableau à indice numérique, méthode classique :

for ($i=0 ; $i<count($tab) ; $i++) { echo "$tab[$i ]\n";

}

Pour tout tableau :

foreach ($tableau as $valeur) { echo "$valeur\n";

}

foreach ($tableau as $cle => $valeur) { echo "$cle ?> $valeur\n";

} foreach est la boucle la plus fréquente en PHP !

     PHP/MySQL — INP FCo                                                                                                                p.30

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Exercices

1.   Peut-on interpoler un tableau dans une chaîne, c’est-à-dire écrire echo "$tab[1]" ou echo "$tab[’clef’]"?

2.   Que donne echo $tab et echo "$tab"? Afficher en HTML tout le contenu d’un tableau PHP.

3.   Expérimenter le code suivant. Qu’en déduire?

$tab = array( 1, 2, 3 ); foreach ($tab as $ele) { $ele++; }

4.   Placer des images dans un répertoire "pics" du serveur PHP, puis utiliser la fonction glob(’pics/*’) pour les afficher toutes dans une page HTML.

5.   Écrire un tableau PHP de liste de titres de disques. L’afficher sous forme de liste HTML.

6.   Transformer le tableau ci-dessus en liste de titres avec leur auteur/compositeur. L’afficher sous forme de <TABLE>.

7.   Insérer un élément en queue de liste. Au début de la liste.

8.   Supprimer le premier élément de la liste. Le dernier.

     PHP/MySQL — INP FCo                                                                                                                p.31

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Débogage basique

I print_r($variable) : afficher le contenu de $variable

I var_dump($variable) : idem, plus détaillé

I die("message") : arrête l’exécution du script en affichant ce message

I error_log("message") : insère un message dans le log du serveur http

Activer les avertissements complets error_reporting(E_ALL|E_NOTICE);

signale les erreurs et les actions suspectes (utilisation variables non initialisées )

Un conseil : placer cette ligne en début de fichier pendant la phase de développement.

Comportement par défaut sur le serveur en modifiant

     PHP/MySQL — INP FCo                                                                                                                p.32

     
 

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Formulaires HTML et données HTTP

        PHP/MySQL — INP FCo                                                                                                                p.33

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Éléments des formulaires HTML

I Ligne de saisie de texte

<input type="text" name="x" value="" />

I Zone de saisie multi-lignes

<textarea rows="5" cols="80" name="x"></textarea>

<select name="x">

<option value="id1">A</option><option>B</option>

</select>

I Liste déroulante

I Liste déroulée

<select name="x" size="5" multiple="multiple">

I Boutton poussoir envoyant le formulaire

<input type="submit" name="x" value="Envoyer" /> ou

<button type="submit" name="x" >Envoyer</button>

        PHP/MySQL — INP FCo                                                                                                                p.34

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Formulaires HTML

<form action="" method="get"> <p>

<input type="text" name="login" value="" />

<button type="submit">OK</button>

</p>

</form>

Poster ce formulaire (rempli) se traduira par un accès à l’URL : ?login=Albert Comment accéder à ces informations en PHP?

$_GET : tableau associatif des paramètres GET

Pour ce formulaire : $_GET[’login’]

     PHP/MySQL — INP FCo                                                                                                                p.35

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Formulaires HTML et variables PHP superglobales

Variables superglobales (toujours accessibles)

I créées en interne par PHP (et non par le code utilisateur) I débutant par $_

3 superglobales utiles pour les formulaires :

I $_GET : tableau des paramètres GET (reçus par l’URL)

I $_POST : tableau des paramètres POST (reçus par le champ

POST de l’en-tête HTTP)

I $_REQUEST : fusion de ces 2 tableaux

Donc $_REQUEST convient que le formulaire utilise method=’GET’ ou method=’POST’.

Attention au vieux PHP

Avant PHP 4.3, la configuration register_globals était activée.

=? PHP crée des variables au nom des paramètres GET et

POST : $_GET[’a’] devient $a.

=? Code sale + gros problèmes de sécurité!

     PHP/MySQL — INP FCo                                                                                                                p.36

     
 

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Exercices

1.   Écrire une page d’authentification avec mot de passe caché et fixé dans le code.

2.   Écrire un formulaire de saisie de disque. L’incorporer au projet précédent pour pouvoir ajouter un élément à la liste.

3.   Valider le formulaire ci-dessus avant d’ajouter le disque, en demandant de compléter toute case vide.

4.   Ajouter un choix de genre musical unique.

5.   Comment faire si le disque appartient à plusieurs genres? Quelle syntaxe HTML et PHP adopter?

6.   Utiliser la superglobale $_SERVER pour contrôler si le client est dans une liste d’IP valides.

        PHP/MySQL — INP FCo                                                                                                                p.37

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Fonctions

        PHP/MySQL — INP FCo                                                                                                                p.38

     

                                  Web    Rappels     PHP       PHP&MySQL          Fin

Exemple     Données     Formulaires    Fonctions     Divers      Sessions

Fonctions

Déclaration

function add( $param1, $param2 ) { //

return $param1 + $param2;

}

Utilisation (appel) echo add(88,-14) . add(3,4);

En détails

I Renvoi (facultatif) d’une unique valeur (scalaire, tableau, etc.)

I Paramètres

I en nombre fixe

I sauf en cas de valeur par défaut avec la déclaration function add($p1, $p2=1) {

I paramètre modifiable si déclaration sous la forme &$param

PHP/MySQL — INP FCo                                                                                                                     p.39

     
 

                                  Web    Rappels     PHP       PHP&MySQL          Fin

Exemple     Données     Formulaires    Fonctions     Divers      Sessions

Portée des variables

Les variables ont une zone d’action, dite portée.

$glob = "glob"; if (true) { $truc = "truc"; }

function test() { global $glob;

$loc++; echo "$glob $truc $loc\n";

} test();

echo "$glob $truc $loc\n"; test();

Affichera?

PHP/MySQL — INP FCo                                                                                                                     p.40

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Fonctions utiles pour du texte

Fonctions très nombreuses :

Une sélection

I htmlspecialchars / htmlentities : passe du texte brut au HTML en remplaçant certains caractères par leur entité

HTML

I implode(" ",$tab) : fusionne un tableau en une chaîne

I explode(" ",$tab) : découpe une chaîne en un tableau

I trim($texte) : supprime les espaces de début et fin

I strtolower / strtoupper : change la casse

I strlen : donne la taille d’une chaîne

I strpos : trouve la position d’un caractère dans une chaîne

I substr : retourne un segment de chaîne

     PHP/MySQL — INP FCo                                                                                                                p.41

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Inclusion de fichiers

Quand le code grossit, il faut le répartir dans plusieurs fichiers : include("") : le contenu de ce fichier est inséré ici.

Variantes de include :

I include_once : le fichier est inclus que s’il ne l’a pas encore été (utile pour les bibliothèques de code)

I require : en cas d’absence du fichier, arrêter tout sur une erreur

I require_once : fusion des 2 précédents, le plus utilisé et le plus pratique

A retenir require_once pour charger les fichiers contenant des déclarations de fonctions.

     PHP/MySQL — INP FCo                                                                                                                p.42

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

En résumé

I Il faut utiliser des fonctions :

I code plus concis et plus lisible

I moins de copier-coller =? code maintenable

I moins de risques de conflit de variables

I Les variables des fonctions n’existent que dans la fonction (variables locales).

I Pour accéder aux variables extérieures, utiliser global.

I Placer les déclarations de fonctions dans des fichiers séparés.

I Charger les fichiers de déclaration avec require_once. Syntaxe fréquente :

require_once dirname(__FILE__) . ’’; I Chercher les fonctions dans la documentation officielle.

     PHP/MySQL — INP FCo                                                                                                                p.43

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Exercices

1.   Écrire une fonction renvoyant la somme des éléments du tableau reçu en argument. Et si on ne reçoit pas de paramètre? ou pas un tableau?

2.   Avec la fonction PHP date(), écrire une fonction renvoyant la date courante en anglais. Passer au français. L’adapter pour qu’on puisse optionnellement décaler la date de X jours.

3.   Reprendre le code qui affiche un tableau HTML de disques et en faire une fonction à un paramètre de type tableau PHP.

4.   Écrire une fonction qui valide une adresse IP :

check_ip(’88.77.66.1’,’127.0.0.1 192.168.’);

5.   Écrire une fonction qui valide une adresse IP par rapport à une plage CIDR :

ip_cidr(’88.77.66.1’,’192.168.1.1/24’);

     PHP/MySQL — INP FCo                                                                                                                p.44

     
 

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

Fonctions diverses e-mail, date, texte, PDF

        PHP/MySQL — INP FCo                                                                                                                p.45

                                     Web    Rappels     PHP       PHP&MySQL      Fin

    Exemple    Données     Formulaires     Fonctions     Divers    Sessions

e-mails

Exemple simple

$message = "Bonjour\nAu revoir";

mail(’ destinataire@exemple . fr ’, ’Mon Sujet’, $message);

Exemple complexe

$message = "Bonjour\nAu revoir";

$message = wordwrap($message, 70); // 70 car. max par ligne $headers = ’From: ’ . "\r\n" .

’Cc: copie@exemple. fr ’ . "\r\n" ; mail(’ destinataire@exemple . fr ’, ’Mon Sujet’, $message, $headers);

Pour des besoins complexes, mieux vaut utiliser une biblio dédiée, comme PHPmailer

        PHP/MySQL — INP FCo                                                                                                                p.46

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Gestion des dates

3 fonctions essentielles : (voir le manuel pour les détails)

I date($format,$dateheure) : formate une date/heure (par défaut, maintenant)

I strftime($format,$dateheure) : idem, localisé.

Précéder cet appel d’un setlocale(LC_TIME, "fr_FR");

I mktime( ) : construit une dateheure (timestamp)

Exercices

1. Convertir une date saisie par l’utilisateur au format français en date ISO. Accepter "23/10/2012" et "15/01/2001".

     PHP/MySQL — INP FCo                                                                                                                p.47

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Utiliser un objet en PHP

Un objet est une variable qui regroupe des données et des fonctions.

$objet = new MaClasseObjet(); $objet->attribut = "OK"; echo $objet->attribut;

$objet->methode(10);

Exercices

1. Utiliser le système de "template" Savant3 pour piloter une page d’authentification.

     PHP/MySQL — INP FCo                                                                                                                p.48

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Constantes

S’utilise comme une variable de valeur scalaire fixe, non modifiable.

define(’DEBUG’,TRUE);

define(’MA_CONSTANTE’, 1.61828); print(1+1/MA_CONSTANTE);

if (!defined(’MA_CONSTANTE’)) { define(’MA_CONSTANTE’, 2.712);

} define(’CARRE’, MA_CONSTANTE*MA_CONSTANTE);

define(’MA_CONSTANTE’, 3.1415); // ERREUR define(’TABLEAU’, array()); // ERREUR

     PHP/MySQL — INP FCo                                                                                                                p.49

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

En-têtes HTTP

Un en-tête par défaut est envoyé, on peut le modifier avec header( ) uniquement avant d’avoir envoyé des données.

Quelques scénarios :

I La page n’est pas en HTML :

header(’Content?Type: text; charset =utf?8’); header(’Content?Type: application /pdf’);

I La page ne doit pas être placée dans le cache navigateur header("Cache?Control: no?cache, must?revalidate"); I Redirection vers une autre page (l’URL de destination doit être complète et non locale)

header("Location: http:// serveur . ");

exit();

     PHP/MySQL — INP FCo                                                                                                                p.50

     
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

PDF

De nombreuses bibliothèques existent :

I La plus simple : FPDF ()

Possibilités limitées!

I Pour aller plus loin : TCPDF () Surcouche à FPDF avec gestion de l’UTF-8, modification de PDF existant (grâce au complément FPDI), etc.

I Zend_Pdf : récent, encore en évolution.

Pour être exhaustif, il existe 2 extensions référencées dans la doc officielle : libPDF très limité dans sa version gratuite.

Haru libre, mais encore expérimental

     PHP/MySQL — INP FCo                                                                                                                p.51

                                  Web    Rappels     PHP       PHP&MySQL      Fin

Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Sessions

Comment garder des données utilisateur entre 2 exécutions d’un script?

<?php

$compteur++; // vaudra toujours 1 echo "Nombre de visites connues : $compteur";

<?php session_start();

$_SESSION[’compteur’]++;

echo "Nombre de visites connues : $_SESSION[compteur]";

Une session permet de rendre des données PHP persistantes entre les requêtes d’un même utilisateur.

     PHP/MySQL — INP FCo                                                                                                                p.52

     
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

      Exemple    Données     Formulaires    Fonctions     Divers    Sessions

Exercices

Le but est de créer un fichier de fonctions PHP qui permettent de :

1.   Construire 2 pages web, "" et "". Chacune doit afficher quelle est la dernière page visitée ("aucune", "page1" ou "page2").

2.   Sur une page d’authentification qui valider un login et un mot de passe, utiliser une session pour garder le statut authentifié d’un utilisateur en dehors de la page de login.

Afficher "Bonjour, " en haut de la page listant les disques.

3.   Rediriger vers une page d’avertissement si on demande une page sans être authentifié.

4.   Ajouter sur une page un lien HTML permettant de se déconnecter.

           PHP/MySQL — INP FCo                                                                                                                p.53

                                        Web    Rappels     PHP       PHP&MySQL      Fin

 

PHP &

MySQL

PHP/MySQL — INP

FCo                                                                                                            p.54

 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Généralités

Rappel : pourquoi une base de données dans PHP ?

I Données persistantes de l’application

I Facilités de traitement (à comparer avec un stockage fichier fait soi-même)

Ne pas confondre avec les sessions (individuelles).

Déroulement

1.   Le script PHP ouvre une connexion à un serveur MySQL

2.   Plusieurs requêtes possibles pour une même connexion

3.   Les résultats MySQL sont reçus ligne par ligne dans des tableaux PHP

4.   Les connexions MySQL se ferment à la fin du script PHP

 

PHP/MySQL — INP FCo

p.55

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

PHP4 & MySQL (obsolète)

Initialisation de la connexion

$dblink = mysql_connect(’serveur’,’login’,’motdepasse’); if (! $dblink)

{ die( "ERREUR de connexion : " . mysql_error() ); } mysql_query("SET NAMES ’latin1’"); // ou ’utf8’

if (! mysql_selectdb(’BaseDeDonnees’))

{ die( "ERREUR d’acces a la base : " . mysql_error() ); }

Lire des données

$resultat = mysql_query("SELECT ? FROM Disques"); if (! $resultat) die(’ Erreur dans la requete : ’ . mysql_error());

echo "Il y a ".mysql_num_rows($resultat)." reponses.\n"; while ($ligne = mysql_fetch_assoc($resultat)) { echo $ligne[’titre ’] ;

                                         print_r($ligne); // utiliser         l ’ enregistrement

}

 

PHP/MySQL — INP FCo

p.56

       
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

 

PHP5 & MySQL

Il est recommandé d’utiliser mysqli à la place de mysql.

On peut remplacer mysql_ par mysqli_, ou utiliser la syntaxe objet ci-dessous.

Initialisation de la connexion

$db = new mysqli(’serveur’,’login’,’motdepasse’,’BaseDeDonnees’); if (! $db)

{ die( "ERREUR de connexion : " . mysqli_connect_error() ); }

$db->set_charset("utf8"); // ou ’latin1’

Lire des données

$resultat = $db->query("SELECT ? FROM Disques"); if (! $resultat) die(’ Erreur dans la requete : ’ . $db->error);

echo "Il y a " . $resultat->num_rows . " reponses.\n"; while ( $ligne = $resultat->fetch_assoc() ) { echo $ligne[’titre ’]; //   utiliser l ’ enregistrement

}

           PHP/MySQL — INP FCo                                                                                                                p.57

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

En résumé, MySQL en PHP5/mysqli

Procédure usuelle avec mysqli :

1.   Initialisation de la connexion (souvent au début de la page)

$db = new mysqli(’serveur’,’login’,’mdp’,’Base’);

$db->set_charset("utf8"); // ou ’latin1’

2.   Envoi d’une requête au serveur MySQL

$resultat = $db->query("SELECT ? FROM Disques");

3.   Si la requête est un SELECT, lecture ligne par ligne du résultat reçu while ($ligne = $resultat->fetch_assoc() ) {

4.   La connexion est automatiquement fermée en fin de page.

 

PHP/MySQL — INP FCo

p.58

       
 

                                  Web    Rappels     PHP       PHP&MySQL      Fin

 

En résumé, MySQL en PHP5.1/PDO

Procédure usuelle avec PDO :

1.   Initialisation de la connexion (souvent au début de la page)

$db = new PDO(’mysql:host=serveur;dbname=Base’,’login’,’mdp’);

$db->query(’SET NAMES UTF8’);

2.   Envoi d’une requête au serveur MySQL

$resultat = $db->query("SELECT ? FROM Disques");

3.   Pour un SELECT, lecture ligne par ligne du résultat reçu while ($ligne = $resultat->fetch(PDO::FETCH_ASSOC)) { Autre syntaxe : foreach ($resultat as $ligne) {

On peut aussi récupérer un tableau complet des lignes

$lignes = $resultat->fetchAll(PDO::FETCH_ASSOC);

4.   La connexion est automatiquement fermée en fin de page.

     PHP/MySQL — INP FCo                                                                                                                p.59

                                  Web    Rappels     PHP       PHP&MySQL      Fin

   

Compléments : Variantes du fetch

Avec mysqli

fetch_assoc tableau associatif : $ligne[’date’]

fetch_row tableau numérique : $ligne[2]

fetch_object objet : $ligne->date

Avec PDO

Pour les fonction fetch*, paramètre optionnel parmi :

PDO::FETCH_ASSOC

PDO::FETCH_NUM

PDO::FETCH_OBJ

 

PHP/MySQL — INP FCo

p.60

       
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Mise en application

1.   Afficher un tableau HTML rempli avec le contenu de la table Disques. Transformer ce code en une fonction PHP qui reçoit un nom de table à afficher.

2.   Créer une table MySQL d’utilisateurs (login + mot de passe). Écrire une page PHP d’authentification l’utilisant. Conserver le statut "authentifié" d’un utilisateur sur d’autres pages.

3.   Faire un formulaire pour ajouter un artiste à la table. Le modifier pour permettre aussi la modification d’un artiste.

4.   Faire un formulaire de saisie de disque pour ajout dans la base. Le genre et l’artiste seront choisis dans une liste déroulante.

5.   Modifier le point précédent pour autoriser un choix de multiples genres. Comment en faire autant pour les artistes?

6.   Écrire un formulaire de recherche dans les CD. D’abord avec seulement titre et date, puis label, puis genre et artiste.

7.   Paginer les résultats des recherches.

8.   Ajouter dans une table un log sur les actions effectuées.

 

PHP/MySQL — INP FCo

p.61

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Compléments : LAST_INSERT_ID

Après cette requête

INSERT INTO Artiste SET nom=’Rolling stones’ comment connaître l’identifiant AUTO_INCREMENT créé?

I en SQL

SELECT LAST_INSERT_ID();

I en PHP 4 (mysql) mysql_insert_id()

I en PHP 5 (mysqli) mysqli_insert_id() ou $db->insert_id

I en PHP 5 (PDO)

$db->lastInsertId()

 

PHP/MySQL — INP FCo

p.62

       
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Un peu de sécurité

Il faut distinguer nombres et chaînes :

I Un nombre peut être utilisé tel quel

I Une chaîne doit être protégée et placée entre ’ ’

Exemple en mysqli :

$db->query("SELECT ? FROM matable "

."WHERE id_table=$number "

." OR titre=’" . $db->real_escape_string($texte)."’");

(mysql utilise mysql_real_escape_string())

En PDO :

$db->query("SELECT ? FROM matable "

."WHERE id_table=$number "

." OR titre=" . $db->quote($texte));

 

PHP/MySQL — INP FCo

p.63

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

La protection automatique de PHP

Deux modes de fonctionnement très différents :

I Magic quotes OFF

Les données HTTP ne sont pas modifiées : echo $_GET[’text’];?? Un’Deux"Trois\

I Magic quotes ON

On applique add_slashes() aux données HTTP : echo $_GET[’text’];?? Un\’Deux\"Trois\\

On peut connaître la valeur avec get_magic_quotes_gpc(). Ne peut se changer à la volée (cf fichier ).

=? Un code portable doit au minimum vérifier cette valeur.

Protection obsolète ! Voir la doc à ce sujet.

 

PHP/MySQL — INP FCo

p.64

       
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Mise en application (suite)

1.   Tester l’extension PHP xdebug.

2.   Écrire une application de forum simplifié

I une page de saisie du message, avec le corps du texte et soit le titre (pour une nouvelle discussion), soit le sujet (pour un ajout à une discussion existante);

I une page d’affichage de tous les messages Vérifier sa sécurité (injection SQL, XSS).

 

PHP/MySQL — INP FCo

p.65

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Création d’un site PHP

Un développement est très rarement from scratch, on utilise des composants éprouvés :

CMS Drupal, Joomla, Wordpress

Application complète avec d’innombrables extensions. Facilite la publication d’information par des non-développeurs.

framework Zend Framework, Symfony, Yii

Permet un développement rapide et structuré.

bibliothèque PEAR, eZcomponents

Par exemple, eZFeed pour lire ou créer des flux RSS.

Exceptions

Sites extrêmement simples, ou très spécifiques (par exemple, webservices).

 

PHP/MySQL — INP FCo

p.66

       
 

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Informations utiles

Pour garder le contact :

Les documents utilisés sont disponibles en ligne :

I Transparents

I Corrections des exercices

 

PHP/MySQL — INP FCo

p.67

                                        Web    Rappels     PHP       PHP&MySQL      Fin

   

Licence

Copyright (c) 2007-2011 François Gannaz

()

Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, Version 2.0 ou ultérieure publiée par la Free Software Foundation; pas de section inaltérable; pas de texte inaltérable de première page de couverture; texte inaltérable de dernière page de couverture :

« Auteur : François Gannaz () »

 

PHP/MySQL — INP FCo

p.68

       
 


7