Вы находитесь на странице: 1из 78

EXERCICES PHP

EXERCICE 1 : Afficher dans une page la phrase « Ceci est une ligne créée uniquement en
PHP ».
Afficher à la ligne suivante : « Ceci est la 2ème phrase créée avec PHP».
Créer un lien sur le site de l’ENITA (www.enitab.fr).

Objectifs : inclure des balises php dans une page HTML. Mixer le code php et HTML.
Utilisation de balises.

Fichier ex1.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>EX1 : première page en PHP</title>
</head>
<body>
<? echo "Ceci est une ligne créée uniquement en PHP"; ?>
<BR>
<?echo "Ceci est la 2ème phrase créée avec PHP <BR>"; ?>
<A href= "http://www.enitab.fr"> Accès au site de l'ENITAB </A>
</body>
</html>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 1


EXERCICE 2 : Déclarer 2 variables : nom et prénom. Les initialiser avec les valeurs
« Dupont » et « Louis » et les afficher sur la page en utilisant 3 modes syntaxiques différents :
- 2 commandes echo
- 1 commande echo avec 1 seule chaîne de caractère
- 1 commande echo avec le point de concaténation

Objectifs : Déclaration et initialisation de variables. Utilisation du point de concaténation.

Fichier ex2.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX2 : utilisation de variables</TITLE>
</HEAD>
<BODY>
<?
//Initialisation des variables
$s_nom= "Dupont" ;
$s_prenom = "Louis";

Echo $s_nom;
Echo " ";
Echo $s_prenom;
echo "<BR>";
Echo "$s_nom $s_prenom";
echo "<BR>";
Echo $s_nom . " " . $s_prenom;
echo "<BR>";
?>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 2


EXERCICE 3 : Créer une balise de titre H1 : « Calcul sur les variables ».
Affecter respectivement les valeurs 0.206, 150 et 10 aux variables TVA, prix et Nombre.
Calculer le prix HT et le prix TTC pour les 10 articles et les afficher.
On affichera également le type de chaque variable.

Objectifs : Calcul sur des variables. Gestion des types de données.

Fichier ex3.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX3 : Calcul sur des variables</TITLE>
</HEAD>
<H1> Calcul sur les variables </H1>
<BODY>

<?
// Initialisation des variables

$d_prix = 150;
$d_tva = 0.206;
$n_nombre= 10;

$d_tot_ht = $d_prix * $n_nombre;


$d_tot_ttc = $d_tot_ht * (1+$d_tva);

Echo "le montant HT est égal à $d_tot_ht et est de type " . gettype($d_tot_ht);
Echo "<BR>";
Echo "le montant TTC est égal à $d_tot_ttc et est de type " . gettype($d_tot_ttc);
Echo "<BR>";
Echo "la variable $d_prix est de type " . gettype($d_prix);

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 3


Echo "<BR>";
Echo "la variable $d_tva est de type " . gettype($d_tva);
Echo "<BR>";
Echo "la variable $n_nombre est de type " . gettype($n_nombre);
?>

</BODY>
</HTML>

EXERCICE 4 : Affecter respectivement les valeurs 150, 50 et 10 aux variables prix_table,


prix_armoire et Nombre.
Calculer le prix HT total pour les 10 armoires.
Comparer le prix de l’armoire et de la table et afficher quel est le prix le plus élevé.

Objectifs : Utilisation de l’instruction IF.

Fichier ex4.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX4 : utilisation de l'instruction IF</TITLE>
</HEAD>
<H1> Utilisation de l'instructeur IF</H1>
<BODY>

<?
// Initialisation des variables
$d_prix_armoire = 50.00;
$d_prix_table = 150.00;
$n_nombre= 10;
$d_seuil = 2000.00;

$d_tot_ht_armoire = $d_prix_armoire * $n_nombre;


// test sur le prix total des armoires
If ($d_tot_ht_armoire > $d_seuil)

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 4


{
echo "Le prix total pour les $n_nombre armoires est de $d_tot_ht_armoire <BR>";
}

//comparaison entre le prix de l'armoire et de la table


If ($d_prix_armoire > $d_prix_table)
{
echo "le prix de l'armoire ($d_prix_armoire) est supérieur au prix de la table
($d_prix_table)";
}
else
{
if ($d_prix_armoire == $d_prix_table)
{
echo "le prix de l'armoire ($d_prix_armoire) est égal au prix de la table
($d_prix_table)";
}
else
{
echo "le prix de l'armoire ($d_prix_armoire) est inférieur au prix de la table
($d_prix_table)";
}
}
?>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 5


EXERCICE 5 : Affecter une valeur à la variable nbre et afficher la somme des entiers de 1 à
nbre.
Nb : on réalisera cet exercice avec l’instruction FOR puis avec l’instruction WHILE.

Objectifs : Utilisation des instructions WHILE et FOR.

UTILISATION DE FOR
Fichier ex5-a.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX5-a : utilisation de l'instruction FOR</TITLE>
</HEAD>
<H1> Utilisation de l'instructeur FOR</H1>
<BODY>

<?// Initialisation des variables


$n_nbre = 5;
$n_somme = 0;

for ($i=1; $i<=$n_nbre; $i++)


{
$n_somme = $n_somme + $i;
}

echo "La somme des entiers de 1 à $n_nbre est égale à : $n_somme";

?>
</BODY>
</HTML>

UTILISATION DE WHILE
Fichier ex5-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 6


<TITLE>EX5-b : utilisation de l'instruction WHILE</TITLE>
</HEAD>
<H1> Utilisation de l'instructeur WHILE</H1>
<BODY>

<? // Initialisation des variables


$n_nbre = 5;
$n_somme = 0;
$i=1;

While($i<=$n_nbre)
{
$n_somme = $n_somme + $i;
$i++;
}

echo "La somme des entiers de 1 à $n_nbre est égale à : $n_somme";

?>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 7


EXERCICE 6 : Initialiser un tableau de 4 cases (contenant des nombres) et en faire la
somme.
a) sans faire de fonction
b) en créant une fonction somme
c) en créant un fichier spécifique qui contient la fonction somme.

Exemples de valeurs pour obtenir les résultats ci-dessous : 3, 2, 10, 5.

Objectifs :
a) Utilisation des tableaux.
b) Utilisation de fonctions
c) Utilisation de fichiers : require()

Fichier ex6-a.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX 6a : Utilisation de tableaux</TITLE>
</HEAD>
<H1> Utilisation de tableaux</H1>
<BODY>

<?// Initialisation des variables


$tablo[0]=3;
$tablo[1]=2;
$tablo[2]=10;
$tablo[3]=5;

$n_somme = 0;
$i=0;

$n_nbre = count($tablo);

//parcourt les cases du tableau et effectue la somme


While($i<$n_nbre)
{

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 8


$n_somme = $n_somme + $tablo[$i];
$i++;
}

// affichage de la somme
echo "La somme des nombres du tableau est égale à : $n_somme";
echo "<BR>";
?>
</BODY>
</HTML>

Fichier ex6-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX 6b : utilisation de fonction</TITLE>
<?

function somme ($t)


{
$n = count($t); // compte le nombre de cases du tableau
$d_som=0;
$i=0;
While ($i < $n) //calcul de la place
{
$d_som=$d_som+$t[$i];
$i=$i+1;
}
return number_format($d_som,2);
}
?>

</HEAD>
<H1> Utilisation de tableaux et de fonctions</H1>
<BODY>

<?
// Initialisation des variables
$tablo[0]=3;
$tablo[1]=2;
$tablo[2]=10;
$tablo[3]=5;

$d_somme = somme ($tablo);

// affichage de la somme
echo "La somme des nombres du tableau est égale à : $d_somme";
echo "<BR>";
?>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 9


Fichier ex6-c.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX6-c : Utilisation de fonction dans un fichier extérieur à l'application</TITLE>
<? //on inclut le fichier qui contient la fonction
require ("fonctions.php");
?>

</HEAD>
<H1> Utilisation de tableaux et de fonctions</H1>
<BODY>
<? // Initialisation des variables
$tablo[0]=3;
$tablo[1]=2;
$tablo[2]=10;
$tablo[3]=5;

$d_somme = somme ($tablo);

// affichage de la somme
echo "La somme des nombres du tableau est égale à : $d_somme";
echo "<BR>";
?>
</BODY>
</HTML>

Fichier fonctions.php
<?
function somme ($t)
{
$n = count($t); // compte le nombre de cases du tableau
$d_som=0;
$i=0;
While ($i < $n) //calcul de la place
{
$d_som=$d_som+$t[$i];
$i=$i+1;
}
return number_format($d_som,2);
}
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 10


EXERCICE 7 : Initialiser un tableau de 4 cases (contenant des nombres en francs) et en faire
la conversion en euros en utilisant une procédure. On affichera la somme totale des cases du
tableau en euros ainsi que chaque case du tableau.
Exemples de nombres pour obtenir les résultats ci-dessous : 3 F, 2 F, 10 F, 5 F.

Objectifs : Utilisation de procédures.

Fichier ex7.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX7 : utiliastion de procédures</TITLE>
<? //on inclut le fichier qui contient la fonction
require ("fonctions.php");
require ("procedures.php");
?>

</HEAD>
<H1> Utilisation de tableaux et de fonctions</H1>
<BODY>

<? // Initialisation des variables


$tablo[0]=3;
$tablo[1]=2;
$tablo[2]=10;
$tablo[3]=5;

// ne pas oublier de mettre le caractère & dans la déclaration de la procédure


//pour transmettre le tableau et non les valeurs du tableau.
conversion ($tablo);
$n_somme = somme ($tablo);

// affichage de la somme
echo "La somme des nombres du tableau est égale à : $n_somme";

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 11


echo "<BR>";
affichage ($tablo);

?>
</BODY>
</HTML>

Fichier procedures.php
< ? // CONVERTIT UN TABLEAU DES FRANCS EN EUROS
function conversion (&$t)
{
$d_euro = 6.556597;
$i_nbre = count ($t);
$i=0;
While ($i < $i_nbre)
{
$t[$i]=$t[$i]/$d_euro;
$i=$i+1;
}
}

// AFFICHE TOUTES LES CASES D'UN TABLEAU EN FORMAT NUMERIQUE


function affichage ($t)
{
reset ($t); // se place sur la 1ère ligne du tableau
// parcours toutes les cases du tableau et affecte
//les valeurs des cases et des indices aux 2 variables ind et val
While ((List ($ind , $val) = each($t))== true)
{
echo "la valeur de la case d'indice $ind est égale à " . number_format($val,2) .
"<BR>";
}
} ?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 12


EXERCICE 8 : Construire une page qui permette de saisir un nom et un mot de passe.
Renvoyer l’utilisateur sur une autre page et lui afficher si son mot de passe est correct ou non
(NB : le mot de passe valide sera « mot »).
Sur cette 2ème page : prévoir un bouton retour.

Objectifs : Utilisation de formulaires et de contrôles. Bouton submit. Retour page précédente.

Fichier ex8_p1.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX8_p1 : Formulaires et contrôles</TITLE>
</HEAD>
<BODY>

<FORM METHOD = POST ACTION ="ex8_p2.php">


