Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2007, 18h40   #1
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Par défaut Recherche et affichage de nom à partir d'un fichier.txt

Bonjour;
j'ai une liste dans un fichier.txt qui se présente sous cette forme:
ff:ff:ff:abcde:1170889672
rtyu:ddfsdf:fdgf:gigi:1170889692
ryu:fdd:dfd:cirtey:1170889710

Je souhaite afficher une ligne entière grâce au $_POST de son premier élement.
Le code que j'ai fait marche mais il a un défaut.
Je ne peux pas afficher un message d'erreur dans le cas ou le prmier élement ne se trouve pas dans la liste.
En fait je souhaite afficher le message suivant: "nom inexistant dans la liste" si le premier élément est inexistant dans la liste.
(j'ai réussi à afficher ce message mais il se répète à cause de la boucle).
Merci.

Code X :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!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>Consultation</title>
</head>
<body style="background-color: #ffcc00;">
<form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" >
<fieldset>
  
<p align="center"><strong><font size="+2" face="Verdana, Arial, Helvetica, sans-serif">Pour 
  afficher les coordonn&eacute;es d'une personne, saisir son nom et valider:</font></strong></p>
<p align="center"><font size="+2" face="Verdana, Arial, Helvetica, sans-serif"> 
  <legend></legend>
  </font></p>
<p align="center"> <strong>Nom de la personne enregistr&eacute;e:<br>
  </strong>&nbsp; <br>
  <input type="text" name="nom" width="60" />
  <br>
  <br>
  <input type="submit" value="Envoyer " name="envoi" />
  <br>
<p align="center">
<?php 
if(isset($_POST['envoi']))
{
if (isset($_POST['nom']) && ($_POST['nom'] != ""))
    {
	    if (file_exists("clients.txt"))
        {
            if($id_file=fopen("clients.txt","r")) 
            {
            flock($id_file,1); 
			$i = 0 ;
	        $tab = file("clients.txt");
				for ($i = 0 ; $i < count ($tab); $i++) // parcourir le fichier
                {
		            $datum = explode (":", $tab[$i]);
					if ($_POST["nom"] == $datum[0])
				    {
	                echo "<b>Client N°".$i."<br></b>";
	                echo "Nom: ",$datum[0],"<br>";
	                echo "Prénom: ",$datum[1],"<br>";
	                echo "E-mail: ",$datum[2],"<br>";
	                echo "Mot de passe: ",$datum[3],"<br>";
	                echo "Date d'inscription: ".date("d/m/y", $datum[4])."<br>";
	                echo "<br>" ;
					}
			     }		
	       flock($id_file,3); 
		   fclose($id_file);
		   }
           else {echo "Le fichier où se trouve le nom est actuellement utilisé pour le moment, réessayez plus tard.";}   
        }
    else {echo "Le fichier où se trouve le nom n'existe pas ou plus.";}
	}
else {echo "Saissisez le nom s'il vous plaît.";}
}					   
?>
</body>
</html>
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2007, 05h32   #2
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
Tu as essayé de rajouter une condition dans ta boucle for du genre

Code :
1
2
3
4
5
6
7
8
9
 
if (empty($tab[$i]))
{
  //Ton message
  echo "nom inexistant dans la liste";
 
  //on arrête la boucle
  break;
}
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2007, 15h17   #3
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Salut cysboy;
j'ai essayé ta solution, elle ne fonctionne pas.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2007, 15h29   #4
Membre à l'essai
 
Inscription : janvier 2003
Messages : 28
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 28
Points : 21
Points : 21
Salut,

Je pense qu'en ajoutant tout simplement un booléen tu y arriveras sans problème. Voilà le code que je te propose :
Code :
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
<?php 
if(isset($_POST['envoi']))
{
if (isset($_POST['nom']) && ($_POST['nom'] != ""))
	{
		if(file_exists("clients.txt"))
		{
			if($id_file=fopen("clients.txt","r")) 
			{
				flock($id_file,1); 
 
				$tab = file("clients.txt");
 
				$nb = count($tab);
				$trouve = FALSE;
 
				for($i=0 ; $i<$nb && !$trouve ; $i++) 	// parcourir le fichier
               			{
					$datum = explode (":", $tab[$i]);
 
					if($_POST["nom"] == $datum[0])
					{
						echo "<b>Client N°".$i."<br></b>";
						echo "Nom: ",$datum[0],"<br>";
						echo "Prénom: ",$datum[1],"<br>";
						echo "E-mail: ",$datum[2],"<br>";
						echo "Mot de passe: ",$datum[3],"<br>";
						echo "Date d'inscription: ".date("d/m/y", $datum[4])."<br>";
						echo "<br>" ;
 
						$trouve = TRUE;
					}
				}		
 
				flock($id_file,3); 
				fclose($id_file);
 
				if(!$trouve)
				{
					echo "nom inexistant dans la liste";
				}
			}
			else
			{
				echo "Le fichier où se trouve le nom est actuellement utilisé pour le moment, réessayez plus tard.";
			}
		}
		else
		{
			echo "Le fichier où se trouve le nom n'existe pas ou plus.";
		}
	}
	else
	{
		echo "Saissisez le nom s'il vous plaît.";
	}
}					   
?>

Le booléen dont je te parle est appelé $trouve :
on l'initialise à FALSE avant la recherche, et si on trouve une correspondance, on le passe à TRUE. (ce qui a pour effet, de plus, d'arrêter la boucle)

A la fin de la boucle, on teste sa valeur pour savoir si une valeur a été trouvée ou non
defkid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2007, 16h32   #5
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Salut defkid;
La solution du booléen marche.
Je sentais qu'il fallait mettre un booléen mais je ne savais pas qu'on pouvais le mettre dans la condition de la boucle for (je suis tout nouveau dans le dev).
Merci defkid
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2007, 16h51   #6
Membre à l'essai
 
Inscription : janvier 2003
Messages : 28
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 28
Points : 21
Points : 21
En fait, la deuxième expressions dans la structure for est évaluée à chaque itération. Si elle est vraie, alors la boucle continue, sinon, elle s'arrête.

Tu peux donc mettre ce que tu veux ici, à condition que ça soit une expression booléenne valide.

Voilà la doc officielle : http://fr.php.net/manual/fr/control-structures.for.php


Ah, autre chose : je pense que tu dois pouvoir te passer du flock(). En effet, quand tu ouvres ton fichier avec l'option "r", il est ouvert en lecture seule. Quelqu'un de plus expérimenté que moi pourra certainement confirmer.
defkid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2007, 17h24   #7
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Merci, c'est utile ce lien.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h10.


 
 
 
 
Partenaires

Hébergement Web