Le logo de PHP 5  PHP 5 Cours et exercices  2e Edition La couverture du livre PHP 5

Jean ENGELS       Editions Eyrolles

Chapitre 7: Les fonctions

Exercice 1

Créez une fonction PHP qui affiche une boîte d'alerte à partir de la fonction JavaScript dont la syntaxe est alert("chaine_de caractères"). Cette fonction peut être appelée avec comme paramètre le texte du message à afficher. Elle est particulièrement utile pour afficher des messages d’erreur de manière élégante, sans que ces derniers restent écrits dans la page. La fonction retourne la valeur TRUE. Ceci n’est pas obligatoire mais peut permettre un contrôle d’exécution.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title> Chapitre 7 Exercice 1 </title>
</head>
<body>
<?php
function alerte($ch)
{
echo "<script type=\"text/javascript\"> alert('$ch'); </script>";
return TRUE;
}
//Utilisation
if(alerte("Bonjour à tous")) echo "La fonction alerte() fonctionne
bien";
alerte('RAAAAAAAAAAAAAAAAAA');
?>
</body>
</html>
Voir le résultat

Exercice 2

Écrivez une fonction de lecture de tableaux multidimensionnels en vous inspirant de l’exemple 7.3. L'affichage se fait sous forme de tableau HTML dont les titres sont les clés des tableaux.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Fonction de lecture de tableaux multidimensionnels</title>
</head>
<body>
<?php
//Définition de la fonction
function tabmulti($tab,$bord)
{
echo "<table border=\"$bord\" width=\"100%\"><tbody>";
foreach($tab as $cle=>$tab2)
{
echo "<tr><th>$cle</th> ";
foreach($tab2 as $ind=>$val)
{
echo "<td>$val </td>";
}
echo "</tr>";
}
echo "</tbody> </table>";
}
//Définition des tableaux
$tab1 =
array("France"=>array("Paris","Lyon","Marseille","Nantes","Lille"),
"Allemagne"=>array("Berlin","Hambourg","Hanovre","Munich","Cologne"
),
"Espagne"=>array("Madrid","Bilbao","Grenade","Barcelone","Séville")
);
//Appel de la fonction
tabmulti($tab1,1);
?>
</body>
</html>
Voir le résultat

Exercice 3

