Your SlideShare is downloading. ×
Formation PHP
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Formation PHP

26,131
views

Published on

Un support de cours PHP réalisé pour Junior ISEP.

Un support de cours PHP réalisé pour Junior ISEP.

Published in: Technology

2 Comments
18 Likes
Statistics
Notes
  • comment je peux télécharger ce document en ppt ou en pdf. Lors de téléchargement, je trouve un dossier compressé avec des fichiers xml!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • _____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
26,131
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1,647
Comments
2
Likes
18
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Formation PHP
      • Junior Isep 2006
    Pierre de La Morinerie
  • 2. Pourquoi PHP ?
    • PHP permet de :
      • Utiliser des formulaires
      • Proposer des pages dynamiques
      • Traiter des données sur un serveur
      • Communiquer avec une Base de données
    • PHP (ou un autre langage serveur) est quasiment indispensable à la réalisation d'un site Web avancé.
  • 3. Historique
    • Présentation :
      • 1994 : créé par Rasmus Lerdorf pour sa page perso
      • D'abord en Perl, puis en C : Personnal Home Page
      • 1997 : repris par Andi Gutmans et Zeev Suraski
      • Sortie de PHP3, largement utilisé depuis
    • Particularités :
      • Ressemble au C/C++
      • Faiblement typé
  • 4. Sommaire
    • Installation des serveurs (WAMP, EasyPHP)
    • Première page PHP
    • Structures du langage : variables, boucles, conditions
    • Fonctions et manipulation de tableaux
    • Base de données : présentation, administration
    • Base de données : requêtes, insertions, mises à jour
    • Formulaires XHTML
    • Sécurité
  • 5. Installation des serveurs (WAMP)
  • 6. Installation des serveurs
    • Pourquoi utiliser un serveur ?
      • Seul le serveur sait interpréter du PHP
    • Que doit-on installer ?
      • Apache : pour communiquer avec le navigateur
      • PHP : pour interpréter les fichiers .php
      • MySQL : pour utiliser la Base de Données
    • Ces trois outils, couplés à Linux ou Windows, forment une solution LAMP ou WAMP
  • 7. Installation des serveurs
    • WAMP :
      • regroupe tous ces serveurs
      • intègre aussi des outils d’administration
      • est gratuit
    • WAMP n'est pas obligatoire ! On pourrait installer chaque serveur séparément – il est d'ailleurs bon de savoir le faire.
  • 8. Installation des serveurs
    • Installation de WAMP
      • Télécharger WAMP depuis www.wampserver.com , ou EasyPHP
    • Questions posées par l'installeur :
      • « Lancer les services automatiquement » : Oui
      • « Dossier racine » : par défaut
      • « Serveur SMTP » : par défaut (localhost)
      • « Adresse email » : défaut
      • « Navigateur par défaut » : Si Firefox, aller chercher firefox.exe, sinon laisser explorer.exe
      • « Alerte du pare-feu » : débloquer Apache
  • 9. Installation des serveurs
    • Tester l'installation
      • Tapez « localhost » dans la Barre d'adresse de votre navigateur
      • La page d'accueil de WAMP doit s'afficher
    • L'interface de WAMP :
      • Sert à démarrer ou arrêter les serveurs
      • Réside ensuite dans la Zone de notification
      • Contient des raccourcis vers les outils d'administration : phpMyAdmin, sqlLiteManager
      • Permet également de configurer Apache et PHP
  • 10. Première page PHP
  • 11. Première page PHP
    • Arborescence des dossiers
      • Les fichiers PHP doivent être visibles par Apache
      • Ils faut donc qu'ils soient dans le dossier WebRoot d'Apache (par défaut C:wampwww )
      • Créez un dossier test dans le dossier www
    • Premier fichier PHP
      • Ouvrez une page HTML avec Notepad++
      • Enregistrez-la dans www estindex.php
  • 12. Première page PHP
    • Affichage de la page
      • Ouvrez votre navigateur
      • Tapez l'adresse http:ocalhost estindex.php
      • La page HTML, servie par Apache, s'affiche
  • 13. Première page PHP
    • Inclusion d'un code PHP
      • Ouvrez le fichier www estindex.php avec Notepad++
      • Rajouter dans le <body> la ligne : <p> Date : <?php echo date ( &quot;d-m-Y H:i:s&quot; ) ?> </p>
      • Sauvegarder la page
    • Affichage
      • Ouvrir le navigateur pour tester le résultat
      • La page doit comporter une ligne : Date : 14-11-2006 18:15:42
      • Si on rafraîchit la page (F5), la ligne se met à jour
  • 14. Première page PHP
    • Explication du fonctionnement : côté client
      • Schéma d'une requête statique :
  • 15. Première page PHP
    • Explication du fonctionnement : côté client
      • Schéma d'une requête dynamique :
  • 16. Première page PHP
    • Explication du fonctionnement : côté serveur
      • <p> Date : <?php echo date ( &quot;d-m-Y H:i:s&quot; ) ?> </p>
      • La fonction date() affiche la date actuelle
      • Le mot-clef echo sert à afficher le résultat
  • 17. Première page PHP
    • Une autre fonction pratique : include()
      • Include() permet d'insérer une page PHP dans une autre.
      • Utilisation : <?php include ( 'une_autre_page.php' ); ?>
      • On peut mettre du PHP dans la page incluse.
      • La page incluse est directement insérée dans le code : il ne faut pas y mettre des tags <html> ou <body>
  • 18. Première page PHP
    • Include()
      • Exemple d'utilisation : on peut insérer une page « menu.php » en haut de toutes les pages de son site.
      • Menu.php : <div class=''menu''> <ul> <li>Lorem</li> <li>Ipsum</li> </ul> </div>
  • 19. Structures du langage
  • 20. Structure du langage
    • Syntaxe :
      • Syntaxe inspirée du C, comme C++, Java ou C#
      • Mais c'est un langage faiblement typé : les variables n'ont pas de type prédéfini, et s'adaptent au contexte
    • Avantages :
      • La syntaxe C est élégante et largement répandue
      • Grande flexibilité donnée par les types faibles
  • 21. Structure du langage
    • Elements de syntaxe :
      • Les lignes se terminent par un point-virgule .
      • Les commentaires peuvent s'écrire : <?php // Commentaire de type C /* Commentaire C++ */ # Commentaire Perl ?>
      • Les blocs sont délimités par des accolades .
  • 22. Structure du langage
    • Déclarer une variable
      • Il suffit de la nommer ou de l'utiliser : <?php $ma_variable; // Déclaration d'une variable $login = ''admin''; // Autre déclaration ?>
      • Les variables sont toutes préfixées du signe  «  $  »
  • 23. Structure du langage
    • Types des variables :
      • Il n'y a pas besoin de déclarer de type : <?php $answer = 42; // Integer $foo = ''bar''; // Chaîne de caractère $is_cool = true; // Booléen ?>
  • 24. Structure du langage
    • Calculs :
      • <?php $number = 15; $id = '3'; echo $number * 3; // Affiche '45' echo ++$number; // Affiche '16' echo $id + 1; // Affiche '4' ?>
  • 25. Structure du langage
    • Fonctions mathématiques :
      • <?php $angle = 45; echo 'Cos = ' . cos($angle); $a = 3; $b = -5; $c = 1; $x1 = -$b - sqrt( pow($b, 2) – 4 * $a * $c ) / (2*$a); echo 'Solution 1 = ' . $x1; ?>
      • Pas besoin d'include particulier pour utiliser ces fonctions
  • 26. Structure du langage
    • Chaînes de caractères :
      • Leur fonctionnement est intuitif : <?php $chaine1 = ''Bonjour ''; $nom = ''Marc''; echo $chaine1 . $nom; // Affiche ''Bonjour Marc'' $nom2 = $nom; // Pas besoin de strcpy() :p echo $nom2; // Affiche ''Marc'' ?>
  • 27. Structure du langage
    • Chaînes de caractères :
      • Les guillemets peuvent être simples ou doubles.
        • Guillemets simples : aucune variable n'est remplacée, aucun caractère n'est échappé (plus rapide)
        • Guillemets doubles : les variables sont remplacées, les caractères échappés (plus lent)
      • <?php $nom = ''Ford Escort'' ; echo ''Bonjour, $nom !'' ; echo 'Bonjour, ' . $nom . ' !' ; echo 'Bonjour, $nom !' ; // Affiche ''Bonjour, $nom !'' ?>
  • 28. Structure du langage
    • Structures conditionnelles et boucles
      • Les structures conditionnelles (if, switch) et les boucles (for, while) fonctionnent de la même manière qu'en C
  • 29. Structure du langage
    • Structures conditionnelles : if
      • <?php $age = 12; if($age < 10) { echo 'Tu es trop jeune pour entrer...'; } else if ($age >=10 && $age < 12) { echo 'Tu peux rentrer !'; } else { echo 'Tu es trop vieux pour rentrer...'; } ?>
  • 30. Structure du langage
    • Structures conditionnelles : switch
      • <?php $nom = 'Chewbacca'; switch($nom) { case 'Dark Vador' : echo 'C'est un méchant'; break; case 'Chewbacca': echo 'C'est un gentil'; break; default: echo 'Je ne sais pas...'; break; } ?>
  • 31. Structure du langage
    • Structures conditionnelles : for
      • <?php $a = 5; $b = 8; $result = 0; for($i = 0; $i < $b; $i++) { $result = $result + $a; } echo ''$a * $b = $result''; ?>
  • 32. Structure du langage
    • Structures conditionnelles : while
      • <?php $a = 115; $log2 = 0; $tmp = $a; while($tmp > 2) { $tmp = $tmp / 2; $log2++; } echo ''Le log2 de $a est $log2.''; ?>
  • 33. Structure du langage
    • Passage de variables :
      • On peut passer des variables comme paramètres à une page PHP
      • Il suffit de les insérer dans l'adresse de la page
      • Les adresses sont alors de la forme : http://exemple.com/ma_page.php?variable=valeur
    • Exemple :
      • http://www.google.fr/search.php?q=recherche
  • 34. Structure du langage
    • Comment récupérer les variables d'une Url ?
      • Les variables d'une Url sont contenues dans un tableau nommé $_GET
      • On y accède par : $ma_variable = $_GET['ma_variable'];
  • 35. Structure du langage
    • Exemple :
      • Si on appelle une page par : index.php?nom=alfred&age=12
      • On pourra afficher : <?php echo $_GET[ 'nom' ]; // Affiche ''Alfred'' echo $_GET[ 'age' ]; // Affiche ''12'' ?>
  • 36. Structure du langage - TD
    • Sujet :
      • Créer une page-maître, qui appelle toutes les pages-filles du site
    TD 1 – Pages dynamiques
  • 37. Structure du langage - TD
    • Exemple :
      • L'adresse de la page d'accueil est : index.php?page=accueil
      • L'adresse de la page de contacts est : index.php?page=contacts
      • L'adresse 'index.php' sans paramètres doit afficher l'accueil.
  • 38. Structure du langage - TD
    • Avantages :
      • Une seule page pour gérer les éléments communs (titre, menu)
      • Seul le contenu variable est à modifier
    • Connaissances requises :
      • Passer un paramètre à une page
      • Récupérer ces paramètres à l'aide de $_GET[]
      • Utiliser un switch() pour traiter le paramètre
      • Inclure la page-enfant à l'aide d'include()
  • 39. Tableaux Fonctions
  • 40. Tableaux – fonctions
    • Présentation des tableaux
      • Les tableaux de PHP fonctionnent un peu comme en C
      • Ils sont cependant beaucoup plus souples
  • 41. Tableaux – fonctions
    • Pourquoi utiliser des tableaux :
      • Classement de données
      • Economie de variables
      • Récupération de résultats provenant d'une BDD
      • Facilité de manipulation
  • 42. Tableaux – fonctions
    • Utilisation d'un tableau numéroté :
      • Pour ajouter un élément, il suffit de préciser son numéro <?php $tableau = array(); $tableau[0] = 'Riemann'; $tableau[1] = 'Green'; $tableau[] = 'Lebesgue'; // Ajoute à la suite $tableau[5] = 'Schwartz'; echo $tableau[1]; // Affiche ''Green' ?>
  • 43. Tableaux – fonctions
    • Utilisation d'un tableau numéroté :
      • Pour remplir un tableau, on peut aussi utiliser la fonction array() <?php $tableau = array('Tintin', 'Haddock', 'Milou'); echo $tableau[1]; // Affiche ''Haddock'' ?>
  • 44. Tableaux – fonctions
    • Taille des tableaux :
      • La taille des tableaux est gérée automatiquement
      • On peut donc rajouter ou supprimer des éléments à volonté
  • 45. Tableaux – fonctions
    • Tableaux associatifs :
    • Le tableau est indicé par une string, et pas par un n°
    • <?php $pdg = array(); // Bonne pratique $pdg['Microsoft'] = 'Ballmer'; $pdg['Apple'] = 'Jobs'; $pdg[] = 'Stallman'; // $pdg[0] = 'Stallman echo $pdg['Apple']; // Affiche 'Jobs' ?>
  • 46. Tableaux – fonctions
    • Afficher un tableau :
    • « Echo » n'affiche que le type de l'objet
    • Il faut utiliser var_dump() pour déboguer
    • <?php $test = array('Lorem', 'Ipsum'); echo $test; // Affiche 'Array' var_dump($test); // Affiche le contenu du tableau ?>
  • 47. Tableaux – fonctions
    • Parcourir un tableau :
    • Pour un affichage formaté , il faut parcourir le tableau
    • Pour les tableaux numérotés , on peut utiliser un for .
    • <?php $membres = array('Frodon', 'Gandalf', 'Legolas'); for($i = 0; $i < count($membres); $i++) { echo 'Le membre ' . $i . ' est ' . $membres[$i] . '. '; } ?>
  • 48. Tableaux – fonctions
    • Parcourir un tableau :
    • Pour tous les tableaux, y compris associatifs, on utilise la structure foreach .
    • Elle permet de récupérer dans une boucle tous les éléments d'un tableau, un par un
    • <?php // Syntaxe habituelle foreach($tableau as $value) { ... } // On peut aussi récupérer le nom de la clef : foreach($tableau as $key => $value) { ... } ?>
  • 49. Tableaux – fonctions
    • Parcourir un tableau :
    • Exemple de foreach :
    • <?php $gourous = array( 'GPL' => 'Richard Stallman', 'Linux' => 'Linus Torvalds', 'Microsoft' => 'Bill Gates'); foreach($gourous as $key => $value) { echo ''Le gourou de $key est $value.''; } ?>
  • 50. Tableaux – fonctions
    • Foreach – nom des variables
    • On peut nommer $key et $value comme on veut
    • Cela permet souvent de gagner en lisibilité
    • Foreach – modification des données
    • Foreach fonctionne par copie des éléments du tableau
    • En conséquence, si l'on modifie $key ou $value dans le foreach , le tableau original n'est pas modifié.
  • 51. Tableaux – fonctions
    • Tableaux multidimensionnels
    • Il s'agit de tableaux contenant des tableaux
    • Ils proviennent habituellement d'une BDD
    • Exemple : <?php $tab = array('ligne1' => '', 'ligne2' => ''); $tab['ligne1'] = array('nom' => 'Henri', 'age' => 12); echo $tab['ligne1']['nom']; // Affiche 'Henri' var_dump($tab); // Affiche tout le tableau ?>
  • 52. Tableaux – fonctions
    • Exercice :
    • Réaliser un script qui affiche toutes les variables passées en paramètre de la page
    • Exemple : exercice.php?nom=moi&age=32 Doit afficher : Le paramètre 'nom' vaut 'moi'. Le paramètre 'age' vaut '32'.
    • Le script doit fonctionner pour n'importe quel paramètre !
  • 53. Tableaux – fonctions
    • Introduction aux fonctions
      • Les fonctions de PHP sont très semblables aux C
      • Cependant :
        • Elles sont un peu plus souples
        • Elles ne manipulent pas des pointeurs, mais éventuellement des « références »
        • Elles peuvent renvoyer des tableaux
  • 54. Tableaux – fonctions
    • Les fonctions sont très pratiques
      • Elles permettent de découper le programme en petits blocs réutilisables
      • Elles augmentent la modularité et la lisibilité du code
    • Une fonction est une boîte noire
      • Idéalement, sa sortie de dépend que de son entrée
      • Elle peut éventuellement modifier ses paramètres, s'ils sont passés par référence (~ pointeurs)
  • 55. Tableaux – fonctions
    • Syntaxe générale
      • La syntaxe générale d'une fonction est : <?php function nom_de_la_fonction( $param1 , $param2 ...) { // Du code } ?>
  • 56. Tableaux – fonctions
    • Exemple de fonction
      • Une fonction pour afficher le contenu d'un tableau : <?php function print_array( $array ) { echo 'Tableau :<br />'; foreach($array as $key => $value) { echo ''$key => $value <br />''; } } ?>
  • 57. Tableaux – fonctions
    • Valeur de retour
      • En PHP, on ne précise pas le type de valeur retournée
      • La fonction peut retourner (ou non) une valeur de n'importe quel type
      • Le mot-clef 'return' n'est pas obligatoire si la fonction ne renvoie rien
  • 58. Tableaux – fonctions
    • Passage des arguments
      • Par défaut, les paramètres (ou arguments) d'une fonction sont passés par valeur
      • La fonction travaille donc sur une copie du paramètre
  • 59. Tableaux – fonctions
    • Passage des arguments
      • Exemple de passage par valeur (comportement par défaut) : <?php function add($a, $b) { $a = $a + $b; return $a; } $a = 5; $b = 2; $somme = add($a, $b); echo $a; // Affiche '5' : $a n'est pas modifié ?>
  • 60. Tableaux – fonctions
    • Passage des arguments
      • On peut aussi passer les arguments par référence
      • Dans ce cas, on peut modifier les paramètres
      • Cette technique est similaire aux pointeurs du C, mais :
        • Beaucoup plus intuitive
        • Sans risque de fausse manipulation
      • Le passage par référence se fait en préfixant le paramètre d'une perluète ' & '
  • 61. Tableaux – fonctions
    • Passage des arguments
      • Exemple de passage par référence : <?php function add(&$a, $b) { $a = $a + $b; } $a = 5; $b = 2; $somme = add($a, $b); echo $a; // Affiche '7' : $a a été modifié ?>
  • 62. Tableaux – fonctions
    • Utilité du passage par référence :
      • Lorsque l'on veut retourner plusieurs valeurs (quoique dans ce cas l'on utilise plutôt des tableaux)
      • Lorsque l'on veut manipuler directement une variable : <?php function check_empty( & $array ) { if(!isset($array) || empty($array)) { $array = array('default value'); } } ?>
  • 63. Tableaux – fonctions
    • Commentez toujours vos fonctions !
      • Commenter une fonction sert à :
        • Avoir les idées plus claires sur sa conception
        • Rendre le code réutilisable facilement
        • Faciliter la lecture de votre code par d'autres programmeurs
      • Indiquez avant chaque fonction :
        • Son utilité
        • Ses paramètres
        • Ce qu'elle renvoie
  • 64. Tableaux – fonctions
    • PHPDoc
      • La syntaxe PHPDoc est une convention pour commenter les fonctions
      • Elle permet également de générer la documentation de votre code automatiquement
      • Elle n'influence bien sûr pas l'exécution du code PHP
  • 65. Tableaux – fonctions
    • PHPDoc
      • Exemple de fonction commentée en style PHPDoc : <?php /** Affiche le contenu d'un tableau * * @param array $array Le tableau à afficher * @return bool False si $array n'est pas un tableau, true sinon. */ function print_array( $array ) {...} ?>
  • 66. Tableaux – fonctions
    • PHPDoc
      • Exemple de fonction commentée en style PHPDoc : <?php /** Affiche le contenu d'un tableau * * @param array $array Le tableau à afficher * @return bool False si $array n'est pas un tableau, true sinon. */ function print_array( $array ) {...} ?>
  • 67. Tableaux – fonctions
    • Exercice :
      • Afficher le contenu d'un tableau PHP bidimensionnel dans une <table> HTML
      • Le script doit permettre d'afficher plusieurs lignes d'un tableau de plusieurs colonnes
      • Connaissances requises :
        • Créer un tableau bidimensionnel
        • Parcourir le tableau avec foreach
        • Générer le code HTML correspondant à la volée
  • 68. Bases de données 1
  • 69. Bases de données 1
    • Utilité des BDD
      • Elles permettent de... classer des données
      • Mais surtout de rechercher selon des critères précis
      • Elles peuvent également être mises en relation
  • 70. Bases de données 1
    • PHP et les BDD
      • PHP comporte de nombreuses fonctions pour communiquer avec une BDD
    • BDD communes
      • Une des plus connues est MySQL (libre et gratuit)
      • Citons aussi Oracle, SQL Server, Firebird...
  • 71. Bases de données 1
    • Communiquer avec une BDD
      • Une BDD reçoit des requêtes écrites en langage SQL
      • SQL est proche du langage naturel
    • Administrer une BDD
      • On peut administrer une BDD uniquement en envoyant des commandes (comme un FTP sous Linux)
      • Cependant des interfaces rendent cette tâche plus intuitive (comme phpMyAdmin)
  • 72. Bases de données 1
    • PhpMyAdmin
      • Application écrite en PHP
      • Permet d'administrer facilement une base MySQL
    • Accès à PhpMyAdmin
      • Sous easyPHP, taper : http://localhost/mysql/
  • 73. Bases de données 1
    • Vocabulaire :
      • Base : « armoire » contenant des tiroirs (les tables)
      • Table : Casier contenant des informations classées – le nom et l'age des visiteurs, par exemple
      • Champs : colonnes d'une table
      • Entrées : lignes d'une table
  • 74. Bases de données 1
    • Créons une nouvelle table dans PhpMyAdmin :
      • Créer une base nommée 'test'
      • Créer une nouvelle table dans cette base, nommée 'users', avec 3 champs
      • Créer les trois champs : nom, âge, courriel
      • Remplir cette table avec deux ou trois entrées
  • 75. Bases de données 1
    • Lire des données avec PHP
      • Cela ressemble à peu à la communication avec un FTP
      • Il faut d'abord se connecter, puis lancer sa requête, et récupérer la réponse de MySQL
  • 76. Bases de données 1
    • Etablir la connexion
      • Avant de communiquer avec MySQL, il faut « attirer son attention »
      • Nous allons démarrer une conversation avec MySQL
      • On utilise pour cela la fonction mysql_connect()
    • mysql_connect()
      • La fonction mysql_connect() s'utilise comme ceci : mysql_connect($serveur, $login, $mot_de_passe);
  • 77. Bases de données 1
    • Exemple :
      • Voici comment vous connecter à votre base MySQL : <?php mysql_connect('localhost', 'root', ''); ?>
      • Explications :
        • 'localhost' est le nom du serveur auquel on se connecte – ici, le serveur SQL est sur notre propre machine.
        • 'root' est le nom de l'utilisateur principal de MySQL
        • '' : par défaut, l'utilisateur root n'a pas de mot de passe
  • 78. Bases de données 1
    • Que faire une fois connecté ?
      • D'abord, sélectionner la base que l'on veut utiliser
      • On se sert de la fonction mysql_select_db() mysql_select_db($database);
  • 79. Bases de données 1
    • Que faire ensuite ?
      • Une fois que l'on a plus besoin de parler à MySQL, il faut terminer la conversation
      • Si on ne le fait pas, MySQL finit par la terminer lui-même, mais cela prend du temps inutile
      • On utilise la fonction mysql_close() mysql_close()
  • 80. Bases de données 1
    • Exemple complet de connexion :
      • <?php mysql_connect('localhost', 'root', ''); mysql_select_db('test'); // ici, on peut communiquer avec la BDD mysql_close(); ?>
      • Si ce code n'affiche rien, tout s'est bien passé
  • 81. Bases de données 1
    • Interroger la BDD
      • On « parle » à MySQL avec la fonction mysql_query() mysql_query($requete)
      • $requete est une chaîne de caractère contenant une commande SQL
  • 82. Bases de données 1
    • Le langage SQL
      • C'est une façon standardisée de communiquer avec les Bases de Données
      • Exemple de requête SQL : SELECT * FROM users
        • SELECT : la commande à exécuter (une sélection)
        • * : les champs que l'on veut récupérer (tous)
        • FROM table : le nom de la table dans laquelle on veut chercher
  • 83. Bases de données 1
    • Exemple en PHP
      • Voici comment exécuter la requête précédente : <?php // Insérer le code de connexion à la BDD $reponse = mysql_query('SELECT * FROM users'); ?>
  • 84. Bases de données 1
    • Comment traiter les réponses ?
      • La réponse renvoyée par MySQL est un recordset
      • Un recordset est un ensemble de valeurs brutes
      • On ne peut pas le manipuler directement
      • Il faut donc l'interpréter
  • 85. Bases de données 1
    • Transformer la requête en tableau
      • mysql_fetch_array() transforme chaque ligne du recordset en un tableau associatif
      • Exemple : <?php $ligne1 = mysql_fetch_array($reponse); echo $ligne1['nom']; // Affiche le nom de la 1ère // ligne ?>
  • 86. Bases de données 1
    • Boucle sur les résultats
      • mysql_fetch_array() renvoie chaque ligne l'une après l'autre
      • Lorsqu'il n'y a plus de ligne, elle renvoie false
      • On peut donc l'utiliser dans une boucle while() facilement
  • 87. Bases de données 1
    • Exemple de boucle sur les données :
      • <?php $ligne = mysql_fetch_array($reponse); while($ligne != false) { echo $ligne['nom']; $ligne = mysql_fetch_array($reponse); } ?>
  • 88. Bases de données 1
    • Autre exemple plus concis :
      • <?php while($ligne = mysql_fetch_array($reponse)) { echo $ligne['nom']; } ?>
  • 89. Bases de données 1
    • Exercice :
      • Récupérer toutes les données de la table 'users'
      • Les afficher sous forme d'un tableau Html
  • 90. Bases de données 1
    • Sélectionner des données
      • SQL permet de ne sélectionner que les données dont on a besoin, ou de les classer
      • Sélection : WHERE, FROM, LIMIT
      • Classement : ORDER BY
  • 91. Bases de données 1
    • La clause WHERE
      • Utilisée tout le temps
      • Elle restreint les lignes à la condition donnée
      • Exemple : SELECT * FROM users WHERE age > 16 SELECT * FROM users WHERE nom='Berthe'
      • Note : il se peut qu'une requête ne renvoie aucune ligne, si la condition n'est remplie par aucune des entrées
  • 92. Bases de données 1
    • La clause LIMIT
      • Permet de restreindre le nombre de données renvoyées
      • Peu standard, mais souvent utilisée avec MySQL
      • Exemple : SELECT * FROM users LIMIT 20 SELECT * FROM users LIMIT 5, 15
      • Le premier exemple renvoie les 20 premières entrées
      • Le second exemple renvoie les entrées 5 à 15
  • 93. Bases de données 1
    • La clause ORDER BY
      • Permet de grouper les données reçues
      • On peut éventuellement spécifier un ordre de tri (ascendant ou descendant)
      • Exemples : SELECT * FROM users ORDER BY age SELECT * FROM users ORDER BY name ASC
      • La première requête groupe les résultats par age
      • La seconde classe les résultats par ordre alphabétique
  • 94. Bases de données 1
    • Regroupement et combinaisons
      • On peut bien sûr combiner toutes ces clauses
      • Exemple : SELECT * FROM users WHERE age > 16 AND prenom = 'Jules' ORDER BY nom ASC LIMIT 20
  • 95. Bases de données 2 Formulaires
  • 96. Bases de données 2 Gestion des erreurs CRUD
  • 97. Bases de données 1
    • Gestion des erreurs
      • Lorsque une requête est mal formée ou échoue, MySQL renvoie un message d'erreur
      • On peut y accéder par la fonction mysql_error()
      • mysql_errror() renvoie le dernier message d'erreur généré par MySQL
  • 98. Bases de données 2 - Formulaires
    • Gestion des erreurs
      • Exemple d'utilisation : <?php $sql = 'INSERT bad_data'; mysql_query($sql) or die(mysql_error()); ?>
  • 99. Bases de données 2 - Formulaires
    • Modification des données
      • Les opérations les plus fréquentes sur les BDD sont résumées par l'acronyme CRUD
        • Create
        • Retrieve
        • Update
        • Delete
      • Certains frameworks pré-implémentent ces opérations
      • Voyons comment les réaliser avec des requêtes SQL
  • 100. Bases de données 2 - Formulaires
    • Create : Insertion dans une base de données
      • Pour ajouter une entrée dans une BDD, on utilise la requête INSERT
      • INSERT crée une nouvelle entrée à partir de rien
      • Structure : INSERT INTO table(liste_des_champs) VALUES(liste_des_valeurs)
      • La liste des champs est optionnelle
  • 101. Bases de données 2 - Formulaires
    • Insertion dans une base de données
      • Exemple d'insertion : < ?php $sql = ''INSERT INTO users(prenom, age) VALUES ('Paul', 51) ''; mysql_query($sql) or die(mysql_error()); ?>
  • 102. Bases de données 2 - Formulaires
    • Update : Mise à jour
      • Pour mettre à jour une entrée existante, on utilise la commande UPDATE
      • UPDATE table SET field = value WHERE condition
  • 103. Bases de données 2 - Formulaires
    • Mise à jour
      • Exemple : on veut changer l'âge d'un utilisateur <?php $sql = '' UPDATE users SET age = 21 WHERE name = 'Paul' ''; mysql_query($sql) or die(mysql_error()); ?>
  • 104. Bases de données 2 - Formulaires
    • Delete : Supression
      • Pour supprimer une entrée, on utilise la commande DELETE
      • DELETE FROM table WHERE condition
  • 105. Bases de données 2 - Formulaires
    • Suppression
      • Exemple : on veut supprimer des utilisateurs <?php $sql = '' DELETE FROM users WHERE name = 'Paul' ''; mysql_query($sql) or die(mysql_error()); ?>
      • Autre exemple : $sql = '' DELETE FROM users WHERE age < 16 ''
  • 106. Bases de données 2 - Formulaires
    • Suppression
      • Exemple : on veut supprimer des utilisateurs <?php $sql = '' DELETE FROM users WHERE name = 'Paul' ''; mysql_query($sql) or die(mysql_error()); ?>
      • Autre exemple : $sql = '' DELETE FROM users WHERE age < 16 ''
  • 107. Formulaires
  • 108. Bases de données 2 - Formulaires
    • Pourquoi utiliser des formulaires ?
      • On a vu comment passer des infos à une page PHP, par la méthode GET (variables dans l'Url)
      • Ce n'est pas très ergonomique...
      • Les formulaires sont user-friendly
    • Les formulaires permettent :
      • De rentrer des données
      • De les envoyer au serveur
      • D'afficher des contrôles : zones de textes, menus déroulants, boutons, etc.
  • 109. Bases de données 2 - Formulaires
    • Méthode de conception
      • Les formulaires sont conçus en XHTML
      • Les données sont récupérées et interprétées par PHP
  • 110. Bases de données 2 - Formulaires
    • XHTML – Gabarit de formulaire
      • Formulaire = contrôles dans une balise <form>
      • Exemple : <form method=''post'' action=''save.php''> <!-- Contrôles du formulaire --> </form>
      • Method : type de transmission des données
        • Post : passage par paramètre invisible
        • Get : passage par l'Url (déconseillé)
      • Action : fichier cible du formulaire
  • 111. Bases de données 2 - Formulaires
    • Contrôles communs
      • <input type=''text'' /> ligne de texte (une seule ligne)
      • <textarea> zone de texte (multilignes)
      • <input type=''submit'' /> bouton de validation
      • <select> menu déroulant
    • Contrôles de mise en forme
      • <fieldset> groupe de contrôles
      • <legend> titre du fieldset
  • 112. Bases de données 2 - Formulaires
    • Exemple de formulaire : <form method=''post'' action=''form.php''> <input type=''text'' name=''nom'' value='''' /> <input type=''text'' name=''age'' value='''' /> <input type=''submit' value=''Envoyer'' /> </form>
  • 113. Bases de données 2 - Formulaires
    • PHP – traitement des données
      • Les données envoyées par un formulaire sont contenues dans le tableau $_POST
      • $_POST s'utilise de la même façon que $_GET
      • Si $_POST est vide, le formulaire n'a pas été envoyé
  • 114. Bases de données 2 - Formulaires
    • Méthode classique de traitement des données
      • On regarde si $_POST contient des données
      • Si oui, on traite les données (affichage, enregistrement...)
      • Si non, on affiche le formulaire
  • 115. Bases de données 2 - Formulaires
    • Exemple de traitement des données
      • <?php if ( !empty($_POST) ) { echo $_POST['nom']; // Traiter les données echo 'Données traitées correctement !'; } else { ?> <form method=''post'' action='''''> <!-- Contrôles du formulaire --> </form> <?php } ?>
  • 116. Bases de données 2 - Formulaires
    • Exercice : enregistrer un nom dans la BDD
      • Créer un formulaire permettant d'ajouter un utilisateur dans la BDD
    • Méthode
      • Créer une page PHP
      • Si il y a des données POSTées, les insérer dans la BDD, avec une requête SQL ''INSERT''
      • Sinon, afficher le formulaire
  • 117. Bases de données 2 - Formulaires
    • TP : Réalisation
      • Quatre pages PHP principales : index.php, add.php, edit.php, delete.php
      • Un fichier de connexion à la BDD, bdd.php, inclus au début de toutes les pages principales
      • Vous êtes libres du reste :)
  • 118. Sessions Sécurité Mise en ligne
  • 119. Sessions
  • 120. Sécurité – mise en ligne
    • Sessions
      • Permettent de conserver des données entre les pages
      • Gérés automatiquement par PHP
  • 121. Sécurité – mise en ligne
    • Utilisation des sessions
      • Initialiser avec session_start()
      • Utiliser le tableau $_SESSION
  • 122. Sécurité
  • 123. Sécurité – mise en ligne
    • Sécurité
      • La question de la sécurité est primordiale
      • Dès que l'on interagit avec l'extérieur, on s'expose à des problèmes de sécurité :
        • Exécution de requêtes SQL malicieuses
        • Vol de données
        • Exécutions de commandes malicieuses sur le serveur
        • Vol d'identifiants (login/mot de passe)
        • Accès frauduleux au site
  • 124. Sécurité – mise en ligne
    • Principe fondamental :
      • NE JAMAIS FAIRE CONFIANCE !
    • Il faut toujours vérifier les données provenant de l'extérieur
  • 125. Sécurité – mise en ligne
    • Principaux vecteurs d'attaques :
      • Injections de script
      • Injections SQL
      • Injection de HTML
      • Cross-Site Scripting (XSS)
  • 126. Sécurité – mise en ligne
    • Injection de script :
      • Tentative d'injecter des variables (par l'Url : méthode GET)
      • Tentative d'exécuter des scripts sur le serveur (faille d'include)
    • Pour se protéger :
      • Toujours initialiser les variables utilisées
      • Vérifier les variables avant de faire des include
  • 127. Sécurité – mise en ligne
    • Injection SQL
      • Tentative d'injecter des bouts de requête SQL
      • On peut virtuellement exécuter n'importe quelle requête
    • Exemple :
      • SELECT * FROM users WHERE login = '$name'
      • Si $name vaut : ' OR '1' = '1 Tout nom d'utilisateur renverra une réponse valide.
    • On pourrait ainsi récupérer des mots de passe, ou même effacer la base de données : '; DELETE FROM users WHERE '1' = '1
  • 128. Sécurité – mise en ligne
    • Injection SQL : pour se protéger :
      • Utiliser mysql_real_escape_string()
      • Cette fonction échappe les guillemets malicieux : elle transforme les ' en '
    • Attention à magic_quotes_gpc
      • Option de php.ini permettant d'échapper automatiquement les chaînes
      • Si elle est activée, il ne faut pas échapper une seconde fois la chaîne !
      • On utilise alors stripslashes() avant mysql_real_escape_string()
  • 129. Sécurité – mise en ligne
    • Injection HTML
      • Si l'utilisateur peut rentrer du texte affiché ensuite sur une page, il pourrait y mettre de l'Html
    • Exemple :
      • Dans une news, on pourrait insérer : Voici ma news <!--
      • Le début de commentaire HTML briserait la maquette de la page lors de l'affichage
      • On pourrait aussi insérer du code Javascript malicieux
  • 130. Sécurité – mise en ligne
    • Injection HTML : pour se protéger :
      • Utiliser la fonction htmlentities() avant d'afficher du texte
      • Elle transforme les balises Html en texte affichable
      • Le Html est alors affiché comme du texte brut
  • 131. Sécurité – mise en ligne
    • Cross-Site Scripting (XSS)
      • Injection de Javascript renvoyant sur une autre page
      • Le Javascript peut voler des cookies ou des mots de passe, et les envoyer à une page Web distante
  • 132. Sécurité – mise en ligne
    • XSS - Exemple :
      • On appelle la page : add.php?nom= ''/><script>window.location='hack.php'</script><br &age=valeur_invalide
      • Cette page pourrait afficher un message d'erreur et le formulaire prérempli : <input name=''nom'' value=''Nom'' /> deviendrait alors : <input name=''nom'' value='' '' /> <script>....</script> <br />
  • 133. Sécurité – mise en ligne
    • XSS – Protection :
      • Vérifier que l'on affiche jamais de variable POST ou GET sans vérification préalable
  • 134. Mise en ligne
  • 135. Sécurité – mise en ligne
    • Comment mettre en ligne un site PHP ?
      • Il faut s'assurer que l'hébergeur dispose de PHP et d'une base MySQL (ce qui est fréquent)
      • Vérifier la version de PHP
        • PHP4 est normalement compatible avec PHP5
        • PHP5 n'est pas compatible avec PHP4
      • Vérifier dans la doc que les fonctions qu'on utilise sont compatibles avec la version de PHP du serveur
      • Vérifier les variables de configuration de PHP
  • 136. Sécurité – mise en ligne
    • Variables de configuration
      • PHP peut être configuré à l'aide du fichier php.ini
      • Il faut coder en gardant à l'idée que la configuration du serveur peut être différente
    • Exemple :
      • magic_quotes_gpc (souvent à On)
        • Echappe automatiquement les chaînes
      • short_tags (par défaut à Off)
        • Autorise <? ?> au lieu de <?php ?>
      • register_globals (souvent à Off)
        • Place $_POST['clefs'] dans $clefs - dangereux
  • 137. Sécurité – mise en ligne
    • Déploiement
      • Le déploiement est souvent source de problèmes
      • Si possible, tester au fur et à mesure que l'on code
      • Prévoir du temps pour le déploiement
  • 138. Conclusion
  • 139. Sécurité – mise en ligne
    • À découvrir
      • Les Sessions en PHP
      • Les systèmes d'authentification (login)
      • Le PHP Objet
      • Les fonctionnalités de PHP5
      • Interactions AJAX/PHP
    • Les Frameworks
      • Comment développer rapidement
      • Automatiser les tâches répétitives (comme les CRUD)
      • Formation aux Frameworks et PHP avancé en février
  • 140. Sécurité – mise en ligne
    • Mobitrok
      • Intégrer le PHP au design
      • Pensez à concevoir un peu l'architecture avant
      • Rendu pour le 9 janvier (fin des vacances)
      • Résultats annoncés fin janvier

×