Parties

  1. Table des matières
  2. Premiers pas en PHP
    1. hello world php
    2. ou se fait l'execution
    3. fichiers
    4. Imbrication PHP et HTML
    5. ouverture du php avec file://
    6. php très simple
    7. html pur
  3. Le langage PHP
    1. première page PHP valide
    2. première page PHP valide - correction
    3. traduction C -> PHP
    4. traduction C - PHP: print
    5. concatenation
    6. traduction java - PHP: boucle
    7. Première fonction
    8. Correction fonction
    9. traduction C - PHP: programme avec fonction
    10. traduction C - PHP: programme avec fonction - correction
    11. melange PHP et HTML
    12. correction melange php html
  4. table de multiplications
    1. table en html
    2. tableau en PHP
    3. lignes paires et impaires
    4. th
    5. table - détails
    6. table de multiplications - correction
  5. tableaux en PHP
    1. documentation
    2. affichage
    3. clé
    4. valeur
    5. clé
    6. clé implicite
    7. clé implicite - 2
    8. accès aux éléments d'un tableau
    9. accès aux éléments d'un tableau - 2
    10. boucle foreach
    11. correction boucle foreach
    12. boucle avec html plus compliqué

1. Table des matières

1.1 Table des matières

Bienvenue au TP-5.

Dans ce TP nous allons commencer la programmation en PHP.

Il est vivement recommandé de faire ce TP en ayant le cours sous les yeux. Si vous n'avez pas la version papier, vous pouvez ouvrir la version PDF dans une autre fenêtre (ou onglet) de votre navigateur.

2. Premiers pas en PHP

2.1 Premiers pas en PHP

Dans les exercices suivants, nous allons écrire un premier programme en PHP.

xx
x

2.2 hello world php

x

Comme c'est indiqué sur le schéma, le contenu de votre répertoire public_html est accesible au serveur web qui se trouve sur une machine appelé aquanux.

  1. dans un terminal, regardez le contenu de votre répertoire public_html
  2. dans votre navigateur, visitez l'URL http://aquanux/~XXXX ou XXXX est votre login
  3. avec un editeur de texte, dans le répertoire public_html, créez un fichier essai1.html contenant un peu de html.
  4. dans votre navigateur, visitez l'URL http://aquanux/~XXXX . Le fichier essai1.html devrait apparaitre. Visitez-le.
  5. avec un editeur de texte, dans le répertoire public_html, créez un fichier essai2.php contenant le code ci-dessous.
  6. dans votre navigateur, visitez l'URL http://aquanux/~XXXX/essai2.php


<?php
$nom="Ahmed";
echo "Bonjour $nom, <strong>ca marche!</strong>";
?>

2.3 ou se fait l'execution

Pour l'exemple précedent, quelles affirmations sont justes ?

2.4 fichiers

(suite)
Pour l'exemple précédent, quelles affirmations sont justes ?

2.5 Imbrication PHP et HTML

Imbrication PHP et HTML


  1. <h1>essai local</h1>
  2. <p>
  3. <?php $nom="Ahmed";
  4. echo "Bon jour $nom, <strong>ca marche!</strong>"; ?>
  5. </p>
  6. <p>
  7. <?php echo "bonjour!"; ?>
  8. essai
  9. </p>
Parmi les lignes précédentes, lesquelles sont exécutés en tant que code PHP par le serveur?

2.6 ouverture du php avec file://

Dans votre répertoire public_html, créez un fichier appelé essai-local.php avec le code suivant:

<h1>essai local</h1>
<p>
<?php
$nom="Ahmed";
echo "Bon jour $nom, <strong>ca marche!</strong>";
?>
</p>
<p>essai</p>


Ouvrez le fichier dans votre navigateur avec l'URL http://aquanux/~XXXXX/essai-local.php

1. Est-ce que le code PHP a été exécuté?

Maintenant ouvre le fichier PHP avec l'URL file:///home/usager/XXXXX/public_html/essai-local.php

2. Est-ce que le code PHP a été exécuté?

Pour mieux comprendre l'affichage, regardez le code source de la page affichée (menu affichage de votre navigateur, ou bien ctrl-U)