<P>Saisir votre nom : <INPUT id=zt_nom name=zt_nom></P>
<P>Saisir votre mot de passe : <INPUT id=zt_password type=password
name=zt_password></P>
<P><INPUT id=bt_submit type=submit value=Soumettre name=bt_submit></P>
</FORM>

</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 13


Fichier ex8_p2.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX8_p2 : Formulaires et contrôles</TITLE>
</HEAD>
<BODY>

<? // Récupération de la variable


$zt_password=$_POST["zt_password"] ;
$zt_mot=$_POST["zt_mot"] ;

// test du mot de passe


If ($zt_password == "mot")
{ echo "Bienvenue M. $zt_nom : votre mot de passe est correct";
}
else
{
echo "Désolé M. $zt_nom votre mot de passe est incorrect";
}
?>

<INPUT Type=button value = "retour" onclick = "self.history.back();">


</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 14


EXERCICE 9 : Construire une page qui permette d’afficher :
- une liste avec les noms des vendeurs suivants : M. Dupont, M. Louis, M. Martin et M.
Durand (on utilisera une liste non modifiable).
- une liste qui affiche la liste des produits disponibles (la liste des produits est paramétrée
dans le fichier produits.php)
Ajouter une zone de texte pour saisir le nombre de produits à commander et renvoyer sur une
autre page le récapitulatif de la demande (ex : vous avez commandé 10 armoires auprès de M.
Martin).

Objectifs : Utilisation de formulaires et de contrôles. Liste de choix et liste de valeurs..

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 15


Fichier ex9-a.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX9-a : Utilisation de listbox</TITLE>
<?
//inclut le fichier qui contient la liste des produits
require "produits.php";
?>

</HEAD>
<BODY>
<FORM action = "ex9-b.php" METHOD = POST>
<P>Liste des vendeurs :</P>
<SELECT NAME ="lst_vendeurs" size=4>
<OPTION VALUE ="Martin" > Martin </OPTION>
<OPTION VALUE ="Dupont" > Dupont </OPTION>
<OPTION VALUE ="Durand" > Durand </OPTION>
<OPTION VALUE ="Louis" > Louis </OPTION>
</SELECT>
<BR>

<P>Liste des Produits :</P>


<P>
<SELECT NAME ="lst_produits" >
<? $i; $n; $s_val;
sort ($t);

$n = count($t);
//pour chaque case du tableau, crée une option dans la liste
for ($i=0; $i<$n; $i++)
{ $s_val = $t[$i]; ?>
<OPTION VALUE ="<? echo $s_val ?>" > <? echo $s_val ?> </OPTION>
<?
}
?>

</SELECT>

<P>Nombre de produits à commander :


<INPUT id=zt_nbre name=zt_nbre style="WIDTH: 50px; HEIGHT: 22px" size=7></P>
<P>

<INPUT TYPE = "submit" name = bt_submit value="soumettre" > </P>

</FORM>

</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 16


Fichier produits.php
<? //liste des produits
$t[0]="Armoire";
$t[1]="Bureau";
$t[2]="Chaise";
$t[3]="Table";
$t[4]="Buffet";
$t[5]="Fauteuil";
?>

Fichier ex9-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX9-b : Utilisation de combobox</TITLE>
</HEAD>
<BODY>

<? // initialisation des variables


$lst_produits="";
$zt_nbre="";
$lst_vendeurs="";

// Récupération des variables


// NB : si rien n’a été sélectionné dans la liste, la variable lst_vendeur n’est aps passée en 2ème
page

if (isset($_POST["lst_produits"]))
{
$lst_produits =$_POST["lst_produits"] ;
}
if (isset($_POST["zt_nbre"]))
{
$zt_nbre =$_POST["zt_nbre"] ;
}
if (isset($_POST["lst_vendeurs"]))
{
$lst_vendeurs =$_POST["lst_vendeurs"] ;
}
echo "vous avez commandé $zt_nbre $lst_produits auprès du vendeur $lst_vendeurs";
?>

<BR>
<INPUT TYPE = button Value = "Retour" onclick = "self.history.back()">
</BODY>

</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 17


EXERCICE 10 : Reprendre l’exercice 9 et indiquer si la saisie n’est pas complète sur la 2ème
page.
Créer une procédure qui remplit la liste à partir d’un tableau.

Objectifs : Tests de cohérence sur le serveur. Procédures.

Fichier procedure.php
<?// CREE UNE BOITE DE MESSAGE QUI RENVOIE LE TEXTE MIS EN
PARAMETRE
function msg($txt)
{
?>
<SCRIPT LANGUAGE = 'Javascript'>
alert ("<?echo $txt;?>")
</script>
<?
} ?>

Fichier ex10-a.php
<HTML>
<HEAD>
<?
// inclut le fichier qui contient la liste des produits
require "produits.php";
// inclut le fichier qui permet de remplir une liste à partir d'un tableau
require "procedures.php";
?>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX10-a : tests de cohérence, procédures</TITLE>
</HEAD>
<BODY>
<FORM action = "ex10-b.php" METHOD = POST>
<P>Liste des vendeurs :</P>
<SELECT NAME ="lst_vendeurs" size=4>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 18


<OPTION VALUE ="Martin" > Martin </OPTION>
<OPTION VALUE ="Dupont" > Dupont </OPTION>
<OPTION VALUE ="Durand" > Durand </OPTION>
<OPTION VALUE ="Louis" > Louis </OPTION>
</SELECT>
<BR>
<P>Liste des Produits :</P>
<P>
<? //tri le tableau
sort ($t);
//appel de la procédure qui remplit une liste à partir d’un tableau
REMPLIR ($t, "lst_produits");
?>

<P>Nombre de produits à commander :


<INPUT id=zt_nbre name=zt_nbre style="WIDTH: 50px; HEIGHT: 22px" size=7></P>
<P>
<INPUT TYPE = "submit" name = bt_submit value="soumettre" > </P>
</FORM>
</BODY>
</HTML>

Fichier ex10-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX10-b : Utilisation de combobox</TITLE>
<? //inclut le fichier qui contient la fonction message
require "procedures.php";?>
</HEAD>
<BODY>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 19


<? // initialisation des variables
$lst_produits="";
$zt_nbre="";
$lst_vendeurs="";

// Récupération des variables


// NB : si rien n’a été sélectionné dans la liste, la variable lst_vendeur n’est aps passée en 2ème
page

if (isset($_POST["lst_produits"]))
{
$lst_produits =$_POST["lst_produits"] ;
}
if (isset($_POST["zt_nbre"]))
{
$zt_nbre =$_POST["zt_nbre"] ;
}
if (isset($_POST["lst_vendeurs"]))
{
$lst_vendeurs =$_POST["lst_vendeurs"] ;
}

//teste si tous les champs ont été saisis


//affiche une boite de message ainsi que les champs qui n'ont pas été saisis
if ( ($zt_nbre == "") or ($lst_vendeurs == "") or ($lst_produits == ""))
{
msg ("saisir toutes les données");
echo "Les champs suivants n'ont pas été saisis : <BR>";

if ($zt_nbre == "")
{
echo "nombre de produits <BR>";
}

if ($lst_vendeurs == "")
{
echo "nom du vendeur <BR>";
}

if ($lst_produits == "")
{
echo "nom du produit <BR>";
}
}
else
{

echo "vous avez commandé $zt_nbre $lst_produits auprès du vendeur $lst_vendeurs";


}
?>

<BR>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 20


<INPUT TYPE = button Value = "Retour" onclick = "self.history.back()">
</BODY>
</HTML>

Fichier procedures.php
<?
//PROCEDURE QUI REMPLIT UNE LISTE A PARTIR D'UN TABLEAU
Function REMPLIR ($t, $nom_liste)
{
$n = count($t); ?>

<SELECT NAME ="<? echo $nom_liste ?>">


<?
//pour chaque case du tableau, crée une option dans la liste
for ($i=0; $i<$n; $i++)
{ $val = $t[$i]; ?>
<OPTION VALUE ="<? echo $val ?>" > <? echo $val ?> </OPTION>
<?
}?>
</SELECT>
<?
}
?>

//CREE UNE BOITE DE MESSAGE QUI RENVOIE LE TEXTE MIS EN PARAMETRE


function msg($txt)
{
?>
<SCRIPT LANGUAGE = 'Javascript'>
alert ("<?echo $txt;?>")
</script>
<?
} ?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 21


EXERCICE 10-bis : Reprendre l’exercice 9 mais effectuer le test de saisie sur le navigateur
client.

Objectifs : Tests de cohérence sur le client (Javascript).

Fichier ex10bis-a.php
<HTML>
<HEAD>
<SCRIPT language = "Javascript">
// cette procédure active la soumission du formulaire si la saisie est correcte
// dans le cas contraire, elle affiche un message
// Cette procédure est appelée quand on clicque sur le bouton soumettre
// qui est un bouton normal et non de type submit
function valid_form()
{
var ok =1;
var msg ="";
if (document.saisie.zt_nbre.value =="")
{
ok = 0;
msg = "Saisir le nbre de produits ";
}
if (document.saisie.lst_vendeurs.value =="")
{
ok = 0;
msg = msg + "Saisir le nom du vendeur ";
}
if (document.saisie.lst_produits.value =="")
{
ok = 0;

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 22


msg = msg + "Saisir le nom du produit ";
}

if (ok == 1)
{
saisie.submit();
}
else
{
alert (msg);
}
}

</script>
<?
// inclut le fichier qui contient la liste des produits
require "produits.php";
// inclut le fichier qui contient la fonction message
require "procedures.php";
?>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX10-a : tests de cohérence, procédures</TITLE>
</HEAD>
<BODY>
<FORM name = "saisie" action = "ex10bis-b.php" METHOD = POST>
<P>Liste des vendeurs :</P>
<SELECT NAME ="lst_vendeurs" size=4>
<OPTION VALUE ="Martin" > Martin </OPTION>
<OPTION VALUE ="Dupont" > Dupont </OPTION>
<OPTION VALUE ="Durand" > Durand </OPTION>
<OPTION VALUE ="Louis" > Louis </OPTION>
</SELECT>
<BR>

<P>Liste des Produits :</P>


<P>

<? sort ($t);


REMPLIR ($t, "lst_produits");
?>

<P>Nombre de produits à commander :


<INPUT id=zt_nbre name=zt_nbre style="WIDTH: 50px; HEIGHT: 22px" size=7></P>
<P>
<INPUT TYPE = "button" name = bt_submit value="soumettre"
onclick="javascript:valid_form()" > </P>
</FORM>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 23


Fichier ex10bis-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX20-b : Utilisation de combobox</TITLE>
</HEAD>
<BODY>

<? // initialisation des variables


$lst_produits="";
$zt_nbre="";
$lst_vendeurs="";

// Récupération des variables


// NB : si rien n’a été sélectionné dans la liste, la variable lst_vendeur n’est aps passée en 2ème
page

if (isset($_POST["lst_produits"]))
{
$lst_produits =$_POST["lst_produits"] ;
}
if (isset($_POST["zt_nbre"]))
{
$zt_nbre =$_POST["zt_nbre"] ;
}
if (isset($_POST["lst_vendeurs"]))
{
$lst_vendeurs =$_POST["lst_vendeurs"] ;
}

