APPTSWD Apprentissage Par Problmes Techniques des Sites Web
APP-TSWD Apprentissage Par Problèmes Techniques des Sites Web Dynamiques Licence Professionnelle FNEPI Cours en Réponse à questions, n° 2 Valérie Bellynck, Benjamin Brichet-Billet, Mazen Mahrous Grenoble INP – Pagora 10 novembre 2014
Questions reçues Groupe : ? Autres groupes ? • ? Profs • Comment lire la doc. de référence de PHP, php. net ? • Qu’est-ce que le code « !== FALSE » trouvé dans l’exemple de fgetcsv() ? • Petites révisions des structures de contrôle de boucle : while, for et foreach… • Quelle est la différence entre != et !== ? • Qu’est vraiment un tableau associatif ? • Différence entre tableau indexé et tableau associatif ?
Le «manuel de référence » de PHP Description de la « déclaration » type des paramètres type de ce qui est « rendu » crochet pour marquet que le « contenu » est facultatif
Le «manuel de référence » de PHP Description des paramètres ce qui est « rendu » NULL si échec
Le «manuel de référence » de PHP Valeur de retour Notes !! NULL si échec FALSE si fin de fichier
Un exemple du manuel Le fichier doit d’abord être ouverture du ficher appel de la fonction traitement d’une ligne fermeture du fichier Si l’affectation « rend » FALSE, on sort de la boucle Après chaque instruction, la tête de lecture est positionné pour la prochaine lecture
L’affectation qui « rend » FALSE ou NULL if ( ($handle = fopen("test. csv", "r") ) !== FALSE) {. . . affectation comparaison Et pourquoi pas != ? while ( ($data = fgetcsv($handle, 1000, ", ") ) !== FALSE) {…
Opérateurs d’affectation Opérateurs d'affectation <? php $a = ($b = 4) + 5; echo "a=$a, b=$b n"; ? > $a est maintenant égal à 9, et $b vaut 4 http: //php. net/manual/fr/language. operators. assignment. php affecte la valeur 8 à la variable $a correspond à l'instruction '$a = $a + 5'; <? php $a = 3; $a += 5; $b = "Bonjour "; $b. = " tout le monde!"; ? > affecte la valeur "Bonjour tout le monde!" à la variable $b : identique à $b = $b. " tout le monde!";
Le type booléen : FALSE, TRUE http: //php. net/manual/en/language. types. boolean. php http: //php. net/manual/fr/language. types. boolean. php
La valeur spéciale NULL http: //php. net/manual/en/language. types. null. php http: //php. net/manual/fr/language. types. null. php
(=, ) ==, !=, ===, !== : opérateurs de comparaison Opérateurs d'affectation : = http: //php. net/manual/fr/language. operators. assignment. php Opérateurs de comparaison : ==, !=, ===, !== http: //php. net/manual/fr/language. operators. comparison. php Exemple $a == $b $a === $b $a != $b $a <> $b $a !== $b $a < $b $a > $b $a <= $b $a >= $b Nom Egal Identique Différent Plus petit que Plus grand Inférieur ou égal Supérieur ou égal Résultat TRUE si $a est égal à $b après le transtypage. TRUE si $a est égal à $b et qu'ils sont de même type. TRUE si $a est différent de $b après le transtypage. TRUE si $a est différent de $b ou bien s'ils ne sont pas du même type. TRUE si $a est strictement plus petit que $b. TRUE si $a est strictement plus grand que $b. TRUE si $a est plus petit ou égal à $b. TRUE si $a est plus grand ou égal à $b.
Comparaison d’égalité avec == ou === Comparaison de types en PHP $a == $b $a === $b $a != $b $a <> $b $a !== $b == Egal Identique Différent TRUE FALSE TRUE 1 FALSE TRUE 1 TRUE 0 FALSE TRUE si $a est égal à $b après le transtypage. TRUE si $a est égal à $b et qu'ils sont de même type. TRUE si $a est différent de $b après le transtypage. TRUE si $a est différent de $b ou bien s'ils ne sont pas du même type. 0 NULL array() "php" FALSE TRUE FALSE TRUE http: //php. net/manual/fr/types. comparisons. php TRUE "" FALSE TRUE FALSE FALSE TRUE === TRUE FALSE TRUE 1 0 NULL array() "php" "" FALSE FALSE FALSE TRUE FALSE FALSE 1 FALSE TRUE 0 FALSE TRUE FALSE FALSE FALSE
L’affectation qui « rend » FALSE ou NULL if (($handle = fopen("test. csv", "r")) !== FALSE) {. . . Le manuel de référence de PHP dit que fopen() « Retourne une ressource représentant le pointeur de fichier, ou FALSE si une erreur survient. » Donc en cas d’erreur, $handle vaut FALSE. Pour comparer « explicitement » à FALSE, on utilise === et !==. Ici, on ne veut traiter que s’il n’y a pas eu d’erreur. while (($data = fgetcsv($handle, 1000, ", ")) !== FALSE) {… Le manuel de référence de PHP dit que fopen() « fgetcsv() retourne NULL si un paramètre handle invalide est fourni ou FALSE en cas d'autres erreurs, y compris la fin du fichier. » Donc en cas d’erreur, $handle vaut FALSE. Pour comparer « explicitement » à FALSE, on utilise === et !==. Ici, on ne veut traiter que s’il n’y a pas eu d’erreur. http: //php. net/manual/fr/function. fopen. php http: //php. net/manual/fr/function. fgetcsv. php
empty(), is_null(), isset(), if($x) Comparaison de types en PHP http: //php. net/manual/fr/types. comparisons. php Après l’affectation de $x, définie par l’expression de la colonne 1, le type de al variable est fourni en résultat de la fonction gettype($x) dans la colonne 2 puis les résultats de empty($x), is_null($x), isset($x) dans les colonnes 3 à 5 , et la dernière colonne donne le résultat du test fi($x). gettype() Expression empty() is_null() isset() boolean : if($x) $x = ""; chaîne de caractères TRUE FALSE $x = null; NULL TRUE FALSE var $x; NULL TRUE FALSE $x est indéfini NULL TRUE FALSE $x = array(); array TRUE FALSE $x = false; boolean TRUE FALSE $x = true; boolean FALSE TRUE $x = 1; entier FALSE TRUE $x = 42; entier FALSE TRUE $x = 0; entier TRUE FALSE $x = -1; entier FALSE TRUE $x = "1"; chaîne de caractères FALSE TRUE $x = "0"; chaîne de caractères TRUE FALSE $x = "-1"; chaîne de caractères FALSE TRUE $x = "php"; chaîne de caractères FALSE TRUE $x = "true"; chaîne de caractères FALSE TRUE $x = "false"; string FALSE TRUE
Boucle while initialisation du compteur condition de sortie de la boucle instruction while récupération de la borne incrément du compteur fin de la boucle corps de la boucle
Tableau en PHP Lire : http: //php. net/manual/fr/language. types. array. php http: //php. net/manual/fr/function. array. php Ce sont des « tableaux associatifs » : ils associent des clés à des valeurs. Référencement par index numérique ou textuel $data[0] $data[1] $data['nom'] $data['prenom'] Faire afficher les valeurs d’un tableau echo "n<p>La première valeur est ". $data[0]; echo "n<p>La deuxième valeur est $data[1]"; echo "n<p>La deuxième valeur est ${data[1]}"; print( "n<p>La valeur du tableau à l’index « nom » est ". $data['nom'] ); echo "n<p>Toutes les valeurs du tableau $data sont "; print_r($data);
Tableau en PHP Lire : http: //php. net/manual/fr/language. types. array. php
Déclaration d’un Tableau en PHP Explictement par le constructeur PHP $entete = array( 'nom', 'prenom', ); Valeur par valeur, indice implicite $entete[] = 'nom'; $entete[] = ’prenom’; Valeur par valeur avec l’indice $entete[0] = 'nom'; $entete[1] = 'prenom'; Implicitement comme résultat d’une fonction $entete = fgetcsv($pointe. Tete. Fic); Valeur par valeur avec un indice textuel $ligne[‘nom’] = ’De Penguern De Trisigondi’; $ligne[‘prenom’] = ’Pierre-Antoine'; $ligne[$entete[0]] = ’De Penguern De Trisigondi’; $ligne[$entete[1]] = ’Pierre-Antoine’;
Parcours d’un Tableau en PHP : for initialisation d’un compteur récupération de la borne contenu de la boucle comparaison du compteur pour sortir incrément du compteur <? php $row = 1; if (($handle = fopen("test. csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ", ")) !== FALSE) { $num = count($data); echo "<p> $num champs à la ligne $row: </p>n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c]. " n"; } } fclose($handle); } ? >
Parcours d’un Tableau en PHP : foreach spécifie le tableau instancie la clé de chaque valeur instancie la valeur associée <? php $row = 1; if (($handle = fopen("test. csv", "r")) !== FALSE) { Plus besoin de while (($data = fgetcsv($handle, 1000, ", ")) !== FALSE) { récupérer //$num = count($data); la borne echo "<p> $num champs à la ligne $row: </p>n"; $row++; foreach ($data as $k => $v) { contenu echo "data[$k] = ". $data[$k]. "= ${data[$k]} = $v n"; de la boucle } } fclose($handle); } ? >
La mémoire occupée par un tableau Des petits essais à faire pour manipuler les tableaux en PHP : http: //tiprof. fr/Sites. Web. Dynamic/Techniques-swd/05_Tableaux/tableau-PHP. html Un tutoriel sur les tableaux PHP et la liste de toute les fonctions PHP sur les tableaux : http: //www. atelierphp. net/lesson_05_arrays/lesson_05. php Explications avec illustration graphique de la place prise en mémoire pour les tableaux PHP : http: //julien-pauli. developpez. com/tutoriels/php/internals/variables/? page=page_4#LIV Explications sur la manière dont PHP s’y prend pour mémoriser un tableau : grosso-modo, • un calcul est appliqué sur les clés pour identifier une liste d’éléments (les clés sont « hashées » ); • deux clés peuvent conduire à une collision; il y a alors plusieurs éléments dans la liste; • chaque élément de la liste contient la clé, la valeur, et les adresses mémoire de ses éléments précédent et suivant. http: //stackoverflow. com/questions/25081344/how-does-php-memory-actually-work
La mémoire occupée par un tableau Exemples interactifs de commandes sur les tableaux avec affichage de la place mémoire occupée http: //tiprof. fr/Essais-phpjs/tableaux/taille. Memoirepour. Tableaux. php? n 1=on&n 2=on&n 8=on
Quelques fonctions très utiles sur les tableaux
Exemples de tableaux : les variables d’environnement $_SERVER $_GET $_POST $_REQUEST foreach($_SERVER as $k => $v){ echo "n <tt>$k</tt> <code>$v</code> » ; }
Liens http: //php. net/manual/fr/function. fgetcsv. php
Structuration du code : Modularité, inclusion et contrôle
Structuration du code header. php footer. php vars. php
Structuration du code index. php
Composition d’une page
Exemple de menu dynamique http: //lmgtfy. com/? q=list+files+php
Aller plus loin… Les variables d’environnement http: //www. tiprof. fr/PHP-my. SQL/ressources/php/PHP-Guide. Plus. html Et beaucoup d’autres… http: //www. tiprof. fr/PHP-my. SQL/ressources/php/PHP-Guide. Plus. html
Retour aux formulaires: GET, POST Osef. php Ex_form. html Exemple en live…
- Slides: 32