Indice: <?php n'est pas une balise html valide...

2.7 php très simple

Un fichier test.php contient une seule ligne:


<?php echo "bonjour";?>


Quel HTML sera généré?

(si vous avez un doute, créez ce fichier dans public_html et essayez de l'ouvrir avec l'URL http://aquanux.... )

2.8 html pur

Un fichier test.php contient une seule ligne:

echo "bonjour";


Quel HTML sera généré?

(si vous avez un doute, créez ce fichier dans public_html et essayez de l'ouvrir avec l'URL http //aquanux....)

3. Le langage PHP

3.1 Le langage PHP

Dans les exercices suivants nous allons écrire des petits programmes très simples en PHP.

3.2 première page PHP valide

Les programmes PHP que nous avons écrits jusque là ne sont pas valides. Le HTML qu'ils génèrent ne contient pas les entêtes nécessaires.


<?php
$nom="Ahmed";
echo "Bon jour $nom, <strong>ca marche!</strong>";
?>


Reprenez le programme PHP précédent, et ajoutez le nécessaire au début et à la fin pour que le HTML généré soit valide.

Validateur intégré dans Firefox


Comme vous l'avez peut-être remarqué, c'est un peu long de faire un copier coller dans le validateur à chaque changement dans le html.

Nous allons utiliser une extension de firefox qui s'appelle "HTML Validator".

Cliquez sur le lien suivant pour l'installer (vous devrez ensuite redémarrer votre navigateur).
http://htmlvalidator.sourceforge.net/mozilla/tidy_firefox_linux_0861.xpi

Au redémarrage hrml validator vous demande le type de validation souhaitée, choisissez la plus complète ("les deux", à droite).

r

En bas à droite (flèche sur le dessin) vous pouvez avoir soit une icône verte (votre html est valide) soit une icône rouge (votre html n'est pas valide).

En cliquant sur l'icone rouge, une fenêtre apparait avec trois parties (1,2,3). Dans la partie (1) est affiché votre code html. Fans la partie (2) sont affichés les erreurs. En sélectionnant une erreur dans (2) vous verrez le détail dans (3).

Vous devez prendre le réflexe de valider systématiquement le html généré à chaque fois que vous y faites une modification.

Remarque:

Nous avons vu dans les TP précédente que la première ligne d'un fichier xml devrait ressembler à:

<?xml version="1.0" encoding="UTF-8"?>

Selon la configuration de votre PHP il est possible que "<?" et "?>" soient considérées comme des balises spéciales. Dans ce cas vous devez utiliser l'astuce suivante à la place de la première ligne:

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; ?>

C'est un peu compliqué.
En pratique, cette ligne n'est pas obligatoire pour obtenir du xhtml valide.
Vous pouvez donc ne pas l'utiliser du tout.

3.3 première page PHP valide - correction

Correction:


<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Un essai</title>
</head>
<body>
<p>
<?php

$nom="Ahmed";
echo "Bonjour $nom, <strong>ca marche!</strong>";
?>
</p>

</body>
</html>

3.4 traduction C -> PHP

Traduisez l'expression suivante du C vers le PHP:

c=a+b;

3.5 traduction C - PHP: print


Traduisez l'expression suivante du C vers le PHP:

printf("bonjour");


3.6 concatenation

Traduisez l'expression suivante du Java vers le PHP

System.out.println("bonjour "+"Durand");

On utilisera une chaîne de caractères avec des guillemets simples (') et la concaténation.

3.7 traduction java - PHP: boucle

Traduisez l'expression suivante du Java vers le PHP

for(i=0;i<10;i++){System.out.println("ligne "+i);}

On utilisera une chaîne de caractères avec des guillemets simples (') et la concaténation.

3.8 Première fonction

Fonctions en PHP

Ecrivez le programme du transparent ci-dessous (vue en cours) et essayez-le. (pensez à ajouter <?php ... ?>)

S'il fonctionne, vous devriez voir s'afficher "je suis Dupond".

Ensuite, ajoutez plusieurs appels successifs à "ma_fonction", comme ceci:
ma_fonction("Lim");
ma_fonction("Durand");
ma_fonction("Ahmed");

Vérifiez que le programme fonctionne et affiche:
je suis Dupond
je suis Lim
je suis Durand
je suis Ahmed

Attention : pour que l'affichage passe à la la ligne à chaque appel de la fonction il faut afficher la balise html "fin de ligne".

x

3.9 Correction fonction

Correction de l'exercice précédent

<?php
ma_fonction("Dupond");

ma_fonction("Lim");
ma_fonction("Durand");
ma_fonction("Ahmed");

function ma_fonction($nom)
{
echo "je suis $nom <br/>";
}
?>

3.10 traduction C - PHP: programme avec fonction

Traduction d'un programme C simple

1. copiez le programme ci-dessous dans un fichier liste.c, compilez-le et exécutez-le pour voir le résultat.
2. Dans votre répertoire public_html, créez un fichier liste.php et traduisez en PHP le programme C précédent (ça devrait ressembler un peu au programme "ma_fonction" de l'exercice précédent).

3. A partir de votre navigateur, vérifiez qu'il s'exécute bien. Comme toujours en PHP, pensez à regarder le html generé (ctrl-U ou menu: afficher -> source dans firefox)

4. Pour l'instant nous n'affichons pas les êntetes html, le html generé n'est donc pas valide. Ajoutez le nécessaire pour que le HTML généré soit valide.
Validez le HTML généré en utilisant le web developer toolbar->validate local html
(vous pouvez faire apparaître le toolbar en cliquant avec le menu droit sur la bar des menus, tout en haut de la fenêtre de votre navigateur)


#include <stdio.h>
void afficher(int n);

int main()
{
int i;
printf("<ul>\n");
for(i=0;i<10;i++)
{
afficher(i);
}
printf("</ul>\n");
}


void afficher(int n)
{
int resultat=n*n;
printf("<li>pour %d le resultat est %d </li>\n", n, resultat);
}



3.11 traduction C - PHP: programme avec fonction - correction

Correction:

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Un essai</title>
</head>
<body>
<ul>
<?php
for($i=0;$i<10;$i++)
{
afficher($i);
}
function afficher($n)
{
$resultat=$n*$n;
echo "<li>pour $n le resultat est $resultat</li>\n";
}
?>
</ul>
</body>
</html>


3.12 melange PHP et HTML

PHP et HTML


Comme vous pouvez le constater, le mélange de gros morceaux de PHP et de HTML dans un même fichier peut rendre le code difficile à lire. Plusieurs techniques peuvent être employées pour améliorer la lisibilité.

Pour l'instant essayons d'utiliser la directive "require" pour séparer les entêtes et la fin de page.

Vous trouverez plus d'info sur cette commande ici :
http://www.php.net/manual/fr/function.require.php

Décomposez votre fichier PHP de l'exercice précèdent en 3 parties:
  1. entetes.php : les entêtes jusqu'à la balise "<body>" (comprise)
  2. essai.php : le HTML après "<body>", le code PHP, et le HTML avant "</body>"
  3. fin-page.php : "</body>" et tout ce qui suit
Dans le fichier essai.php, utilisez require aux bons endroits, pour inclure les parties 1 et 3

Vérifiez que le HTML généré est OK en regardant le source (ctrl-U), puis validez le HTML généré.

3.13 correction melange php html

Correction:

entetes.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Un essai</title>
</head>
<body>


essai.php

<?php
require "entetes.php";
echo "<ul>";
for($i=0;$i<10;$i++)
{
afficher($i);
}
function afficher($n)
{
$resultat=$n*$n;
echo "<li>pour $n le resultat est $resultat</li>\n";
}
echo "</ul>";
require "fin-page.php";
?>


fin-page.php

</body>
</html>

4. table de multiplications

4.1 table de multiplications

Dans les exercices suivants nous allons écrire un programme PHP permettant d'afficher une table de multiplications.
1. Nous commencerons par écrire un exemple en html simple
2. Ensuite nous l'écrirons en PHP

4.2 table en html

Table en HTML


Avant d'écrire le programme en PHP, nous allons commencer par écrire une page HTML simple, pour être sur de bien se souvenir de la syntaxe des tables HTML.

Ecrivez une page HTML affichant le tableau suivant:

1
2
3
4
2
4
6
8
3
6
9
12
4
8
12
16


Vous pouvez utiliser la specification du html http://www.la-grange.net/w3c/html4.01/cover.html
Pensez à traduire en xhtml 1.0

Vérifiez que votre HTML est bien valide (xhtml 1.0 strict).

Mise en page:

Pour ameliorer l'affichage, vous pouvez utiliser les élément de style suivants:

4.3 tableau en PHP

Table en PHP

En vous inspirant de l'exercice précèdent, écrivez un programme en PHP qui génère une table de multiplications des nombres allant de 1 à n. Ou n est une variable que vous définirez au début de votre programme (essayez avec les valeurs 10 et 20)

Pensez à valider le HTML généré.

Conseils

1. Commencez par afficher une seule ligne du tableau (par exemple la 6ème). Ensuite affichez une autre ligne (par exemple la 3ème). Ensuite réfléchissez à comment on peut afficher toutes les lignes.

2. Lorsque vous développez votre code PHP, il est très utile de regarder souvent le code HTML généré. Pour ca, vous pouvez utiliser le raccourci ctrl-U dans votre navigateur.

3. Pour que le code HTML généré soit lisible, pensez à ajouter des fins de ligne "\n" dans les appels à "echo" de votre PHP.

Par exemple:
echo "bonjour\n";

ou bien

echo 'aurevoir'."\n";


4.4 lignes paires et impaires

Couleurs alternées


On souhaiterai afficher les lignes de la table précédente dans des couleurs différentes, pour ameliorer la lisibilité.

En modifiant votre code PHP, faites en sorte que chaque ligne (tr) ait un attribut "class" dont la valeur sera
Ensuite, ajoutez une feuille de style dans laquelle vous spécifierez une couleur de fond différente pour les lignes pair et impaires.


Conseil: vous pouvez utiliser l'opérateur modulo comme en C/Java, par exemple: ($i%2)

Conseil: comme toujours, pensez à regarder systématiquement le html généré (ctrl-U dans firefox)

4.5 th

Éléments th


La première ligne et la première colonne d'une table portent souvent une information particulière: ce sont des "entêtes". Pour cette raison, on utilise plutôt des cellules <th> au lieu de <td>

Modifiez votre programme PHP pour afficher des cellules th à la place des td, uniquement pour la première ligne et la première colonne.

Adaptez ensuite la feuille de style pour que l'affichage des th soit agréable.


4.6 table - détails

Quelques détails


Dans la table précédente, faites en sorte que les éléments de la diagonale soient mis en valeur (<strong>).

Faites en sorte que la case en haut à gauche soit vide.

Vous devriez obtenir quelque chose qui ressemble à ca:
x


Vous n'avez pas fini tant que votre HTML ne valide pas! sourire

4.7 table de multiplications - correction

Voici une proposition de correction:

pour simplifier, les entêtes HTML ne sont pas montrées
(l'indentation est supprimé par moodle, desolé triste )

<table>
<?php
$n=4;
for($ligne=1;$ligne<$n;$ligne++)
{
if($ligne%2){$class='impair';}else{$class='pair';}
echo "<tr class=\"$class\">";
for($col=1;$col<=$n;$col++)
{
if($ligne==1 || $col==1){$cellule='th';}else{$cellule='td';}
echo "<$cellule>";
if($ligne==$col){echo '<strong>';}
if($ligne!=1 || $col!=1){echo $ligne*$col;}
if($ligne==$col){echo '</strong>';}
echo "</$cellule>";
}
echo "</tr>\n";
}
?>
</table>



5. tableaux en PHP

5.1 tableaux en PHP

Dans les exercices suivants nous allons apprendre à utiliser les tableaux en PHP.

Les tableaux associatifs du PHP sont très faciles à utiliser. Ce sont un des atouts importants du PHP.


xx
x

5.2 documentation

Prenez le temps de lire la page suivante:

http://www.php.net/manual/fr/language.types.array.php

C'est très important que vous vous habituez à utiliser cette documentation du PHP.
C'est la documentation officielle, en français, et elle est à la fois complète et accessible.

5.3 affichage

Pour afficher le contenu d'un tableau, il existe une fonction bien pratique appelé print_r().
Cette fonction affiche des espaces et des fins de ligne qui ne seront pas pris en compte en html.
Pour que ces espaces soient affichées nous pouvons utiliser l'élément pre (texte preformaté)

Essayez le code suivant :

$essai=array('toto','titi','zozo');
echo '<pre>';
print_r($essai);
echo '</pre>';

A gauche, vous avez les clés (index), à droite vous avez les valeurs. Comme nous n'avons pas spécifié de clé pour les éléments de notre tableau, le PHP choisit automatiquement les valeurs entières : 0, 1 et 2.

Ce tableau est un tableau simple, indexé par des entiers.

maintenant essayez:

$essai=array('Durand' => 'Rouge','Ahmed' => 'bleu','Li'=>'vert');
echo '<pre>';
print_r($essai);
echo '</pre>';

5.4 clé

On peut créer un tableau vide avec "array()" :
$tableau=array();

On peut ensuite ajouter des éléments avec l'opérateur [ ] :
$tableau[ 'age' ] = 35 ;

Dans cet exemple quelle est la clé ?

5.5 valeur

la fonction print_r d'un tableau affiche

Array
(
[xxx] => Durand
[yyy] => Li
[zzz] => Ahmed
)

Quelle est la 2ème valeur contenue dans ce tableau?

5.6 clé

la fonction print_r d'un tableau affiche

Array
(
[0] => Durand
[abc] => Li
[Li] => Ahmed
)

Quelle est la clé associée à la valeur 'Li' ?

5.7 clé implicite

clé implicite

Si on ne donne pas de clé, le PHP choisit le premier nombre entier disponible, en commençant par zero.

Dans cet exemple:

$essai=array('rouge','vert','bleu','jaune','noir');

Quelle est la clé associée à la valeur 'jaune' ?

5.8 clé implicite - 2


Tapez le code suivant:

$essai=array( 'a','b', 'c'=>10, 'd');
echo "<pre>";
print_r($essai);
echo "</pre>";
puis lancez à partir de votre navigateur.

Quelle est la clé donné par le PHP à la valeur 'd' ?

5.9 accès aux éléments d'un tableau

Pour accéder aux valeurs d'un tableau on utilise tout simplement l'operateur crochets [ ]

$monTableau[cle]

x

Par exemple, pour afficher "Paris" à partir de ce tableau:

$dupond=array('prenom'=>'Jean', 'nom'=>'Dupond', 'date_naissance'=>'1964','lieu'=>'Paris');

on peut écrire
echo XXXXX;

Donnez XXXXX

5.10 accès aux éléments d'un tableau - 2

pour afficher "bleu"

$essai=array('rouge','vert','bleu','jaune','noir');

on peut écrire
echo XXXXX;

Donnez XXXXX

5.11 boucle foreach

Boucle foreach

Nous avons vu en cours deux types de boucles.
  1. Les boucles classiques (comme celle que vous connaissez en C et en Java).
  2. Les boucles "foreach" pour parcourir le contenu d'un tableau

x

Ecrivez un programme qui parcourt le tableau suivant:
$essai=array('rouge','vert','bleu','jaune','noir');
A chaque élément vous afficherez la clé et la valeur.


Vous trouverez la documentation de foreach ici:
http://www.php.net/manual/fr/control-structures.foreach.php

5.12 correction boucle foreach

correction

<?php
$essai=array('rouge','vert','bleu','jaune','noir');
foreach($essai as $cle => $valeur)
{
echo "cle: $cle valeur: $valeur <br/>\n";
}
?>

5.13 boucle avec html plus compliqué


En utilisant la boucle 'foreach' écrivez un programme PHP qui affiche le contenu de ce tableau
$dupond=array('prenom'=>'Jean', 'nom'=>'Dupond', 'date_naissance'=>'1964','lieu'=>'Paris');
sous la forme d'un liste qui ressemble à celle-ci:

(remarquez qu'il s'agit d'une liste à puces)