echo "vous avez commandé $zt_nbre $lst_produits auprès du vendeur $lst_vendeurs";


?>

<BR>
<INPUT TYPE = button Value = "Retour" onclick = "self.history.back()">
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 24


INTERROGATION DE BDD
MODELE UTILISE

EXERCICE 11 : Se connecter à la base « appli_commandes.mdb » via un lien ODBC (ou la


base « BASE_TEST » en MYSQL) et afficher la liste de tous les clients (code_client + nom ).
On ajoutera ensuite pour chaque client le lien vers son site.

Objectifs : Connexion à une base de données.

Fichier ex11.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 11 : Affichage d'une requête sous forme simple HTML</TITLE>
</HEAD>
<BODY>

<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 11 : Affichage d'une requête sous forme simple HTML</TITLE>
</HEAD>
<BODY>
<? $host = "localhost";
$user = "root";
$password = "";
//crée une connexion au serveur mysql
mysql_connect ($host, $user, $password); // connection au serveur

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 25


mysql_select_db("Base_test"); //ouvre la BDD
// paramétrage de la requête
$req_client = "select code_client, nom, site from clients";

// envoie le résultat de la requête dans le recordset


$r_result = mysql_query($req_client);
?>
Resultats de la requête : <B> <? echo ($req_client); ?> </B>

<BR><BR>
<? // balaye toutes les lignes du recordset et les affiche
for ($i = 0 ; $i < mysql_num_rows($r_result); $i++)
{
//extrait le résultat de la prochaine ligne du recordset dans une variable de type tableau
$tbl_ligne = mysql_fetch_array ($r_result, MYSQL_BOTH);
// affiche chaque champ de la ligne
echo ($tbl_ligne['code_client'] . " " . $tbl_ligne['nom']);?>
<A href= " <?echo ($tbl_ligne['site']);?> "> Accès au site <?echo
($tbl_ligne['site']);?> </A>
<?echo "<BR>";
}
//libère la mémoire affectée au recordset
mysql_free_result($r_result);
?>

Fichier ex11_odbc.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 11 : Affichage d'une requête sous forme simple HTML</TITLE>
</HEAD>
<BODY>
<?
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req_client = "select code_client, nom, site from clients";

// affichage du texte de la requête


echo $req_client;
echo "<BR><BR>";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req_client);

while (odbc_fetch_row($result) == TRUE) // tant qu'il y a une ligne dans le recordset


{
// affiche chaque champ de la ligne
echo (odbc_result ($result, "code_client") . " " . odbc_result ($result, "nom"));

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 26


// crée pour chaque ligne une balise d’ancre avec l’adresse du site internet ?>
<A href= " <? echo (odbc_result ($result, "site"));?> ">
Accès au site <?echo (odbc_result ($result, "site"));?> </A>
<?
echo "<BR>";
}
// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 27


EXERCICE 12 : Même exercice que précédemment mais en affichant dynamiquement toutes
les lignes et tous les champs de la table client (si on modifie le nombre de champs à afficher,
seul le paramétrage de la requête doit être modifié) :
a) en format brut
b) en créant un tableau

Objectifs : Connexion à une base de données. Parcourir un recordset. Utilisation de tableau.

Fichier ex12a_odbc.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 12 : Affichage d'une requête sous forme simple HTML</TITLE>
</HEAD>
<BODY>

<?
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req = "select code_client, nom from clients";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req);

?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 28


Resultats de la requête : <B> <? echo ($req); ?> </B>
<BR><BR>

<?
// balaye toutes les lignes du recordset et les affiche
while (odbc_fetch_row($result) == TRUE) // tant qu'il y a une ligne dans le recordset
{
//balaye tous les champs du recordset pour la ligne en cours
for ($i=1; $i <= odbc_num_fields($result); $i++)
{
//extrait le nom du champ
$champ = odbc_field_name($result,$i);
//extrait la valeur du champ en cours pour la ligne en cours
$val = odbc_result ($result, $champ);
//affiche la valeur du champ en cours
echo ($val);
echo " ";
}
//renvoi à la ligne après chaque enregistrement
echo "<BR>";
}

// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>

Fichier ex12b_odbc.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 12 : Affichage d'une requête sous forme simple HTML</TITLE>
</HEAD>
<BODY>

<?
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req = "select code_client, nom from clients";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req);
?>

Resultats de la requête : <B> <? echo ($req); ?> </B>


<BR><BR>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 29


<TABLE BORDER = 1>
<THEAD>
<TR>

<?
// crée l'en-tête du tableau avec les noms des champs de la requête
for ($i=1; $i <= odbc_num_fields($result); $i++)
{
echo ("<TH>" . odbc_field_name($result,$i) . "</TH>");
}
?>
</TR>
</THEAD>

<TBODY>
<?
// crée les lignes du tableau

// balaye toutes les lignes du recordset et les affiche


while (odbc_fetch_row($result) == TRUE) // tant qu'il y a une ligne dans le recordset
{
echo ("<TR>");
//balaye tous les champs du recordset.
for ($i=1; $i <= odbc_num_fields($result); $i++)
{
//extrait le nom du champ
$champ = odbc_field_name($result,$i);
//extrait la valeur du champ en cours pour la ligne en cours
$val = odbc_result ($result, $champ);
echo ("<TH>" . $val . "</TH>");
echo " ";
}
echo ("<TR>");
}?>

</TBODY>
</TABLE>

<?
// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 30


EXERCICE 13 : Créer une liste qui contient tous les clients. Après avoir choisi un client, on
doit pouvoir accéder à une autre page qui affiche toutes les commandes (no, date, montant total
commandé) passées par le client sélectionné.
NB : on affichera les données relatives aux commandes en créant un tableau.

Objectifs : Passage de paramètres pour créer le recordset. Création d’une procédure pour
créer un tableau HTML à partir d’un recordset.

Fichier ex13_p1_odbc.php
<HTML>
<HEAD>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 31


<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 13_p1_odbc : Passage de paramètres pour un recordset</TITLE>
</HEAD>
<H1> Afficher toutes les commandes pour le client sélectionné </H1>
<BODY>

<?
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req_client = "select code_client, nom from clients order by nom";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req_client);

?>

<FORM action = "ex13_p2_odbc.php" method = POST>


<P> Liste des clients <BR><BR>
<SELECT NAME ="lst_clients">
<?
//pour chaque ligne du recordset, on crée une option dans la liste
while (odbc_fetch_row($result) == TRUE)
{
//pour chaque ligne, crée une option à la liste (en HTML) et renseigne la valeur à stocker
(propriété value) ainsi que la valeur à afficher (en PHP)
?>
<OPTION VALUE ="<? echo (odbc_result ($result, "code_client")); ?> " > <? echo
(odbc_result ($result, "nom")); ?> </OPTION>
<?
}
// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>
</SELECT>

<INPUT TYPE = "submit" name = bt_submit value="soumettre" >


</P>
</FORM>
</BODY>
</HTML>

Fichier ex13_p2_odbc.php
<HTML>
<HEAD>
<?
require "recordsetODBC_vers_tableau.php";

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 32


//récupération du code du client contenu dans la liste en page 1
$lst_clients=$_POST["lst_clients"] ;

//crée une connexion au lien ODBC "commandes"


$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête pour récupérer le nom du client


$req_nom = "select nom from clients where code_client = '$lst_clients' ";

// envoie le résultat de la requête dans le recordset


$r_nom = odbc_exec ($maConnexion, $req_nom);

//récupère le nom dans une variable


$nom = odbc_result ($r_nom, "nom");

// paramétrage de la requête pour récupérer les commandes du client


$req_cde = "SELECT commandes.no_cde, commandes.date_cde, commandes.code_client, ".
"Sum(qte*pu) AS total FROM commandes, detail_cde ".
"where commandes.no_cde = detail_cde.no_cde and code_client = '$lst_clients' ".
"GROUP BY commandes.no_cde, commandes.date_cde, commandes.code_client";

// envoie le résultat de la requête dans le recordset


$r_cde = odbc_exec ($maConnexion, $req_cde);?>

<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">


<TITLE>EXERCICE 13_p2_odbc : Passage de paramètres pour un recordset></TITLE>
</HEAD>
<H1> Liste des commandes pour le client <?echo ($nom)?> </H1>
<BODY>
<?
//appelle la procédure qui crée un tableau à partir d'un recordset
creer_tab ($r_cde,"");
// libération de la mémoire
odbc_free_result($re_ cde);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>
</P>
</BODY>
</HTML>

Fichier recordsetODBC_vers_tableau.php
<?
//PROCEDURE QUI CREE UN TABLEAU HTML A PARTIR D'UN RECORDSET ODBC
// et qui permet d'accéder à chaque fiche à partir d'une balise d'ancre
// NB : la clé doit être placée en premier champ
//$fichier = nom du fichier vers lequel on envoie si on veut modifier une fiche
//Si ce nom est vide, le recordset est affiché sans accès à la modification de fiche.
//ex : créer_tab($r_client, "" ) ;

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 33


function creer_tab ($r_recordset, $fichier)
{
?>
<CENTER><TABLE BORDER = 1>
<THEAD>
<TR>

<?
// crée l'en-tête du tableau avce les noms des champs de la requête
for ($i=0; $i < odbc_num_fields($r_recordset); $i++)
{
$champ = odbc_field_name($r_recordset,$i+1);
echo ("<TH>" . $champ . "</TH>");

}
?>
</TR>
</THEAD>
<TBODY>
<?
// crée les lignes du tableau
while (odbc_fetch_row($r_recordset) == TRUE)
{
echo ("<TR>");
for ($j=0; $j < odbc_num_fields($r_recordset); $j++)
{
$champ = odbc_field_name($r_recordset,$j+1);
$tbl = odbc_result ($r_recordset, $champ);

//teste si on est sur l'identifiant


If (($j==0) && ($fichier !=""))
{
$no = odbc_result ($r_recordset, 1);
echo ("<TD>" . "<A href= '" . "$fichier?num=$no" . "'> $tbl </A>" .
"</TD>");
}
else
{
echo ("<TD>" . $tbl . "</TD>");
}
}

echo ("</TR>");
}
?>
</TBODY>
</TABLE></CENTER>
<?
}
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 34


EXERCICE 14 : Même exercice que le précédent mais en affichant cette fois-ci les résultats
sur la même page.
a) sans utiliser de frame
b) en utilisant une frame

Objectifs : Test sur le bouton submit.

Fichier ex14_a_ODBC.php
<HTML>
<HEAD>
<?
// inclut le fichier qui contient la procédure de transfert d'un recordset vers une liste
require "recordset_vers_liste_ODBC.php"; ?>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 14 : test sur le bouton submit</TITLE>
</HEAD>
<H1> Afficher toutes les commandes pour le client sélectionné </H1>
<BODY>
<? //récupération des variables si soumises
$lst_clients="";
$bt_submit="" ;
if (isset($_POST["lst_clients"]))
{
$lst_clients=$_POST["lst_clients"];
}
if (isset($_POST["bt_submit"]))

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 35


{
$bt_submit =$_POST["bt_submit"];
}
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête pour récupérer les clients