Écrivez une fonction qui retourne la somme de la série de terme général un = x2n + 1/n!. Les paramètres de la fonction sont n pour le nombre d’itérations et d pour le nombre de décimales affichées pour le résultat. Il est possible de réutiliser la fonction prod() présentée dans ce chapitre pour calculer la factorielle n!.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Fonction de calcul de la somme des termes d'une suite</title>
</head>
<body>
<?php
//Définition de la fonction
function somme($n,$d,$x)
{
$som=0;
$fact=1;
for($i=0;$i<=$n;$i++)
{
//Calcul de factorielle de $i
if($i==0) {$fact=1 ;}
else {$fact*=$i;}
//Calculde la somme
$som+= (pow($x,2*$i+1))/$fact;
//echo $som,"
"; } return round($som,$d); } //Utilisation echo somme(10,6,1); ?> </body> </html>
Voir le résultat

Exercice 4

Écrivez une fonction dont le paramètre passé par référence est un tableau de chaînes de caractères et qui transforme chacun des éléments du tableau de manière que le premier caractère soit en majuscule et les autres en minuscules, quelle que soit la casse initiale des éléments, même si elle est mixte.

<?php
//Définition de la fonction
function initmaj(&$tab)
{
foreach($tab as $ind=>$val)
{
$tab[$ind]=ucfirst(strtolower($val));
}
return $tab;
}
//Utilisation
$tabch= array("AzertToTO","Sous peAu","sARtHES jp");
print_r(initmaj($tabch));
?>
Voir le résultat

Exercice 5

À partir de la fonction sinus de PHP, écrivez une fonction qui donne le sinus d’un angle donné en radian, en degré ou en grade. Les paramètres sont la mesure de l’angle et l’unité est symbolisée par une lettre. Le deuxième paramètre doit avoir une valeur par défaut correspondant aux radians.

<?php
//Définition de la fonction
function sinus($x,$unit)
{
switch($unit)
{
case "R":
case"r":
return sin($x);
break;
case "D":
case"d":
return sin($x/180*PI());
break;
case "G":
case"g":
return sin($x/200*PI());
break;
}
}
//Utilisation
echo sinus(PI()/6,R),"<br />";
echo sinus(60,d),"<br />";
echo sinus(100,g),"<br />";
?>
Résultats affichés :
0.5
0.866025403784
1
Voir le résultat

Exercice 6

Créez une fonction de création de formulaires comprenant une zone de texte, une case d’option (radio button), un bouton Submit et un bouton Reset. Choisissez comme paramètres les attributs des différents éléments HTML en cause. Chaque appel de la fonction doit incorporer le code XHTML du formulaire à la page.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Fonction de création de formulaire</title>
</head>
<body>
<?php
//Définition de la fonction
function
form($action,$methode,$libtexte,$nomtexte,$libradio,$nomradio,$valradio,$libsubmit,$libreset)
{
$code ="<form action=\"$action\" method=\"$methode\" >";
$code.="<fieldset>Complétez";
$code.="<label><b> $libtexte </b></label> <input type=\"text\" name=\"$nomtexte\" /><br />";
$code.="<label><b> $libradio </b></label><input type=\"radio\" name=\"$nomradio\" value=\"$valradio\" /><br />";
$code.="<input type=\"submit\" value=\"$libsubmit\"/>   ";
$code.="<input type=\"reset\" value=\"$libreset\" /><br />";
$code.="</fieldset>";
$code.="</form>";
return $code;
}
//Utilisation
echo form("machin.php","post","Nom","nom","Abonné","abonn","oui","Envoi","Effacer");
echo form("truc.php","post","Loisirs","loisir","Amateur","amat","oui","Envoi","Effacer");
?>
</body>
</html>

Voir le résultat

Exercice 7

Décomposez la fonction précédente en plusieurs fonctions de façon à constituer un module complet de création de formulaire. Au total, il doit y avoir: une fonction pour l’en-tête du formulaire, une pour le champ texte, une pour la case d’option, une pour les boutons Submit et Reset et une pour la fermeture du formulaire. Incorporez ces fonctions dans un script, et utilisez-les pour créer un formulaire contenant un nombre quelconque de champ de saisie de texte et de cases d’option.

Le fichier ch7exo7.php contient le code des fonctions :

<?php
//Définition de la fonction form
function form($action,$methode,$legend)
{
$code ="<form action=\"$action\" method=\"$methode\" >\n";
$code.="<fieldset><legend>$legend</legend>\n";
return $code;
}
//Définition de la fonction text
function text($libtexte,$nomtexte)
{
$code="<label><b> $libtexte </b></label> <input type=\"text\" name=\"$nomtexte\" /><br />\n";
return $code;
}
//Définition de la fonction radio
function radio($libradio,$nomradio,$valradio)
{
$code="<label><b> $libradio </b></label><input type=\"radio\" name=\"$nomradio\" value=\"$valradio\" />
\n"; return $code; } //Définition de la fonction submit function submit($libsubmit,$libreset) { $code.="<input type=\"submit\" value=\"$libsubmit\"/>   \n"; $code.="<input type=\"reset\" value=\"$libreset\" /><br />\n"; return $code; } //Définition de la fonction finform function finform() { $code="</fieldset></form>\n"; return $code; } ?>
Le fichier ch7exo7b.php inclus le code des fonctions et l’utilise pour créer un formulaire.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Fonctions de création de formulaire
</head>
<body>
<?php
//Inclusion des fonctions
include('ch7exo7.php');
//Utilisation
$code= form("machin.php","post","Complétez le formulaire");
$code.= text("Votre nom","nom");
$code.= text("Votre prénom","prenom");
$code.= radio("Paris","ville","paris");
$code.= radio("Lyon","ville","lyon");
$code.= submit("Envoyer","Effacer");
$code.= finform();
echo $code;
?>
</body>
</html>
Voir le résultat

Exercice 8

Réaliser la programmation des coefficients du binôme (ou triangle de Pascal). Pour mémoire, il s'agit de la suite suivante: 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Etc......
En remarquant que la première colonne et la diagonale valent toujours 1 et que chaque autre élément est égal à la somme de celui qui est au dessus et de celui qui se trouve sur la diagonale gauche (exemples 3=2+1 ou 6=3+3).

<?php
function pascal($i,$j)
{
//$i la ligne et $j la colonne du triangle
if($j==1 OR $i==$j-1) return 1;
else
{
$coeff= pascal($i-1,$j) + pascal($i-1,$j-1);
return $coeff;
}
}
//Utilisation de la fonction pascal() au degré 7 et affichage du triangle de Pascal
for($i=0;$i<=7;$i++)
{
for($j=1;$j<=$i+1;++$j)
{
        echo pascal($i,$j),"  ";
}
echo "<br />";
}
?>
Voir le résultat