Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Langage, bibliothèques et fonctions > Enregistrer et lire des données de fichiers .ini > Les bases > Récupérer une valeur > Lecture du tutoriel

Récupérer une valeur

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Kyle Katarn
Visualisations : 1 057

Plus d'informations Plus d'informations
Nous allons désormais afficher, à l'aide d'un code PHP, une valeur prélevée dans un fichier .ini grâce à vos nouvelles connaissances !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Création du code PHP

Très bien : je vous suggère pour vos essais d'utiliser le fichier dans cette archive :
http://kyle.katarnls.free.fr/fichier_ini.zip, de mettre membres.ini au même endroit que votre fichier .php.

Avant de vous donner le code de votre fichier .php (qui, je le rappelle, doit afficher une valeur du fichier), nous allons réfléchir à ce qu'il y aura dans ce code. Tout d'abord, une valeur est à un endroit précis, on peut dire à une adresse où le nom du fichier serait la ville, le nom du groupe serait la rue et le nom de l'item serait le numéro de la maison. Donc, les trois premières lignes auront pour but de donner l'adresse avec ces trois variables (vous pouvez vous amuser à créer un formulaire pour les entrer). Puis la quatrième ligne initialisera la valeur à false : comme ça, si à la fin cette variable vaut toujours false, c'est qu'aucune valeur n'a été trouvée, et on pourra afficher un message d'erreur.

Donner l'adresse


On entre le nom du fichier, du groupe, de l'item et on initialise $valeur à false.
Si après recherche, $valeur vaut toujours false, cela voudra dire que notre adresse ne mène à aucune valeur.
Code : PHP
1
2
3
4
5
6
<?php
$fichier="membres.ini";
$groupe_recherche="Louise";
$item_recherche="code postal";
$valeur=false;
?>


Vérifier que le fichier existe


Code : PHP
1
2
3
4
5
6
7
<?php
// Si le fichier existe et qu'on arrive à le lire avec file()
if(file_exists($fichier) && $fichier_lecture=file($fichier))
  // Ici on lance la recherche
else
  echo "Le fichier est introuvable ou incompatible<br />";
?>


La recherche


Attention, voici le plus gros morceau à mettre à la place du commentaire # // Ici on lance la recherche # dans le précédent code :
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
   foreach($fichier_lecture as $ligne)
   {
     if(preg_match("#^\[.+)\]\s+$#",$ligne,$matches))
        $groupe=$matches[1];
     else
        if($ligne[0]!=';')
            if($groupe==$groupe_recherche && preg_match("#^".preg_quote($item_recherche, "#")."=#",$ligne))
                $valeur=end(explode("=",$ligne,2));
   }
?>

On me souffle dans l'oreillette que je n'ai pas définit les fonctions explode() et end()
Merci à Lo-X !

explode("=",$ligne,2) découpe la chaîne $ligne à chaque fois qu'il trouve "=" et renvoie un array avec un morceau par entrée. 2 est le nombre maximal de morceau qu'il doit renvoyer. Enfin la fonction end() qui encapsule le tout renvoie la dernière valeur de l'array : Dans le cas présent il s'agit de récupérer tout ce qui suit le premier signe =.

Une alternative avec les expressions régulières :
Code : PHP
1
2
3
<?php
$valeur=preg_replace('#^[^=]+=$#','',$ligne);
?>

Bref, explication du code :
On lit chaque ligne du fichier : le premier preg_match() détecte la présence d'un groupe. Si c'en est un, on stocke sa valeur dans $groupe. $groupe contient donc toujours le groupe en cours de lecture.
La condition $ligne{0}!=';' vérifie que l'on n'est pas en train de lire un commentaire (que le premier caractère de la ligne n'est pas un point-virgule).
Et le dernier preg_match() compare le nom de l'item avec celui qui est recherché ; si c'est le cas et que le groupe courant est celui de l'adresse, alors on entre la valeur de l'item dans $valeur.
o_O Mais... et si ma ligne n'est ni un item ni un groupe, ni un commentaire ?
Eh bien justement, ce qui n'est ni un commentaire ni un groupe EST un item.
Exemple : la ligne ressource>52.
Ici, on considère que le nom de l'item est "ressource>52" et que la valeur est "" (une chaîne vide).
Retenez bien ceci :


Afficher le résultat


On peut terminer le code en affichant la valeur trouvée s'il y en a une, et un message d'erreur s'il n'y en a pas :
Code : PHP
1
2
3
4
5
6
<?php
if($valeur===false)
  echo "Groupe ou item inexistant";
else
  echo "Valeur trouvée : ".$valeur;
?>

Le code PHP

Et voilà le code complet :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$fichier="membres.ini";
$groupe_recherche="Louise";
$item_recherche="code postal";
$valeur=false;
if(file_exists($fichier) && $fichier_lecture=file($fichier))
   foreach($fichier_lecture as $ligne)
   {
     if(preg_match("#^\[(.+)\]\s+$#",$ligne,$matches))
        $groupe=$matches[1];
     else
        if($ligne[0]!=';')
            if($groupe==$groupe_recherche && preg_match("#^".preg_quote($item_recherche, "#")."=#",$ligne))
                $valeur=end(explode("=",$ligne,2));
   }
else
echo "Le fichier est introuvable ou incompatible<br />";
 
if($valeur===false)
echo "Groupe ou item inexistant";
else
echo "Valeur trouvée : ".$valeur;
?>

Vous pouvez tester ce code en cliquant ici

Formulaire de sélection

Certains ont peut-être déjà essayé de rajouter un formulaire pour choisir l'adresse. Et comme au final, je vous ferai faire un big formulaire avec toutes les manipulations possibles ( :euh: mais non ne vous découragez pas), alors voici comment faire.

Le début du fichier


Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
if(isset($_POST["envoyer"]))
{
  $fichier=$_POST["fichier"];
  $groupe_recherche=$_POST["groupe"];
  $item_recherche=$_POST["item"];
  $valeur=false;
  if(file_exists($fichier) && $fichier_lecture=file($fichier))
     foreach($fichier_lecture as $ligne)
     {
       if(preg_match("#^\[.+\]$#",$ligne=preg_replace("#\s$#","",$ligne)))
          $groupe=substr($ligne,1,-1);
       else
          if(!preg_match("#^\;#",$ligne))
              if($groupe==$groupe_recherche && preg_match("#^".preg_quote($item_recherche, "#")."=#",$ligne))
                  $valeur=end(explode("=",$ligne,2));
     }
  else
    echo "Le fichier est introuvable ou incompatible<br />";
  
  if($valeur===false)
    echo "Groupe ou item inexistant";
  else
    echo "Valeur trouvée : ".$valeur;
}
?>


La suite du fichier


Code : HTML
1
2
3
4
5
6
7
8
<form method="post" action="">
<fieldset><legend>Adresse de la valeur recherchée</legend>
<label>Fichier : <input type="text" name="fichier" /></label><br />
<label>Groupe : <input type="text" name="groupe" /></label><br />
<label>Item : <input type="text" name="item" /></label><br />
<input type="submit" name="envoyer" value="Rechercher" />
</fieldset>
</form>

Pour essayer ce script, cliquez ici

Vous savez désormais afficher une valeur issue d'un .ini, vous pouvez passer à l'écriture !
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 10/06/2007 à 23:05:56
Modifié : le 26/08/2008 à 10:36:32
Avancement : 0%
Licence : Copie non autorisée

L'orthographe, la grammaire et la présentation de ce tutoriel ont été vérifiées par les zCorrecteurs.

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 558 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0701s (0.0535s)