$req_client = "select code_client, nom from clients order by nom";

// envoie le résultat de la requête dans le recordset


$r_result = odbc_exec ($maConnexion, $req_client);
?>

<FORM method = POST>


<P> Liste des clients <BR><BR>

<?
//appelle la procédure qui remplit une liste à partir d'un recordset
recordset_vers_liste_ODBC ($r_result, "lst_clients", "code_client", "nom", $lst_clients);

// libération de la mémoire
odbc_free_result($r_result);

?>

<INPUT TYPE = "submit" name = bt_submit value="soumettre" >


</P>
</FORM>

<?
//teste si on a appuyé sur submit
// si oui : affiche les résultats pour le client

if ($bt_submit)
{
// inclut la procédure qui permet de remplir un tableau à partir d’un recordset
require "recordsetODBC_vers_tableau.php";
// paramétrage de la requête pour récupérer le nom du client
$req_client_nom = "select nom from clients where code_client= '$lst_clients' ";
// envoie le résultat de la requête dans le recordset
$r_nom = odbc_exec ($maConnexion, $req_client_nom);

//récupère le nom dans une variable


$nom = odbc_result ($r_nom, "nom");

// paramétrage de la requête pour récupérer les commandes du client


$req_client_cde = "select code_client, commandes.no_cde, date_cde, sum(qte*pu) as total ".
"from commandes, detail_cde ".
"where commandes.no_cde = detail_cde.no_cde and code_client = '$lst_clients' " .
"group by commandes.no_cde, date_cde, code_client ";?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 36


<H1> Liste des commandes pour le client <?echo ($nom);?> </H1>

<?
//envoie le résultat de la requête dans le recordset
$r_cde = odbc_exec ($maConnexion, $req_client_cde);

//appel de la fonction qui crée un tableau à partir d’un recordset


creer_tab ($r_cde,"");

//libère la mémoire affectée aux recordsets


odbc_free_result($r_nom);
odbc_free_result($r_cde);
odbc_close($maConnexion);

}
?>

</BODY>
</HTML>

Fichier recordset_vers_liste_ODBC.php
<?
// procédure qui crée une liste à partir d'un recordset, d'un nom de liste
// $val = nom du champ du recordset qui servira pour la valeur de la liste
// $libelle = nom du champ du recordset à afficher dans la liste
//$ligne = valeur de la ligne qui doit être affichée à l'ouverture de la liste
//exemple : recordset_vers_liste_ODBC ($r_result, "lst_clients", "code_client", "nom",
"00001");.

function recordset_vers_liste_ODBC ($recordset, $nom_liste, $val, $libelle, $ligne)


{
$ligne_sel = ""
?>
<SELECT NAME ="<? echo $nom_liste ;?>" >
<?
//pour chaque ligne du recordset, on crée une option dans la liste
while (odbc_fetch_row($recordset) == TRUE)
{

//teste si l'option en cours de sélection est la ligne à afficher


if ($ligne == odbc_result ($recordset, $val))
{
$ligne_sel = "selected" ;
}
else
{
$ligne_sel = "";
}
?>
<OPTION VALUE ="<? echo odbc_result ($recordset, $val) ?>" <? echo $ligne_sel
?> > <? echo odbc_result ($recordset, $libelle) ?> </OPTION>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 37


<?
}
?>
</SELECT>

<?
}
?>

Fichier recordsetODBC_vers_tableau.php
<?
//PROCEDURE QUI CREE UN TABLEAU HTML A PARTIR D'UN RECORDSET ODBC
// et qui permet d'accéder à chaque fiche à partir d'une balise d'ancre

// NB : la clé doit être placée en premier champ

//$fichier = nom du fichier vers lequel on envoie si on veut modifier une fiche
//Si ce nom est vide, le recordset est affiché sans accès à la modification de fiche.

function creer_tab ($r_recordset, $fichier)


{
?>
<CENTER><TABLE BORDER = 1>
<THEAD>
<TR>

<?
// crée l'en-tête du tableau avce les noms des champs de la requête
for ($i=0; $i < odbc_num_fields($r_recordset); $i++)
{
$champ = odbc_field_name($r_recordset,$i+1);
echo ("<TH>" . $champ . "</TH>");

}
?>
</TR>
</THEAD>

<TBODY>
<?
// crée les lignes du tableau
while (odbc_fetch_row($r_recordset) == TRUE)
{
echo ("<TR>");
for ($j=0; $j < odbc_num_fields($r_recordset); $j++)
{
$champ = odbc_field_name($r_recordset,$j+1);
$tbl = odbc_result ($r_recordset, $champ);

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 38


//teste si on est sur l'identifiant
If (($j==0) && ($fichier !=""))
{
$no = odbc_result ($r_recordset, 1);
echo ("<TD>" . "<A href= '" . "$fichier?num=$no" . "'> $tbl </A>" .
"</TD>");
}
else
{
echo ("<TD>" . $tbl . "</TD>");
}
}

echo "<TD>";

echo ("</TR>");

}
?>
</TBODY>

</TABLE></CENTER>
<?
}
?>

Fichier ex14-bframe_odbc.php
<HTML>
<HEAD>
<TITLE>Commandes</TITLE>
</HEAD>
<FRAMESET COLS="30%,70%" FRAMESPACING="0" BORDER="0">
<FRAME NAME="gauche" SCROLLING=AUTO SRC="ex14-b-1odbc.php">
<FRAME NAME="droite" SCROLLING=AUTO SRC="">
</FRAMESET>
</HTML>

Fichier ex14-b-1odbc.php
<HTML>
<HEAD>
<TITLE></TITLE>
<?
//inclut la procédure qui permet de remplir une liste à partir d'un recordset
Require "recordset_vers_liste_ODBC.php";
?>

</HEAD>
<BODY>

<H1 align=center>Affiche les commandes d'un client</H1>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 39


<P align=center>Liste des clients :</P>

<?
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête pour récupérer les clients


$sql_client="select code_client,nom from clients";

// envoie le résultat de la requête dans le recordset


$r_clients = odbc_exec ($maConnexion, $sql_client);

?>

<form action="ex14-b-2odbc.php" target=droite method=post>


<P align=center>
<?
recordset_vers_liste_ODBC ($r_clients, "lst_clients", "code_client", "nom",1);
?>
</P>

<?
// libération de la mémoire
odbc_free_result($r_clients);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>

<P align=center>
<INPUT id=submit1 name=submit1 type=submit value=Submit>
</P>
</form>
</BODY>
</HTML>

Fichier ex14-b-2odbc.php
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>

<h1 align=center>Ses commandes</h1>


<br>

<? //récupération des variables si soumises


$lst_clients="";
if (isset($_POST["lst_clients"]))
{
$lst_clients=$_POST["lst_clients"];
}

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 40


//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête pour récupérer les clients


$sql_commande="SELECT commandes.no_cde as \"N° de
commande\",commandes.date_cde as \"Date de
commande\",sum(detail_cde.QTE*detail_cde.PU) as \"Total\"
FROM commandes,detail_cde
WHERE code_client='$lst_clients' and commandes.no_cde=detail_cde.no_cde
GROUP BY commandes.no_cde, commandes.date_cde";
// envoie le résultat de la requête dans le recordset
$r_commande = odbc_exec ($maConnexion, $sql_commande);

// prend la procédure contenue dans recordsetODBC_vers_tableau.php pour remplir le tableau


require "recordsetODBC_vers_tableau.php";
creer_tab($r_commande, "");

// libération de la mémoire
odbc_free_result($r_commande);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>

</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 41


EXERCICE 15 : Créer une première page qui demande à l’utilisateur de saisir son code
client.
Afficher sa fiche signalétique sur une 2ème page et la liste de ses commandes sur une 3ème
page.

Objectifs : Gestion de session. Utilisation de variables de session.

Page 1 :

Page 2 :

Page 3 :

Fichier 15_p1.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 15 : VARIABLES SESSION</TITLE>
</HEAD>
<H1> Saisir votre code client </H1>
<BODY>
<FORM action = "ex15_p2.php" method = post>
<INPUT TYPE="text" NAME="zt_code">
<INPUT TYPE = "submit" name = bt_submit value="soumettre" >
</P>
</FORM>
</BODY>
</HTML>

Fichier ex15_p2.php
<? session_start(); //démarre la session
// a placer en haut de la page avant toute instruction HTML
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 42


<HTML>
<HEAD>
<FORM action = "ex15_p3.php" method = POST>
<?
echo "Voici votre fiche signalétique";

//déclare la variable session code_client


session_register("s_code");

//initialise la variable session code_client


$_SESSION["s_code"] = $_POST["zt_code"];

$maConnexion = odbc_connect ("commandes", "", "");


$req_client = "select * from clients where code_client = '" . $_SESSION["s_code"]. "'";
$r_client = odbc_exec ($maConnexion, $req_client );

require "recordsetODBC_vers_tableau.php";
creer_tab($r_client, "");

//enregistre le code_client en variable session


odbc_free_result($r_client);
odbc_close($maConnexion);
?>
<INPUT TYPE = "submit" name = bt_submit value="Accès à vos commandes" >
</FORM>
</HTML>

Fichier ex15_p3.php
<?
//accède à la session en cours
session_start();
?>
<HTML>
<?
//récupère le code du client à partir de la variable session
$s_code=$_SESSION["s_code"];
echo "Votre code client est $s_code";
echo "<BR>";
echo "Voici la liste de vos commandes";

$maConnexion = odbc_connect ("commandes", "", "");


$req_cde = "select * from commandes where code_client = '$s_code'";
$r_cde = odbc_exec ($maConnexion, $req_cde);
//affiche la liste des commandes du client
require "recordsetODBC_vers_tableau.php";
creer_tab($r_cde, "");

odbc_free_result($r_cde);
odbc_close($maConnexion);

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 43


// détruit la session active
session_destroy();
?>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 44


EXERCICE 16 : Créer un formulaire qui permette d’insérer les coordonnées d’un client dans
la base de données.
NB : on fera en sorte que la saisie des informations code_client, nom, prenom et tel soient
obligatoires.

Objectifs : Requête d’insertion, contrôles de cohérence côté client.

Fichier ex16-a.php
<HTML>
<HEAD>
<SCRIPT language = "Javascript">
// cette procédure active la soumission du formulaire si la saisie est correcte
// dans le cas contraire, elle affiche un message
// Cette procédure est appelée quand on clicque sur le bouton soumettre
// qui est un bouton normal et non de type submit
function valid_form()
{
var ok =1;
var msg ="";
if (saisie.zt_code.value =="")
{
ok = 0;
msg = "Saisir le code_client ";
alert (msg);
}
else
{
if (saisie.zt_nom.value =="")
{
ok = 0;
msg = msg + "Saisir le nom";
alert (msg);
}
else
{
if (saisie.zt_prenom.value =="")
{

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 45


ok = 0;
msg = msg + "Saisir le prénom";
alert (msg);
}
else
{
if (saisie.zt_tel.value =="")
{
ok = 0;
msg = msg + "Saisir le numéro de téléphone ";
alert (msg);
}
else
{
if (ok == 1)
{
saisie.submit();
}
}
}
}
}

}
</script>
<?
//inclut le fichier qui contient la fonction message
require "procedures.php";
?>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX16 : Insertion d'un enregistrement dans la BDD</TITLE>
</HEAD>
<BODY>
<FORM name = "saisie" action = "ex16-b.php" METHOD = POST>
<CENTER><B>SAISIR LES INFORMATIONS SUIVANTES</B></CENTER>
<BR>
NB : les champs précédés d'une (*) sont obligatoires.
<BR>

