630 likes | 752 Views
Programmation Web : PHP. Jérôme CUTRONA jerome.cutrona@univ-reims.fr. PHP: Langage de script pour le Web. Qu’est-ce que PHP ? Langage de script . Utilisé coté serveur Acronyme récursif : P HP: H ypertext P reprocessor Créé en 1994-1995 par Rasmus Lerdorf
E N D
Programmation Web :PHP Jérôme CUTRONA jerome.cutrona@univ-reims.fr Programmation Web 2012-2013
PHP: Langage de script pour le Web • Qu’est-ce que PHP ? • Langage de script. Utilisé coté serveur • Acronyme récursif : PHP: HypertextPreprocessor • Créé en 1994-1995 par RasmusLerdorf • Extension utilisée sur certains serveurs Web (33%) • Langage multi plate-forme (UNIX / Windows…) • Open Source • Versions actuelles (source nexen.net) : • PHP4 (52% en octobre 2008) • PHP5 (48% en octobre 2008) Programmation Web 2012-2013
Utilité et utilisation de PHP • Création de pages HTML « dynamiques », fabriquées à la volée, construite à la demande • Interface entre un serveur Web et des bases de données • Création d’applications Web Programmation Web 2012-2013
Principales fonctionnalités de PHP • Manipulation de chaînes et tableaux • Calendrier / dates / heures • Fonctions mathématiques • Accès au système de fichiers • Manipulation d’images • HTTP / FTP / IMAP • Bases de données (Oracle, MySQL, …) • XML • … Programmation Web 2012-2013
.html .php .jpg Fonctionnement de PHP Réseau Requête HTTP du client (hello.php) Rendu graphique des données Localisationde la ressource Envoi du résultat au client= réponse HTTP Exécution du code PHP Localisation du code PHP dans le fichier Fermeture de la connexion Connexion sur le serveur (port 80) Client • Navigateur • HTML • JavaScript • CSS GET /hello.php HTTP/1.0 Protocole HTTP Exécution d’un programme sur le serveur <html> <head> <title>Hello</title> </head> <body>Hello world</body> </html> Serveur <?php echo<<<HTML <html> <head> <title>Hello</title> </head> <body>Hello world</body> </html> HTML; Serveur Web hello.php Module PHP MySQL Programmation Web 2012-2013
Fonctionnement de PHP Client Serveur • Connexion TCP sur le serveur (port 80) • Requête HTTP du client (mon_fichier.php) • Localisation de la ressource • Exécution du code PHP • Envoi du résultat de l’exécution au client= réponse HTTP • Fermeture de la connexion • Rendu graphique des données (HTML, image, …) Programmation Web 2012-2013
Programme en PHP Délimitation du code PHP dans le fichier .php : • <?php Code PHP ?> • <script language="PHP"> Code PHP </script> • <? Code PHP ?> • <% Code PHP %> Fermeture optionnelle Confusion avec JavaScript à bannir !! Dépend de la configuration du serveur à bannir !! short_open_tag asp_tags Programmation Web 2012-2013
Eléments de syntaxe PHP • La syntaxe de PHP ressemble à celle de famille "C" (C, C++, Java, …) • Chaque instruction se termine par ";" • Commentaires: /* jusqu’au prochain */ // jusqu’à la fin de la ligne # jusqu’à la fin de la ligne Programmation Web 2012-2013
Les variables et les types de données • Tout identificateur commence par "$" • Les affectations sont réalisées grâce à "=" • Numérique entier: 12 ou réel: 1.54 • Chaîne: "Hello" ou ’Bonjour’ • Booléen: true, false(PHP 4) • Tableau: $tab[2]=12 • Objet (PHP4, PHP5) • Ressource • NULL • Le type d’une variable est dynamique et est déterminé par la valeur qui lui est affectée Programmation Web 2012-2013
Typage faible. Exemple // Pas de déclaration de variable $test=1.5 ; // Réel $test=12 ; // Entier $test=array() ; // Tableau $test= "10" ; // Chaîne echo$test ; // 10 Programmation Web 2012-2013
Typage automatique. Exemple $nombre1=1.5 ; // Réel $nombre2=12 ; // Entier $chaine1= "10" ; // Chaîne $chaine2= 'coucou' ; // Chaîne $total = $nombre1 + $nombre2 + $chaine1 + $chaine2 ; echo$total ; // 23.5 Réel 1.5 12 "10" 'coucou' 13.5 10 23.5 0 23.5 Programmation Web 2012-2013
Les chaînes de caractères Substitution de variables dans les chaînes • Guillemets simples • $a='chaîne' ; • $b='voici une $a'; • Guillemets doubles • $a="chaîne" ; • $b="voici une$a"; • Syntaxe HereDoc • $a="chaîne" ; • $b=<<<MARQUE_DE_FINvoici une $asur deux lignes ;-)MARQUE_DE_FIN; chaîne voici une $a chaîne voici une chaîne chaîne voici une chaîne sur deux lignes ;-) Programmation Web 2012-2013
Concaténation de chaînes • Permet d’assembler plusieurs chaînes • Réalisé grâce à l’opérateur point : . "Bonjour " . "Marcel" vaut"Bonjour Marcel" $nb = 6*2 ; "Acheter " . $nb . " oeufs" vaut"Acheter 12 oeufs" Programmation Web 2012-2013
La commande echo • Permet d’envoyer du texte au navigateur du client (« écrire » la page au format HTML résultant de l’interprétation de PHP) • echo "Bonjour"; • $nom="Marcel" ; echo "Bonjour$nom"; • Plus généralement, permet d’envoyer des octets au navigateur du client • Ficher HTML, XML, CSS, JavaScript, … • Données d'une image • Contenu d'un ficher PDF, Flash, etc. Programmation Web 2012-2013
Hello world ! Interprétation du code PHP sur le serveur et transmission du résultat au client Serveur <html> <head> <title>hello</title> </head> <body> Hello world! </body> </html> Navigateur <?php $debut=<<<HTML <html> <head> <title>hello</title> </head> <body>\n HTML; $corps= "Hello world!\n"; $fin =<<<HTML </body> </html> HTML; /* Envoi au client */ echo$debut.$corps.$fin; Impossible de voir le code PHP depuis le navigateur !! Programmation Web 2012-2013
Les opérateurs arithmétiques Programmation Web 2012-2013
Les opérateurs d’in- et de dé-crémentation pré- et post-fixés Programmation Web 2012-2013
Les opérateurs de comparaison Programmation Web 2012-2013
Les opérateurs logiques Programmation Web 2012-2013
Les opérateurs sur bits Programmation Web 2012-2013
Précédence des opérateurs Programmation Web 2012-2013
Précédence des opérateurs En cas de doute, utilisez les parenthèses ;-) Programmation Web 2012-2013
Structure de contrôle Si…Alors…Sinon… if (condition) { /* Bloc d’instructions exécuté si la condition est vraie */ } [else { /* Bloc d’instructions exécuté si la condition est fausse */ }] Programmation Web 2012-2013
Structure de contrôle Tant que… faire… while (condition) { /* Bloc d’instructions répété tant que la condition est vraie */ } do { /* Bloc d’instructions exécuté une fois puis répété tant que la condition est vraie */ } while (condition) ; Programmation Web 2012-2013
Structure de contrôle Tant que… faire… for(avant; condition; fin_chaque_itération) { /* Bloc d’instructions répété tant que la condition est vraie */ } Équivalent à: avant ; while (condition) { /* Bloc d’instructions répété tant que la condition est vraie */ fin_chaque_itération ; } Programmation Web 2012-2013
Structure de contrôle switch… switch (val) { casev1: instructions exécutées si val==v1 casev2: instructions exécutées si val==v2 ou si val==v1 … default: instructions dans tous les cas } Programmation Web 2012-2013
L’instruction break Permet de sortir d’une structure de contrôle switch (val) { casev1: instructions exécutées si val==v1 break ; /* On sort du switch si val==v1 */ casev2: instructions exécutées si val==v2 ou si val==v1 break ; /* On sort du switch si val==v2 */ … default: instructions exécutées dans tous les cas si val!=v1 et val!=v2 } Programmation Web 2012-2013
Les tableaux • Création / initialisation: $tab1=array(12, "fraise", 2.5) ; $tab2[] = 12 ; $tab2[] = "fraise" ; $tab2[] = 2.5 ; $tab3[0] = 12 ; $tab3[1] = "fraise" ; $tab3[2] = 2.5 ; Programmation Web 2012-2013
Les tableaux « à trous » • Les éléments du tableaux ne sont pas forcement d’indices consécutifs : $tab4[0] = 12 ; $tab4[1] = "fraise" ; $tab4[2] = 2.5 ; $tab4[5] = "el5" ; • Comment parcourir de tels tableaux ? Programmation Web 2012-2013
Les tableaux « à trous » (suite) 4 Parcours classique : for($i=0; $i < sizeof($tab4); $i++) {echo "tab4[$i]: " . $tab4[$i] . "<BR>\n"; } ? Programmation Web 2012-2013
Structure de contrôle Pour chaque… foreach ($tableau as$element) { /* Bloc d’instructions répété pour chaque élément de $tableau */ /* Chaque élément de $tableau est accessible grâce à $element */ } Programmation Web 2012-2013
Parcours de tableau : foreach … $tab4[0] = 12 ; $tab4[1] = "fraise" ; $tab4[2] = 2.5 ; $tab4[5] = "el5" ; foreach($tab4as$v) { echo "Val: $v<br>\n"; } … PHP … Val:12<br>\n Val:fraise<br>\n Val:2.5<br>\n Val:el5<br>\n … HTML Navigateur Programmation Web 2012-2013
Tableaux associatifs • Tableaux dont l’accès aux éléments n’est plus réalisé grâce à un index (0,1,…) mais grâce à une clé de type entier ou chaîne. • Exemples de clés: $tab['un'] = 12 ; $tab[205] = "bonjour" ; $tab["la valeur"] = 3.0 ; • Création $tab = array(cle1 => val1, cle2 => val2, …); Programmation Web 2012-2013
Tableaux associatifs - Exemples $tab5['un']=12 ; $tab5['trois']= "fraise" ; $tab5["deux"]=2.5 ; $tab5[42] = "el5" ; $tab6=array('un' =>12, 'trois' => "fraise", "deux" =>2.5, 42=> "el5") ; Programmation Web 2012-2013
Structure de contrôle Pour chaque… foreach($tableau as$cle=> $element) { /* Bloc d’instructions répété pour chaque élément de $tableau */ /* Chaque élément de $tableau est accessible grâce à $element */ /* La clé d’accès à chaque élément est donnée par $cle */ } Programmation Web 2012-2013
Parcours de tableau <?php $html = <<<HTML <html> <head><title>foreach clé</title> </head> <body> HTML; $tab6 = array('un' => 12, 'deux' => "fraise", "trois" => 2.5, "quatre" => "el5"); foreach($tab6as$cle=>$val) { $html.= "tab[$cle]: $val<br>\n"; } echo$html. "</body>\n</html>" ; Programmation Web 2012-2013
Exemple de génération de code HTML <?php $html = <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <metahttp-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Boucle</title> </head> <body> HTML; for ($i=1; $i<20; $i++) { $html .= "Le serveur compte... " . $i . "<br>\n" ; } $html .= <<<HTML </body> </html> HTML; echo$html ; Programmation Web 2012-2013
Traitement des données de formulaires • PHP permet de traiter les données saisies grâce à un formulaire HTML si le champ ACTION du formulaire désigne une page PHP du serveur. • Après récupération par le serveur Web, les données sont contenues dans l'une des variables superglobales de type tableau associatif $_GET ou $_POST (ou $_REQUEST). • La valeur peut être trouvée grâce à une clé qui porte le même nom que le champs du formulaire de la page HTML de saisie. Programmation Web 2012-2013
Traitement des données de formulaires Réseau Client • Navigateur • HTML • JavaScript • CSS nomPers=robert <html> <head> <title>bonjour</title> </head> <body> Bonjour robert ! </body> </html> Serveur nomPers Serveur Web <?php $html = <<<HTML <html> <head><title>bonjour</title></head> <body> HTML; $html .= "Bonjour ".$_GET['nomPers']." !\n" ; echo$html . "</body>\n</html>" ; Module PHP robert Programmation Web 2012-2013
Exemple – Formulaire HTML <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>formulaire</title> </head> <body> <formaction="valide1.php"method="get"> Nom:<inputtype="text"name="nomPers"> <inputtype="submit"value="Envoyer"> </form> </body> </html> Programmation Web 2012-2013
Exemple – Traitement en PHP <?php $html = <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Validation</title> </head> <body> HTML; if(isset($_GET['nomPers'])) { if(!empty($_GET['nomPers'])) { $html .= "Vous avez saisi '" .$_GET['nomPers']."'\n" ; } else $html .= "Aucune valeur saisie\n"; } else $html .= "Utilisation incorrecte\n" ; echo$html . "</body>\n</html>" ; $_GET['nomPers'] est-il défini ? $_GET['nomPers'] est-il vide ? Programmation Web 2012-2013
Formulaires contenant des champs « SELECT » Programmation Web 2012-2013
Formulaires contenant des champs « SELECT unique» <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Formulaire de saisie des fruits</title> </head> <body> <formaction="valide3.php"method="get"> Choisissez des fruits: <selectname="sel"> <option>Fraise <option>Pomme <option>Poire <option>Banane <option>Cerise </select> <inputtype="submit"value="envoyer"> </form> </body> </html> Envoyer valide3.php?sel=Pomme Programmation Web 2012-2013
Formulaires contenant des champs « SELECT multiple» <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Formulaire de saisie des fruits</title> </head> <body> <formaction="valide3.php"method="get"> Choisissez des fruits: <selectname="sel"multiple> <option>Fraise <option>Pomme <option>Poire <option>Banane <option>Cerise </select> <inputtype="submit"value="envoyer"> </form> </body> </html> Envoyer ??? valide3.php?sel=Pomme&sel=Poire Programmation Web 2012-2013
Formulaires contenant des champs « SELECT multiple» <html> <head> <title>Formulaire de saisie des fruits</title> </head> <body> <formaction="valide3.php"method="get"> Choisissez des fruits: <selectname="sel[]"multiple> <option>Fraise <option>Pomme <option>Poire <option>Banane <option>Cerise </select> <inputtype="submit"value="envoyer"> </form> </body> </html> Envoyer valide3.php?sel%5B%5D=Pomme&sel%5B%5D=Poire valide3.php?sel[]=Pomme&sel[]=Poire Programmation Web 2012-2013
Traitement des données des champs « SELECT » <?php $html = <<<HTML <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Liste de fruits</title> </head> <body> HTML; if(isset($_GET['sel'])&&!empty($_GET['sel'])) {/* La variable $_GET['sel'] est définie et elle n'est pas vide */ foreach($_GET['sel'] as $fruit) $html .="Vous avez choisi $fruit<br>\n" ; } else $html .="Vous n'avez pas choisi de fruit\n" ; echo$html . "</body>\n</html>" ; $_GET[‘sel'] est un tableau Programmation Web 2012-2013
Résultat Programmation Web 2012-2013
Formulaires contenant des champs « CHECKBOX » Programmation Web 2012-2013
Formulaires contenant des champs « CHECKBOX » <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Formulaire de saisie des fruits</title> </head> <body> <formname="formu"action="valide3.php"method="get"> Choisissez des fruits :<br> <inputtype="checkbox"name="sel[]"value="Fraise">Fraise<br> <inputtype="checkbox"name="sel[]"value="Pomme" >Pomme <br> <inputtype="checkbox"name="sel[]"value="Poire" >Poire <br> <inputtype="checkbox"name="sel[]"value="Banane">Banane<br> <inputtype="checkbox"name="sel[]"value="Cerise">Cerise<br> <inputtype="submit"value="Envoyer"> </form> </body> </html> Programmation Web 2012-2013
Résultat Programmation Web 2012-2013