Regroupement de nos fonctions dans un fichier à part

Pour l'instant, nous n'avons défini que 2 fonctions : les fonctions exit_if_empty() et exit_if_not_integer(). Et nous n'y faisons appel que dans un script : le script insert_action.php. Si plus tard on veut faire appel à ces fonctions dans d'autres scripts du projet Gaming, on pourra :

Cette deuxième solution présente au moins 2 avantages par rapport à la 1ère :

  1. La maintenance du logiciel en sera facilitée. Par exemple si la fonction exit_if_not_integer() doit être corrigée (ou améliorée), il suffira de le faire à un seul endroit (dans le fichier mes_fonctions.inc.php) et tous les scripts qui font appel à cette fonction bénéficieront immédiatement de cette correction (ou amélioration).
  2. Les scripts qui font appel aux fonctions exit_if_empty() et/ou exit_if_not_integer() seront plus courts et plus lisibles.

De plus, la réalisation pratique de cette deuxième solution est très simple. Concrètement il suffit :

On pourra ensuite enrichir le fichier mes_fonctions.inc.php en y rajoutant d'autres définitions de fonctions au fur et à mesure de nos besoins. De cette façon, on centralise les définitions des fonctions auxquelles nos scripts font appel.


mes_fonctions.inc.php (version 1)

Créer le fichier mes_fonctions.inc.php dans le même répertoire que les scripts du projet Gaming et y placer les définitions des fonctions exit_if_empty() et exit_if_not_integer() (faire un simple couper-coller).
N.B. : N'oubliez pas de commencer et de terminer ce fichier par <?php et ?> comme pour n'importe quel autre script PHP.

Dans le fichier insert_action.php faire les 2 modifications suivantes :

  1. Effacer les définitions des fonctions exit_if_empty() et exit_if_not_integer().
  2. Au début du fichier, juste après <?php, placer l'instruction require "mes_fonctions.inc.php";.

Tester cette nouvelle version du script insert_action.php.

Le rôle de l'instruction require "mes_fonctions.inc.php"; est le suivant : au moment où le script insert_action.php est exécuté, l'instruction require "mes_fonctions.inc.php"; est remplacée par le contenu du fichier mes_fonctions.inc.php. Tout se passe donc comme si les définitions des fonctions exit_if_empty() et exit_if_not_integer() étaient encore présentes à l'intérieur même du fichier insert_action.php.


mes_fonctions.inc.php (version 2)