(*) Code client <INPUT TYPE="text" NAME="zt_code"><BR>


(*) Nom du client <INPUT TYPE="text" NAME="zt_nom"><BR>
(*) Prénom du client <INPUT TYPE="text" NAME="zt_prenom"><BR>
Adresse <INPUT TYPE="text" NAME="zt_adr"><BR>
Code postal <INPUT TYPE="text" NAME="zt_cp"><BR>
Ville <INPUT TYPE="text" NAME="zt_ville"><BR>
(*) Tel <INPUT TYPE="text" NAME="zt_tel"><BR>
Site internet <INPUT TYPE="text" NAME="zt_site" size = 80><BR>

<CENTER><INPUT TYPE = "button" name = bt_submit value="Insérer"


onclick="javascript:valid_form()" >
</CENTER></FORM>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 46


</BODY>
</HTML>

Fichier ex16-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EX16 : Insertion d'un enregistrement dans la BDD</TITLE>
</HEAD>
<BODY>
<CENTER><B>CONFIRMATION DE L'INSCRIPTION</B></CENTER>
<BR>
<? //récupérer variables de la page précédente
$zt_code=$_POST["zt_code"];
$zt_nom=$_POST["zt_nom"];
$zt_prenom=$_POST["zt_prenom"];
$zt_adr=$_POST["zt_adr"];
$zt_cp=$_POST["zt_cp"];
$zt_ville=$_POST["zt_ville"];
$zt_tel=$_POST["zt_tel"];
$zt_site=$_POST["zt_site"];

//crée une connexion au lien ODBC "commandes"


$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req_insert = "INSERT INTO clients (code_client, nom, pre_cl, ad_cl, cp_cl, ville_cl, tel_cl,
site) VALUES ('$zt_code', '$zt_nom', '$zt_prenom', '$zt_adr', '$zt_cp', '$zt_ville', '$zt_tel',
'$zt_site')";

// exécute la requête
$result = odbc_exec ($maConnexion, $req_insert);

// teste si l’insertion a bien eu lieu


if ($result == FALSE) // si la connexion a échoué
{
die ("<B><P>problème avec le serveur : l'insertion n'a pas eu lieu<P>
Contactez l’administrateur système</B>"); // fin du script
}
else
{
echo "votre inscription a bien été prise en compte.";
}
?>

</CENTER>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 47


EXERCICE 17 : Construire une page qui propose la liste de toutes les villes des clients. Après
le choix d’une ville, afficher la liste des clients correspondants avec la possibilité de modifier
la fiche d’un client.

Objectifs : Modification d’un enregistrement, construction d’un formulaire servant soit pour
la saisie, soit pour la modification.

Page 1 :

Page 2 :

Page 3 :

Fichier ex17-a.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 17 : Affichage et modification d'enregistrements</TITLE>
</HEAD>
<H1> Afficher tous les clients correspondants à la ville choisie</H1>
<BODY>

<? //crée une connexion au lien ODBC "commandes"


$maConnexion = odbc_connect ("commandes", "", "");

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 48


// paramétrage de la requête
$req_ville = "select ville_cl from clients where ville_cl <> '' group by ville_cl";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req_ville);

//inclut le fichier qui crée une liste à partir d'un recordset


require "recordset_vers_liste_ODBC.php";
?>

<FORM action = "ex17-b.php" method = POST>


<P> Liste des villes <BR><BR></P>
<?
//crée la liste des villes
recordset_vers_liste_ODBC($result, "lst_ville", "ville_cl", "ville_cl", 1);
// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>

<INPUT TYPE = "submit" name = bt_submit value="soumettre" >


</FORM>
</BODY>
</HTML>

Fichier ex17-b.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 17 : Affichage et modification d'enregistrements</TITLE>
</HEAD>
<? // Récupération de la ville saisie en page 1
$lst_ville = $_POST["lst_ville"] ; ?>
<H1> Liste des clients habitant à <? echo $lst_ville ?></H1>
<BODY>
< ? //crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req_client = "select * from clients where ville_cl = '$lst_ville'";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req_client);

// inclut la procédure qui crée et remplit un tabbleau à partir d'un recordset ODBC
require "recordsetODBC_vers_tableau.php";
creer_tab ($result, "ex17-c.php");

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 49


// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>
</BODY>
</HTML>

Fichier ex17-c.php
<HTML>
<HEAD>
<SCRIPT language = "Javascript">
// cette procédure active la soumission du formulaire si la saisie est correcte
// dans le cas contraire, elle affiche un message
// Cette procédure est appelée quand on clicque sur le bouton soumettre
// qui est un bouton normal et non de type submit
function valid_form()
{
var ok =1;
var msg ="";
if (saisie.zt_code.value =="")
{
ok = 0;
msg = "Saisir le code_client ";
alert (msg);
}
else
{
if (saisie.zt_nom.value =="")
{
ok = 0;
msg = msg + "Saisir le nom";
alert (msg);
}
else
{
if (saisie.zt_prenom.value =="")
{
ok = 0;
msg = msg + "Saisir le prénom";
alert (msg);
}
else
{
if (saisie.zt_tel.value =="")
{
ok = 0;
msg = msg + "Saisir le numéro de téléphone ";
alert (msg);
}
else

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 50


{
if (ok == 1)
{
saisie.submit();
}
}
}
}
}

}
</script>
<?
//inclut le fichier qui contient la fonction message
require "procedures.php";
?>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 17 : Affichage et modification d'enregistrements</TITLE>
</HEAD>
<BODY>
<FORM name = "saisie" action = "ex17-d.php" METHOD = post>
<CENTER><B>SAISIR LES INFORMATIONS SUIVANTES</B></CENTER>
<BR>
NB : les champs précédés d'une (*) sont obligatoires.
<BR>
<?
// teste si on est en saisie ou en modif
If (isset($_GET["num"]))
{
//récupère le no du client cliqué sur le lien hypertexte de la page précédente
$num = $_GET["num"];

//si le no n'est pas vide, cela signifie qu'on est en mode modification
//recherche dans ce cas les informations correspondant au code client choisi
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req_client = "select * from clients where code_client = '$num'";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req_client);

//reprend les valeurs de la fiche à modifier


$code = odbc_result($result, "code_client");
$nom = odbc_result($result, "nom");
$prenom = odbc_result($result, "pre_cl");
$ad = odbc_result($result, "ad_cl");
$cp = odbc_result($result, "cp_cl");
$ville = odbc_result($result, "ville_cl");
$tel = odbc_result($result, "tel_cl");

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 51


$site = odbc_result($result, "site");
}
else //initialise les variables à NULL

{
$code = "";
$nom = "";
$prenom="";
$ad = "";
$cp = "";
$ville = "";
$tel = "";
$site = "";
}
?>

(*) Code client <INPUT TYPE="text" NAME="zt_code" value = "<? echo $code ?>"><BR>
(*) Nom du client <INPUT TYPE="text" NAME="zt_nom" value = "<? echo
$nom?>"><BR>
(*) Prénom du client <INPUT TYPE="text" NAME="zt_prenom" value = "<? echo $prenom
?> "><BR>
Adresse <INPUT TYPE="text" NAME="zt_adr" value = "<? echo $ad?>"><BR>
Code postal <INPUT TYPE="text" NAME="zt_cp" value = "<? echo $cp?>"><BR>
Ville <INPUT TYPE="text" NAME="zt_ville" value = "<? echo $ville?>"><BR>
(*) Tel <INPUT TYPE="text" NAME="zt_tel" value = "<? echo $tel?>"><BR>
Site internet <INPUT TYPE="text" NAME="zt_site" value = "<? echo $site ?>" size =
80><BR>

<CENTER><INPUT TYPE = "button" name = bt_submit value="Insérer"


onclick="javascript:valid_form()" >
</CENTER></FORM>
</BODY>
</HTML>

Fichier ex17-d.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>EXERCICE 17 : Affichage et modification d'enregistrements</TITLE>
</HEAD>
<BODY>
<CENTER><B>CONFIRMATION DE L'INSCRIPTION</B></CENTER>
<BR>

<? //récupérer variables de la page précédente


$zt_code=$_POST["zt_code"];
$zt_nom=$_POST["zt_nom"];
$zt_prenom=$_POST["zt_prenom"];
$zt_adr=$_POST["zt_adr"];
$zt_cp=$_POST["zt_cp"];

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 52


$zt_ville=$_POST["zt_ville"];
$zt_tel=$_POST["zt_tel"];
$zt_site=$_POST["zt_site"];

//crée une connexion au lien ODBC "commandes"


$maConnexion = odbc_connect ("commandes", "", "");

// paramétrage de la requête
$req_client = "select count(*) as nb from clients where code_client ='$zt_code'";

// envoie le résultat de la requête dans le recordset


$result = odbc_exec ($maConnexion, $req_client);

//teste si le client a déjà été saisi ou si on est en modification de fiche


if (odbc_result($result, "nb") == 0)
{
//on est en mode ajout
$req_insert = "INSERT INTO clients (code_client, nom, pre_cl, ad_cl, cp_cl, ville_cl,
tel_cl, site) VALUES ('$zt_code', '$zt_nom', '$zt_prenom', '$zt_adr', '$zt_cp', '$zt_ville',
'$zt_tel', '$zt_site')";

// exécute la requête
$insert = odbc_exec ($maConnexion, $req_insert);

echo "votre inscription a bien été prise en compte.";


}
else
{
// on est en mode modif
$req_update = "UPDATE clients SET nom='$zt_nom', pre_cl='$zt_prenom',
ad_cl='$zt_adr', cp_cl='$zt_cp', ville_cl='$zt_ville', tel_cl='$zt_tel', site='$zt_site' WHERE
code_client = '$zt_code'";

// exécute la requête
$update = odbc_exec ($maConnexion, $req_update);
echo "Votre fiche a bien été modifiée";
}

?>
<INPUT TYPE = "Button" Type=button value = "retour" onclick = "self.history.back();">
<BR>
</CENTER></FORM>
</BODY>
</HTML>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 53


EXERCICE 18 : Construire une page qui indique le nombre de visites de l’utilisateur sur le
site.

Objectifs : utilisation de cookie.

Fichier cookie.php
<?setcookie("nbvisites", mktime(12,30,15,25,6,2006));
//affecte la valeur du cookie à $n
if (isset($_COOKIE["nbvisites"]))
{
$n= $_COOKIE["nbvisites"];
}
else
{
$n = 1;
}

echo "Vous avez effectué $n visite(s)";

//incrémente $n
$n++;
//incrémente le cookie de 1
setcookie("nbvisites",$n, mktime(12,30,15,25,6,2006));
?>

EXERCICE 19 : Construire une page qui demande à l’utilisateur de saisir son nom à la
première visite. Dès que le nom aura été saisi, la même page affichera automatiquement
« bienvenue Monsieur untel » et ne lui demandera plus de saisir son nom.
On inclura également un compteur de visite.

Objectifs : utilisation de cookie.

Fichier cookie2.php
<?
//Teste si le cookie existe
if (isset($_COOKIE["nom"]))
{
$nom= $_COOKIE["nom"];
echo "Bienvenue M. $nom";
}
else
{
echo "<form method = Post>";
echo "Saisir votre nom : <input type=text name = zt_nom>";
echo "<input type = submit name = ok>";
}

//teste si on a appuyé sur le bouton submit


if (isset($_POST["ok"]))
{

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 54


//récupère le nom saisi

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 55


$nomsaisi = $_POST["zt_nom"];
//crée le cookie
setcookie("nom", $nomsaisi, mktime(12,30,15,25,6,2006));
//recharge la page pour accéder à la variable globale générée par le cookie
Header("Location:cookie2.php");
}
?>

EXERCICE 20 : Créer une liste qui contient tous les clients. Après avoir choisi un client, on
doit pouvoir générer un pdf qui affiche toutes les commandes (no, date, montant total
commandé) passées par le client sélectionné.

Objectifs : Génération de pdf

Exemple de pdf :

Fichier choix_client.php
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE>Création de pdf</TITLE>
</HEAD>
<H1> Crée un pdf avec toutes les commandes pour le client sélectionné </H1>
<BODY>
<?
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");
// paramétrage de la requête
$req_client = "select code_client, nom from clients order by nom";

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 56


// envoie le résultat de la requête dans le recordset
$result = odbc_exec ($maConnexion, $req_client);
?>

<FORM action = "client_pdf.php" method = POST>


<P> Liste des clients <BR><BR>
<SELECT NAME ="lst_clients">
<?
//pour chaque ligne du recordset, on crée une option dans la liste
while (odbc_fetch_row($result) == TRUE)
{
//pour chaque ligne, crée une option à la liste (en HTML) et renseigne la valeur à stocker
(propriété value) ainsi que la valeur à afficher (en PHP)
?>
<OPTION VALUE ="<? echo (odbc_result ($result, "code_client")); ?> " > <? echo
(odbc_result ($result, "nom")); ?> </OPTION>
<?
}
// libération de la mémoire
odbc_free_result($result);
// fermeture de la connexion avec la source de données
odbc_close($maConnexion);
?>
</SELECT>
<INPUT TYPE = "submit" name = bt_submit value="soumettre" >
</P>
</FORM>
</BODY>
</HTML>

Fichier client_pdf.php
<?
//dans le php.ini, activer la dll pdf : extension=php_pdf.dll
//dans le fichier pdflib.upr, indiquer le chemin d'accès aux polices : /c:/windows/fonts
//récupération du code du client contenu dans la liste en page 1
$lst_clients=$_POST["lst_clients"] ;
//crée une connexion au lien ODBC "commandes"
$maConnexion = odbc_connect ("commandes", "", "");
// paramétrage de la requête
$req_cde = "SELECT commandes.no_cde, commandes.date_cde, commandes.code_client, ".
"Sum(qte*pu) AS total FROM commandes, detail_cde ".
"where commandes.no_cde = detail_cde.no_cde and code_client = '$lst_clients' ".
"GROUP BY commandes.no_cde, commandes.date_cde, commandes.code_client";
// envoie le résultat de la requête dans le recordset
$result = odbc_exec ($maConnexion, $req_cde);
// paramétrage de la requête pour récupérer le nom du client
$req_nom = "select nom from clients where code_client = '$lst_clients' ";
// envoie le résultat de la requête dans le recordset
$r_nom = odbc_exec ($maConnexion, $req_nom);

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 57


//récupère le nom dans une variable
$nom = odbc_result ($r_nom, "nom");

//création d'un pdf


$pdf = pdf_new();
$nom_fichier = "$lst_clients.pdf";
//ouverture du fichier
pdf_open_file($pdf,$nom_fichier);
//définition des informations du fichier
pdf_set_info($pdf,"Author", "Jerome Steffe");
pdf_set_info($pdf,"Title", "Liste des produits");
pdf_set_info($pdf,"Subject", "PDF en php");
//définit la page en A4
pdf_begin_page($pdf, 595, 842);
//charge la police arial
$font=pdf_findfont($pdf,"arial", "host", false);
//définit la police
pdf_setfont($pdf,$font, 20);
//positionne le texte
pdf_show_xy($pdf, "Bonjour M. $nom", 50, 750);
pdf_show_xy($pdf, "Voici la liste des commandes que vous avez passées :", 50, 700);
$x = 130;
$y=600;
//hauteur d'une ligne
$h = 50;
//trace l'en-tête
//trace le rectangle
pdf_show_boxed($pdf, "no", $x, $y,50,$h,"center");
pdf_show_boxed($pdf, "date cde", $x+60, $y,150,$h,"center");
pdf_show_boxed($pdf, "total", $x+220, $y,80,$h,"center");
//trace le rectangle
pdf_rect($pdf,$x,$y,320,$h);
//trace les lignes verticales
pdf_moveTo($pdf,$x+55,$y);
pdf_lineTo($pdf,$x+55,$y+$h);
pdf_moveTo($pdf,$x+210,$y);
pdf_lineTo($pdf,$x+210,$y+$h);

//affiche le tracé
pdf_stroke($pdf);
$y=$y-$h;

// balaye toutes les lignes du recordset et les affiche


while (odbc_fetch_row($result) == TRUE) // tant qu'il y a une ligne dans le recordset
{
$no = odbc_result($result,"no_cde");
$date_cde = substr(odbc_result($result,"date_cde"),0,10);
$total = number_format(odbc_result($result,"total"),2);

//trace le rectangle
pdf_show_boxed($pdf, "$no", $x, $y,50,$h,"right");

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 58


pdf_show_boxed($pdf, "$date_cde", $x+60, $y,150,$h,"center");
pdf_show_boxed($pdf, "$total", $x+220, $y,80,$h,"right");
//trace le rectangle
pdf_rect($pdf,$x,$y,320,$h);

//trace les lignes verticales


pdf_moveTo($pdf,$x+55,$y);
pdf_lineTo($pdf,$x+55,$y+$h);

pdf_moveTo($pdf,$x+210,$y);
pdf_lineTo($pdf,$x+210,$y+$h);

//affiche le tracé
pdf_stroke($pdf);
$y=$y-$h;
if ($y<=250)
{
//ferme la page en cours et crée une nouvelle page
pdf_end_page($pdf);
pdf_begin_page($pdf, 595, 842);
//redéfinit les paramètres de la page (ils sont spécifiques à 1 page)
$y=800;
//charge la police arial
$font=pdf_findfont($pdf,"arial", "host", false);
//définit la police
pdf_setfont($pdf,$font, 20);
}
}

//termine la page
pdf_end_page($pdf);
//ferme le document pdf
pdf_close($pdf);
//efface l'objet pdf de la mémoire
pdf_delete($pdf);
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 59