Les scripts select_all.php (affichage de tous les rounds), insert_action.php (insertion d'un nouveau round) et search_action.php (recherche et affichage des rounds trouvés) ont tous besoin de se connecter au serveur MySQL local et de sélectionner une base avant de pouvoir envoyer une requête au serveur. Dans tous ces scripts, il serait donc intéressant de remplacer les instructions de connexion (mysql_connect()) et de sélection d'une base (mysql_select_db()) par une seule instruction qui se charge de tout. Pour cela, il suffit de créer une nouvelle fonction qu'on va appeler connexion() par exemple. En plaçant la définition de cette fonction une seule fois dans le fichier mes_fonctions.inc.php, on pourra ensuite l'utiliser dans tous les scripts du projet.

La fonction connexion() doit :

Fichier mes_fonctions.inc.php :

<?php
error_reporting(E_ALL);

function connexion()
{
	$db_link = mysql_connect("localhost","mon_username","mon_password")
                      or die(mysql_error());
	mysql_select_db("ma_base",$db_link) or die(mysql_error());
	return $db_link;
}

function exit_if_empty($champ,$nom_du_champ)
{
	...
}

function exit_if_not_integer($champ,$nom_du_champ)
{
	...
}

?>

Dans les scripts select_all.php, insert_action.php et search_action.php :

  1. Au début du script, juste après <?php, placer l'instruction require "mes_fonctions.inc.php";.
    N.B. : C'est déjà fait pour le fichier insert_action.php.
  2. Supprimer l'instruction error_reporting(E_ALL);.
  3. Remplacer les instructions de connexion et de sélection de la base "gaming" par l'instruction $db_link = connexion();.

Tester ces nouvelles versions des scripts select_all.php, insert_action.php et search_action.php.


mes_fonctions.inc.php (version 3)

Les scripts select_all.php (affichage de tous les rounds) et search_action.php (recherche et affichage des rounds trouvés) affichent tous les deux un tableau HTML qui contient les rounds renvoyés par une requête SELECT. Là aussi, il peut être utile de créer une fonction (qu'on va appeler show_rounds()) qui se charge d'afficher ce tableau à partir de l'identifiant de résultat renvoyé par la fonction mysql_query().

Pour la fabrication de la fonction show_rounds(), procèder de la façon suivante :

  1. Dans le fichier mes_fonctions.inc.php, placer la définition de fonction suivante (vide pour l'instant) :
    <?php
    error_reporting(E_ALL);
    
    function connexion()
    {
    	...
    }
    
    # Pour l'instant cette fonction ne fait rien !
    function show_rounds($result)
    {
    	return;
    }
    
    function exit_if_empty($champ,$nom_du_champ)
    {
    	...
    }
    
    function exit_if_not_integer($champ,$nom_du_champ)
    {
    	...
    }
    
    ?>
    
  2. Dans le script select_all.php, couper tout le texte (code HTML et PHP) allant de la balise ouvrante <TABLE> à la balise fermante </TABLE> et le coller dans le fichier mes_fonctions.inc.php juste avant l'instruction return; de la fonction show_rounds().
  3. Supprimer le <?php et le ?> situés autour de la structure de contrôle while.
  4. Augmenter d'un niveau l'indentation de tout le texte qui vient d'être collé (il doit se retrouver au niveau de l'instruction return;). On a maintenant quelque chose qui ressemble à :
    <?php
    
    ...
    
    // Affichage sous forme de tableau HTML des rounds
    // contenus dans l'identifiant de résultat $result
    function show_rounds($result)
    {
    	<TABLE BORDER="3">
    	<TR>
    	<TH>Date</TH>
    	<TH>Round</TH>
    	...
    	</TR>
    	while ($row = mysql_fetch_assoc($result)) {
    		echo "<TR>";
    		echo "<TD>" . $row['date'] . "</TD>";
    		echo "<TD>" . $row['num_round'] . "</TD>";
    		...
    		echo "</TR>";
    	}
    	</TABLE>
    	return;
    }
    
    ...
    
    ?>
    
  5. Attention, la fonction ci-dessus n'est pas syntaxiquement correcte ! Il faut maintenant placer les balises HTML <TABLE border="3">, <TR>, <TH>, etc ... dans des chaînes de caratères qu'on envoie au navigateur à l'aide d'instructions echo :
    <?php
    
    ...
    
    // Affichage sous forme de tableau HTML des rounds
    // contenus dans l'identifiant de résultat $result
    function show_rounds($result)
    {
    	echo "<TABLE border=\"3\">\n";
    	echo "<TR>";
    	echo "<TH>Date</TH>";
    	echo "<TH>Round</TH>";
    	...
    	echo "</TR>\n";
    	while ($row = mysql_fetch_assoc($result)) {
    		echo "<TR>";
    		echo "<TD>" . $row['date'] . "</TD>";
    		echo "<TD>" . $row['num_round'] . "</TD>";
    		...
    		echo "</TR>\n";
    	}
    	echo "</TABLE>\n";
    	return;
    }
    
    ...
    
    ?>
    
  6. Modifier le script select_all.php pour qu'il affiche, à l'aide de la fonction show_rounds(), la liste de tous les rounds. Tester.
    Tiens, la fonction show_rounds() ne semble pas fonctionner correctement !
  7. Corrigez ce dernier problème en vous aidant des messages d'erreurs et/ou warnings générés par l'interpréteur PHP (à condition bien sûr que vous ayez pris soin de placer l'instruction error_reporting(E_ALL); au début du fichier mes_fonctions.inc.php). Tester à nouveau.

Voilà, la fonction show_rounds() est prête ! On peut maintenant l'appeler dans tous les scripts du projet Gaming qui doivent afficher la liste des rounds renvoyés par le serveur MySQL en réponse à une requête SELECT.

Modifier le script search_action.php pour qu'il affiche, à l'aide de la fonction show_rounds(), la liste des rounds trouvés. Tester.


Page d'accueil de Hervé PagèsValid HTML 4.01!Contact : herve.pages@free.fr