EXERCICE 21 : Créer un site de commandes de plats cuisinés (à partir de la base de
données « base_contrôle_plats_cuisinés ».

Objectifs : Gestion de sessions, panier de commande


Identification du client

Page menu

Page Liste_plats

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 60


Page visu_panier

Page identification.php
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<FORM METHOD=POST ACTION="menu.php">
Saisir votre code client <INPUT TYPE="text" name = zt_code> <BR>
Saisir votre mot de passe <INPUT TYPE="password" name = zt_mot>
<INPUT TYPE="submit" value = "ok">

</FORM></BODY>
</HTML>

Page Menu.php
<?session_start();
require "recordset_vers_liste_ODBC.php";
require "connexion.php";
//initialise la variable session code_client
if (isset($_POST["zt_code"]))
{
$_SESSION["s_code"] = $_POST["zt_code"];
$_SESSION["s_mot"] = $_POST["zt_mot"];
}

$smot= $_SESSION["s_mot"] ;
$code = $_SESSION["s_code"];
//vérification du mot de passe
$sql_mot = "select mot_passe from clients where code_client = '$code'";
$r_mot = odbc_exec($maconnexion, $sql_mot);

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 61


$mot = odbc_result($r_mot, "mot_passe");
If (($mot <> $smot) || ($mot==""))
{
die ("identification incorrecte");
}
?>
<FORM METHOD=POST ACTION="liste_plats.php">
Liste des plats contenant l'ingrédient suivant :
<?
//paramétrage du recordset avec la liste des ingrédients
$sql_ingredient = "select distinct code_ingredient,ingredient from r_detail_plats order by ingredient";
$r_ingredient = odbc_exec($maconnexion, $sql_ingredient);
recordset_vers_liste_ODBC ($r_ingredient, "lm_ingredient", "code_ingredient", "ingredient",
"");
?>
<INPUT name= bt_ingredient TYPE="submit" value = "ok">
</FORM>
<BR><BR>
<FORM METHOD=POST ACTION="liste_plats.php">
Liste des plats contenant le mot suivant :
<INPUT TYPE="text" NAME="zt_mot">
<INPUT name = bt_mot TYPE="submit" value = "ok">
</FORM>
<BR><BR>
<FORM METHOD=POST ACTION="liste_plats.php">
Liste des plats par fourchette de prix, par origine et par origine de plat
<BR>
Choisir prix mini <INPUT TYPE="text" NAME="zt_prix_mini"><BR>
Prix maxi <INPUT TYPE="text" NAME="zt_prix_maxi"><BR>
Origine
<?
//paramétrage du recordset avec la liste des origines
$sql_origine = "select id_origine, origine from origine order by origine";
$r_origine = odbc_exec($maconnexion, $sql_origine);
recordset_vers_liste_ODBC ($r_origine, "lm_origine", "id_origine", "origine", "");
?>
<INPUT name = bt_fourchette TYPE="submit" value = "ok">
</FORM>
<FORM METHOD=POST ACTION="visu_panier.php">
<INPUT name = bt_valid TYPE="submit" value = "Visualiser le panier">
</FORM>

Page Liste_plats.php
<?session_start();
require "connexion.php";
require "recordsetODBC_vers_tableau_plus.php";
$sql= "select distinct Code_plat, Libelle_plat as Libellé, Prix, parts, unité, origine,
libelle_type as type, regime from r_detail_plats";
//teste sur quel bouton on a appuyé
If (isset($_POST["bt_ingredient"]))

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 62


{
$_SESSION["choix"] = "ingredient";
}
else
If (isset($_POST["bt_mot"]))
{
$_SESSION["choix"] = "mot";
}
else
If (isset($_POST["bt_fourchette"]))
{
$_SESSION["choix"] = "fourchette";
}
$choix =$_SESSION["choix"] ;
//paramètre la condition where de la requête SQL en fonction du choix effectué
//le choix est stocké dans des variables session pour pouvoir afficher la dernière apge de
consultation après validation du choix d'un plat par exemple
switch ($choix)
{
case "ingredient":
If (isset($_POST["lm_ingredient"]))
{
$_SESSION["ing"] = $_POST["lm_ingredient"];
}
$ing = $_SESSION["ing"];
$sql = $sql . " where code_ingredient = '$ing'";
break;
case "mot":
If (isset($_POST["zt_mot"]))
{
$_SESSION["mot"] = $_POST["zt_mot"];
}
$libel = $_SESSION["mot"];
$sql = $sql . " where libelle_plat like '%$libel%'";
break;
case "fourchette":
If (isset($_POST["lm_origine"]))
{
$_SESSION["origine"] = $_POST["lm_origine"];
$_SESSION["prix_min"]=$_POST["zt_prix_mini"];
$_SESSION["prix_max"]=$_POST["zt_prix_maxi"];
}
$prix_min = $_SESSION["prix_min"];
$prix_max =$_SESSION["prix_max"];
$origine = $_SESSION["origine"] ;
$sql = $sql . " where prix between $prix_min and $prix_max and id_origine =
'$origine'";
break;
}

// paramétrage du recordset avec la liste des plats correspondants


echo "Liste des plats correspondant à votre requête <BR><BR>";

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 63


$recordset = odbc_exec($maconnexion, $sql);
//appel de la procédure d'affichage des plats
require "fonction_plat.php";
affich_plat($recordset,$maconnexion,"",5,'blue','valid_panier.php');
?>
<FORM METHOD=POST ACTION="visu_panier.php">
<INPUT name = bt_valid TYPE="submit" value = "Visualiser le panier">
</FORM>
<FORM METHOD=POST ACTION="menu.php">
<INPUT name = bt_valid TYPE="submit" value = "menu">
</FORM>

Fichier fonction_plat.php
<?
/*procédure qui affiche les plats contenus dans le recordset $recordset
dans ce recordset doivent obligatoirement apparaître les champs code_plat, libellé, régime,
prix, type, parts, unité et origine
Paramètres à fournir :
- le recordset avec la liste des plats ($recordset)
- le nom de la connexion
- le nom de la page sur laquelle le lien hypertexte va porter (si ce paramètre n'est aps
renseigné, le lien hypertetxe n'est pas créé)
- la taille de caractère pour le libellé du plat
- la couleur de caractère pour le libellé du plat
- la page à charger quand on clique sur "ajouter au panier"
La procédure crée une liste des plats avec un lien hypertexte sur le libellé du plat qui envoie la
variable code_plat à la page paramétrée en lien.
exemple d'appel : affich_plat($recordset,$maconnexion,"",5,'blue','valid_panier.php');
*/
function affich_plat($recordset,$maconnexion,$lien,$size, $color,$page)
{
while (odbc_fetch_row($recordset)==true)
{
echo "<form method = post action = '$page'>";
$code_p= odbc_result($recordset, "code_plat");
echo "<input type = hidden name = zt_plat value = $code_p>";
$libel=odbc_result($recordset, "libellé");
echo "<FONT SIZE=$size COLOR=$color>";
//teste si on doit créer un lien hypertexte
if ($lien ="")
{
echo "<a href = '$lien?code_plat=$code_p'>$libel</A>";
}
else
{
echo $libel;
}

echo "</FONT>";
echo "&nbsp";echo "&nbsp";
echo odbc_result($recordset, "regime");

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 64


echo "&nbsp &nbsp &nbsp quantité : <input type = text name = zt_qte value = 1 size
=2>";
echo "&nbsp &nbsp<input type = submit value = 'ajouter au panier' name =
bt_ajout>";
echo "<BR> Prix : ";
echo odbc_result($recordset, "prix");
echo " € ";
echo "&nbsp";echo "&nbsp";
echo odbc_result($recordset, "type");
echo "&nbsp";echo "&nbsp";
echo odbc_result($recordset, "parts");
echo odbc_result($recordset, "unité");
echo "<BR> Origine : ";
echo odbc_result($recordset, "origine");
echo "<BR>";
//liste des ingrédients du plat
$sql_ing= "select ingredient from r_detail_plats where code_plat='$code_p' order by
ingredient";
$r_ing = odbc_exec($maconnexion, $sql_ing);
$liste_ing = "Ingrédients : ";
$sep = "";
while (odbc_fetch_row($r_ing)==true)
{
$liste_ing = $liste_ing . $sep . odbc_result($r_ing,"ingredient");
$sep = " ; ";
}
echo $liste_ing;
odbc_free_result($r_ing);
echo "<BR><BR>";
echo "</form>";
}
}
?>

Page Valid_panier.php
<?session_start();
$code_client = $_SESSION["s_code"];

$code_p = $_POST["zt_plat"];
$qte = $_POST["zt_qte"];

//compte le nb de produits dans le panier


//compte le nombre de lignes dans la variable session
$n = 0;
if (isset($_SESSION["s_panier"][$n][0]))
{
$n=count($_SESSION["s_panier"]);

}
$flag = 0;
//teste si le produit n'a pas déjà été saisi (flag = 0 si pas saisi, 1 sinon).

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 65


for ($i=0;$i<$n;$i++)
{
if ($_SESSION["s_panier"][$i][1]==$code_p)
{
$flag = 1;
$j = $i;
}
}

if ($flag == 1)
{
$_SESSION["s_panier"][$j][0]=$qte;
}
else
{

//affecte le nouveau produit avec la nouvelle qté


$_SESSION["s_panier"][$n][0]=$qte;
$_SESSION["s_panier"][$n][1]=$code_p;
}

?>
Produit pris en compte dans votre panier
<FORM METHOD=POST ACTION="visu_panier.php">
<INPUT name = bt_valid TYPE="submit" value = "Visualiser le panier">
</FORM>
<a href = 'liste_plats.php'>Retour à la liste de choix</A>
<BR><BR>
<a href = 'menu.php'>Retour au menu</A>

Page visu_panier.php
<?session_start();
require "connexion.php";
//compte le nb de produits dans le panier
//compte le nombre de lignes dans la variable session
$n = 0;
if (isset($_SESSION["s_panier"][$n][0]))
{
$n=count($_SESSION["s_panier"]);
}
if ($n==0)
{

echo "Aucun article sélectionné";


}
else
{

//teste si on a cliqué sur supprimer


if (isset($_REQUEST["codesup"]))
{

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 66


//récupère le code plat à supprimer
$code_sup = $_REQUEST["codesup"];

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 67


//touve le no de la ligne correspondante dans le tableau session
for ($i=0;$i<$n;$i++)
{
if ($_SESSION["s_panier"][$i][1]==$code_sup)
{
$ligne = $i;
}
}
//met la qté à 0 sur la ligne à supprimer
$_SESSION["s_panier"][$ligne][0]=0;
}
//si on a cliqué sur rafraichir, modifie les lignes de cdes passées
if (isset($_POST["bt_rafraichir"]))
{
//pour chaque plat qui était affiché, met à jour la qté
for ($i=0;$i<$n;$i++)
{
$code_plat= $_SESSION["s_panier"][$i][1];
if (isset($_POST["zt_qte$code_plat"]))
{
$qte = $_POST["zt_qte$code_plat"];
}
else
{
$qte=0;
}

$_SESSION["s_panier"][$i][0]= $qte;
}
}
?>
<FORM METHOD=POST ACTION="">

<?
//proc d'affichage du panier de commande
require "proc_affich_panier.php";
affich_panier($maconnexion, $_SESSION["s_panier"]);
?>
<BR>
<INPUT name = bt_rafraichir TYPE="submit" value = "Mise à jour des modifications">
</FORM>

<FORM METHOD=POST ACTION="valid_cde.php">


<INPUT name = bt_valid TYPE="submit" value = "valide la cde">
</FORM>
<?
}
?>
<FORM METHOD=POST ACTION="menu.php">
<INPUT name = bt_valid TYPE="submit" value = "menu">
</FORM>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 68


Fichier proc_affich_panier.php
<?
//procédure qui affiche le panier de commande contenu dans la variable panier
//(variable tableau avec 2 colonnes : code plat et qté).
//nb : cette fonction est spécifique à cette application car elle utilise un recordset spécifique au
//modèle.
function affich_panier($maconnexion, $panier)
{
?>
<TABLE border = 1>
<THEAD> <TR bgcolor=#CCFF99> <TD> Qté </TD> <TD> PLAT </TD> <TD> Prix
</TD><TD> Total </TD>
<TD> </TD>
</THEAD>
<TBODY>
<?
$tot_gal =0;
$n=0;
//compte le nombre de lignes dans le panier
$n = count($panier);
//pour chaque ligne du panier, affiche la qté, le prix, le total
for ($i=0;$i<$n;$i++)
{
$code_plat= $panier[$i][1];
$qte= $panier[$i][0];
//n'affiche la ligne que si la qté est <> de 0
if ($qte!=0)
{
//récupère le libellé du plat
$sql_plat = "select libelle_plat, prix from plats where code_plat = '$code_plat'";
$r_plat = odbc_exec ($maconnexion, $sql_plat);
$plat = odbc_result($r_plat, "libelle_plat");
$prix = odbc_result($r_plat, "prix");
$tot = $prix * $qte;
$tot_gal = $tot_gal + $tot;
$tot = number_format($tot,2);

echo "<TR>";
echo "<TD>";
$nomzt = "zt_qte" . $code_plat;
echo "<input type = text name = $nomzt value = $qte size = 2>" ;
echo "</TD> <TD> ";
echo $plat ;
echo "</TD><TD>";
echo $prix ;
echo "</TD><TD>";
echo $tot . " €" ;
echo "</TD>";
echo "<TD><a href=visu_panier.php?codesup=$code_plat>supprimer</A></TD>";
echo "</TR>";
}

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 69


}
echo "</TBODY> </TABLE>";
$tot_gal = number_format($tot_gal,2);
echo "Total des achats = $tot_gal €";
}
?>

Page valid_cde.php
<?session_start();
$code_client = $_SESSION["s_code"];
require "connexion.php";

//insère la cde
$sql_insert_cde = "INSERT INTO cde (code_client , date_cde) VALUES
('$code_client',Now())";
$r_insert = odbc_exec ($maconnexion, $sql_insert_cde);

//récupère le no de la cde insérée


$sql_no = "select max(no_cde) as no from cde";
$r_no = odbc_exec($maconnexion, $sql_no);
$no = odbc_result($r_no, "no");

//compte le nb de produits dans le panier


$n=0;
//compte le nombre de lignes dans la variable session
while (isset($_SESSION["s_panier"][$n][0]))
{
$n++;
}

//insère chacune des lignes


for ($i=0;$i<$n;$i++)
{
$plat= $_SESSION["s_panier"][$i][1];
$qte= $_SESSION["s_panier"][$i][0];
//n'insère la ligne que si la qté est <> de 0
if ($qte!=0)
{
$sql_insert_ligne = "INSERT INTO ligne_cde VALUES ($no, '$plat', $qte)";
$r_insert_ligne = odbc_exec ($maconnexion, $sql_insert_ligne);
}
}
echo "votre cde a été insérée";

//supprime la variable session panier


unset ($_SESSION["s_panier"]);
?>
<FORM METHOD=POST ACTION="menu.php">
<INPUT name = bt_valid TYPE="submit" value = "menu">
</FORM>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 70


EXERCICE 22 : A partir d’un jeu d’enregistrements, créer une page de trombinoscope. On
doit pouvoir paramétrer le nombre de colonnes par page.

Objectifs : Gestion des images.

Fichier proc_existe.php
<?//fonction qui renvoie la valeur 1 si le nom de fichier transmis en paramètre ($nomfichier)
//existe dans le répertoire transmis en paramètre ($chemin)
function existe ($chemin, $nomfichier)
{
// dossier à parcourir
$dossier = opendir($chemin);
$resu = 0;
while ($Fichier = readdir($dossier))
{
//la fonction strtoupper perte de passer le texte en majuscule
if (strtoupper($Fichier) == strtoupper($nomfichier))
{
$resu = 1;
}
}

return $resu;
}
?>

Fichier Proc_trombi_simple.php
<?
/* procédure qui crée un trombi à partir d'un recordset
NB : les photos doivent avoir le même nom que la clé de la personne
$r_pers = nom du recordset qui contient les individus à placer dans le trombi
$champ = nom du champ à afficher sous la photo

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 71


$fichier = nom du fichier qui contient la fiche d'un individu (pour réaliser un lien hypertexte à
partir du trombi sur la fiche de saisie de l'individu choisi
Si $fichier est null, on ne crée pas de lien hypertexte)
$champ_id = nom du champ qui contient la clé (pour réaliser le lien hypertexte)
$chemin = répertoire où sont stockées les photos
$extension = type de photo (jpg, bmp ...)
$largeur = largeur de la photo (en points)
$hauteur = hauteur de la photo (en points)
$nb_cols = nombre de colonnes à afficher
Exemple : trombi_simple ($r_pers, "nom_individu", "fiche.php", "Numéroindividu",
"http://js-ps/photos/small", "jpg", 70,70, 2);

ATTENTION : cette procédure requiert l'appel à une autre procédure (cf fichier
proc_existe.php)
*/

function trombi_simple ($r_pers, $champ, $fichier, $champ_id, $chemin, $extension,


$largeur, $hauteur, $nbcols)
{
//crée le tableau avec la liste des personnes
echo "<CENTER><TABLE BORDER = 1>";
echo "<TBODY>";
//no de la ligne en cours du recordset
$l = 1;
$c=1;

// crée les lignes du tableau


//la dernière colonne contient la photo
while (odbc_fetch_row($r_pers) == TRUE)
{
if ($c==$nbcols+1 || $c==1)
{
echo ("<TR>");
}
echo ("<TD>");
$tbl = odbc_result ($r_pers, $champ);
//teste si on est sur l'identifiant
If ($fichier !="")
{
$no = odbc_result ($r_pers, $champ_id);
$affich= "<A href= '" . "$fichier?num=$no" . "'> $tbl </A>";
}
else
{
$affich="$tbl";
}
//récupère l'identifiant de la personne pour y associer la photo correspondante
//photo = identifiant dans la table personne
$no = odbc_result ($r_pers, $champ_id);
$nom_image = $no. "." . $extension;

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 72


echo "<CENTER>";
//cherche si l'image existe
if (existe("$chemin", $nom_image))
{
echo "<A href=$fichier?num=$no> <imgsrc=
'$chemin/$no.$extension' width='$largeur' height='$hauteur'></A>";
}
else
{
echo "Pas de photo <BR>";
}
echo "<BR>$affich";
echo "</CENTER>";
echo "</TD>";
if ($c==$nbcols)
{
echo ("</TR>");
$c=1;
}
else
{
$c++;
}
} //fin du test sur le no de ligne
$l++;

echo "</tbody>";
echo "</table>";
}?>

Fichier trombi_simple.php
<?
$conex = odbc_connect("personne","","");
$rpers = odbc_exec( $conex, "select NuméroTriathlète, nom + ' ' + prenom as individu from
personne");
//appel du fichier avec la procédure qui vérifie si le fichier image existe
require "proc_existe.php";
//appel du fichier avec la procédure qui crée la page de trombi
require "proc_trombi_simple.php";
trombi_simple ($rpers, "individu", "", "NuméroTriathlète", "photos/small/", "jpg", 70,70, 2);
?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 73


EXERCICE 23 : A partir d’un jeu d’enregistrements, créer un trombinoscope avec un
nombre variable de pages. On doit pouvoir paramétrer le nombre de colonnes par page.

Objectifs : Gestion des images. Paramétrage dynamique du nombre de pages.

Fichier Trombi_page.php
<?
$conex = odbc_connect("personne","","");
$rpers = odbc_exec( $conex, "select NuméroTriathlète, nom + ' ' + prenom as individu from
personne");
//inclut la procédure de création de trombi.
//cette procédure appelle une sous-procédure qui crée une page de trombi pour un jeu
//d'enregistrements
//la proc crea_trombi sert à donc à calculer le nb de pages à afficher et affiche la page en cours
require "proc_crea_trombi.php";

//calcule le noombre d'enregistrements à placer dans le trombi.


$rnb = odbc_exec($conex,"select count(*) as nb from personne");
$nb = odbc_result($rnb, "nb");

//$num = page du trombi en cours. Si la variable n'est pas paramétrée, on l'initialise à 1.


//il est obligatoire d'utiliser cette variable pour appeler la procédure de creation_trombi
if (!isset($_GET["num"]))
{
$num=1;
}

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 74


else
{
$num=$_GET["num"];
}

//appel de la procédure qui crée le trombi pour la page choisie


creation_trombi ($rpers, "individu", "fiche.php", "NuméroTriathlète", "./photos/small", "jpg",
70,70,3,$nb,12,$num,"trombi_page.php");
?>

Fichier Proc_crea_trombi.php
<?
/* procédure qui crée un trombi à partir d'un recordset
NB : les photos doivent avoir le même nom que la clé de la personne
$r_pers = nom du recordset qui contient les individus à placer dans le trombi
$champ = nom du champ à afficher sous la photo
$fichier = nom du fichier qui contient la fiche d'un individu (pour réaliser un lien hypertexte à
partir du trombi sur la fiche de saisie de l'individu choisi
Si $fichier est null, on ne crée pas de lien hypertexte)
$champ_id = nom du champ qui contient la clé (pour réaliser le lien hypertexte)
$chemin = répertoire où sont stockées les photos
$extension = type de photo (jpg, bmp ...)
$largeur = largeur de la photo (en points)
$hauteur = hauteur de la photo (en points)
$nb_cols = nombre de colonnes à afficher par page
$nb = nb total d'enregistrements
$n_par_page = nombre de personnes à afficher sur une page
$num = LAISSERR $num (correspond à la page en cours du trombi).
$page = page de création du trombi

Exemple : creation_trombi ($r_cl, "nom", "fiche.php", "code_client", "http://js-


ps/photos/small", "jpg", 70,70,2,$nb,5,$num, "trombi.php");

ATTENTION : fonctionner cette procédure fait appel à une autre procédure (cf fichier
proc_trombi.php)
*/

function creation_trombi($r_pers, $champ, $fichier, $champ_id, $chemin, $extension,


$largeur, $hauteur, $nbcols, $nb, $n_par_page,$num, $page)
{
//pour fonctionner cette procédure fait appel à une autre procédure nommée proc_trombi.php
require "proc_trombi.php";
If ($nb == 0)
{
Echo "<CENTER>il n'y a aucun membre.</CENTER> <BR>";
}
else
{

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 75


//calcul du nombre de pages en fonction du nombre d'individus total et du nb d'individus par
page
if (FLOOR($nb /$n_par_page) ==($nb /$n_par_page))
{
$nb_pages = ($nb /$n_par_page);
}
else
{
$nb_pages = ($nb /$n_par_page)+1;

}
//$num = numéro de la page à afficher (no transmis par la balise d'ancre créée sur la page) ou
numéro 1 en premier affichage

if ($num =="")
{
$num =1;
}
//no du 1er enregistrement à afficher sur la page
$deb = ($num * $n_par_page) - $n_par_page +1;
//no du dernier enregistrement à afficher sur la page
$fin = $deb + $n_par_page-1;
echo "<CENTER>";

//Crée une balise d'ancre pour chaque page du trombi


for ($i=1;$i<=$nb_pages; $i++)
{
echo "<A href=$page?num=$i>page $i </A> &nbsp &nbsp";
}
echo "</CENTER>";

//appel de la procédure trombi qui affiche les enregistrements de $deb à $fin


trombi ($r_pers, $champ, $fichier, $champ_id, $chemin, $extension,
$largeur,$hauteur, $deb, $fin,$nbcols);

}
}
?>

Fichier Proc_trombi.php
<?
/* procédure qui crée un trombi à partir d'un recordset
NB : les photos doivent avoir le même nom que la clé de la personne
$r_pers = nom du recordset qui contient les individus à placer dans le trombi
$champ = nom du champ à afficher sous la photo
$fichier = nom du fichier qui contient la fiche d'un individu (pour réaliser un lien hypertexte à
partir du trombi sur la fiche de saisie de l'individu choisi
Si $fichier est null, on ne crée pas de lien hypertexte)
$champ_id = nom du champ qui contient la clé (pour réaliser le lien hypertexte)
$chemin = répertoire où sont stockées les photos
$extension = type de photo (jpg, bmp ...)

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 76


$largeur = largeur de la photo (en points)
$hauteur = hauteur de la photo (en points)
$deb = no de la première ligne du recordset à afficher
$fin = no de la dernière ligne du recordset à afficher
$nb_cols = nombre de colonnes à afficher
Exemple : trombi ($r_pers, "nom_individu", "fiche.php", "Numéroindividu", "http://js-
ps/photos/small", "jpg", 70,70, 1, 16,2);

*/

function trombi ($r_pers, $champ, $fichier, $champ_id, $chemin, $extension, $largeur,


$hauteur, $deb, $fin,$nbcols)
{
//crée le tableau avec la liste des personnes
echo "<CENTER><TABLE BORDER = 1>";
echo "<TBODY>";
//no de la ligne en cours du recordset
$l = 1;
$c=1;

// crée les lignes du tableau


while (odbc_fetch_row($r_pers) == TRUE)
{

if ($l>=$deb && $l<=$fin)


{
if ($c==$nbcols+1 || $c==1)
{
echo ("<TR>");
}
echo ("<TD>");
$tbl = odbc_result ($r_pers, $champ);
//teste si on est sur l'identifiant
If ($fichier !="")
{
$no = odbc_result ($r_pers, $champ_id);
$affich= "<A href= '" . "$fichier?num=$no" . "'> $tbl </A>";
}
else
{
$affich="$tbl";
}

//récupère l'identifiant de la personne pour y associer la photo correspondante


//photo = identifiant dans la table personne
$no = odbc_result ($r_pers, $champ_id);
echo "<CENTER>";
echo "<A href=$fichier?num=$no> <img src='$chemin/$no.$extension'
width='$largeur' height='$hauteur'></A>";

echo "<BR>$affich";

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 77


echo "</CENTER>";
echo "</TD>";
if ($c==$nbcols)
{
echo ("</TR>");
$c=1;
}
else
{
$c++;
}

} //fin du test sur le no de ligne


$l++;
}
echo "</tbody>";
echo "</table>";
}?>

Enoncés_exo_php12.doc Auteurs : J. Steffe. F.Priam 78

Оценить