Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 02/09/2011, 17h36   #1
Invité régulier
 
Inscription : février 2009
Messages : 40
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 40
Points : 6
Points : 6
Par défaut Problème de lecture dans un fichier

Bonjour,
je viens vers vous car je n'arrive plus à y voir clair...
Ca doit être simple mais je ne trouve pas.
J'ai un calendrier qui envoit des dates, heures et noms, dans un fichier "texte0.php" recevant ces infos.
Chaque date crée une référence ($timestamp)...
(Par exemple le timestamp 1317160800 correspond au : 28/ 09/ 2011)
Tout se passe bien, les dates, heures, infos parviennent bien dans le fichier "texte0.php" mais j'ai un problème avec ma fonction de "recherche" dans ce fichier.
Je n'arrive pas à isoler les lignes correspondantes à ce timestamp => dans le fichier "texte0.php" en relecture.
Si je recherche : le timestamp 1317160800, j'ai le nombre de fois qu'il est trouvé, mais tous les timestamp ou très peu s'affichent alors que je voudrais que s'affichent uniquement les timestamp concernés (par ex : 1317160800).
Pour exemple du résultat souhaité après clic sur mon bouton "rechercher" :

timestamp N°1317160800-> trouvé : 2 / fois =>
28/ 09/ 2011 de 9 h 00 à 10 h00 Mr Duran
28/ 09/ 2011 de 13 h 00 à 15 h00 Mr Bidule

Alors que je n'arrive qu' a avoir toutes les dates ou aucune selon comment je règle : fgets($fp, '...'
Le bout de code parlera peut être plus que moi...(!!!)
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
 
<form method="POST">
    Référence date : <input type="text" name="ref" value="<?php print $timestamp; ?>"/><br/>
    <input type="submit" value="Rechercher" />
<?php
	if (!empty($_POST['ref'])) {
define('FICHIER', 'texte0.php');
    $resultats =array();
    @ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
    while (!feof($fp)) {
        $ligne = fgets($fp, '224');
        if (preg_match('|\b' . preg_quote($_POST['ref']) . '\b|i', $ligne))  {
            $resultats[] = $ligne;
        }
    }
		    fclose($fp);
    $nb = count($resultats);
    if ($nb > 0 ) {
		echo "<ul><li><div style='background:#88C678;border:dashed 1px blue;'><span style='color:#000033;'><u><b>CETTE REFERENCE DE DATE A ETE TROUVEE ! VEUILLEZ VERIFIER.</b></u></span> </div></li>";
        echo "'$ref' trouvé $nb fois : "; print '<br />'; 
        foreach ($resultats as $v);  {
            echo "$v";
        }
 
    } else {
        echo("<br/><font color='#336633'>CETTE SALLE A CETTE DATE NE FAIT PAS ENCORE L'OBJET D'UNE RESERVATION.</font><br/>
		Vous pouvez proposer votre réservation en toute tranquilité.<br/>");
 
    }
 
}
Merci par avance si vous souhaitez m'aider un peu...
noviceman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 17h51   #2
Membre Expert
 
Avatar de David Guillot
 
Homme David Guillot
Chef de projet en SSII
Inscription : mars 2004
Messages : 879
Détails du profil
Informations personnelles :
Nom : Homme David Guillot
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2004
Messages : 879
Points : 1 149
Points : 1 149


Quelle est la tête de ton fichier texte0.php ? Est-il gros ? S'il ne l'est pas, lis-le avec file_get_contents. Effectue ta recherche avec une regex
__________________
Avant de poser une question ici :

Après résolution de votre question : un clic sur , un et un vote pour les personnes qui vous ont aidé
David Guillot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h30   #3
Futur Membre du Club
 
Homme
Inscription : septembre 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : septembre 2011
Messages : 15
Points : 18
Points : 18
Oui, le plus simple pour t'aider serait de voir l'ensemble de ton code.
Sam__ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 16h02   #4
Invité régulier
 
Inscription : février 2009
Messages : 40
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 40
Points : 6
Points : 6
Merci pour ces conseils.
Le fichier de stokage est pas "super gros" mais il pourra contenir tout de même genre 600 ko en pointe...
Je vais aller voir sur "manuel php" ce qu'il en retourne à ce propos =>(file_get_contents)...
L'ensemble de mon script ?
Euh c'est en 4 parties le // 'calendrier' // 'envoi' // 'reçoit' // et fichier de stokage 'texte0.php' //
Cette partie c'est le fichier 'envoi' en fait...(c'est peut être pas super bien écrit, mais bon, autodidacte quoi... :-)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
 
<form action="recoit-y-c4_2.php" method="POST" >
 
<input type"text" name="infos" value="
<?php
   $date = priv_reg_glob_calendar('date');
	if ($date == '') {
 print
	$month;
	}
	else { 
	 ?> <br /><br /><?php
	print 'DATE :  ';
	 print
		$day 		= substr($date, 6, 2);print '/'; 
		print ' '; print  
		$month 		= substr($date, 4 ,2); print '/';
	print  ' '; print
		$year		= substr($date, 0 ,4);print '--->';
print  ''; print 'Référence : '; print $timestamp 	= mktime(0, 0, 0, $month, $day, $year); print '--->'; ?><?php print  'De : '; ?>">
 
 		<select name="liste1"> 
<option value="9 heures">9 heures
<option value="10 heures">10 heures 
<option value="11 heures">11 heures
<option value="12 heures">12 heures
<option value="13 heures">13 heures
<option value="14 heures">14 heures
<option value="15 heures">15 heures
<option value="16 heures">16 heures
<option value="17 heures">17 heures
<option value="18 heures">18 heures
</select>
		<select name="liste2"> 
<option value="00 mn A ">00 mn
<option value="15 mn A ">15 mn 
<option value="30 mn A ">30 mn
<option value="45 mn A ">45 mn
 A : 
</select>
 
 		<select name="liste3"> 
<option value="9 heures">9 heures
<option value="10 heures">10 heures 
<option value="11 heures">11 heures
<option value="12 heures">12 heures
<option value="13 heures">13 heures
<option value="14 heures">14 heures
<option value="15 heures">15 heures
<option value="16 heures">16 heures
<option value="17 heures">17 heures
<option value="18 heures">18 heures
</select>
		<select name="liste4"> 
<option value="00 mn">00 mn
<option value="15 mn">15 mn 
<option value="30 mn">30 mn
<option value="45 mn">45 mn
 
</select>
-La salle sera retenue <input type"text" name="personnel" value="Salle retenue par ->    <?php
print ' (nom du responsable) <br/>---------------------------<br />' ?>">
<?php
	if(empty($personnel)){ print 'vous n avez pas rempli tous les champs'; } else { print 'ok'; }
	 ?>
		 	<input type="submit" value="Valider">
</form>
<form method="POST">
    Référence date : <input type="text" name="ref" value="<?php print $timestamp; ?>"/><br/>
    <input type="submit" value="Rechercher" />
 
 
 
	<?php
	if (!empty($_POST['ref'])) {
define('FICHIER', 'texte0.php');
    $resultats =array();
    @ $fp = fopen(FICHIER, 'r') or die('Ouverture en lecture de "' . FICHIER . '" impossible !');
    while (!feof($fp)) {
        $ligne = fgets($fp, '224');
        if (preg_match('|\b' . preg_quote($_POST['ref']) . '\b|i', $ligne))  {
            $resultats[] = $ligne;
        }
    }
		    fclose($fp);
    $nb = count($resultats);
    if ($nb > 0 ) {
		echo "<ul><li><div style='background:#88C678;border:dashed 1px blue;'><span style='color:#000033;'><u><b>CETTE REFERENCE DE DATE A ETE TROUVEE ! VEUILLEZ VERIFIER.</b></u></span> </div></li>";
        echo "'$ref' trouvé $nb fois : "; print '<br />'; 
        foreach ($resultats as $v);  {
            echo "$v";
        }
 
    } else {
        echo("<br/><font color='#336633'>CETTE SALLE A CETTE DATE NE FAIT PAS ENCORE L'OBJET D'UNE RESERVATION.</font><br/>
		Vous pouvez proposer votre réservation en toute tranquilité.<br/>");
 
    }
 
}
 
?>
</form>
 
</div><!-- fin css = y-c1 -->
noviceman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2011, 19h56   #5
Invité régulier
 
Inscription : février 2009
Messages : 40
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 40
Points : 6
Points : 6
@David
Effectivement, c'est une bonne piste... Par rapport à ça j'ai écrit :
Code :
<?php $fh = fopen("texte0.php", "r"); $file = file_get_contents("texte0.php"); echo $file; ?>
Là où je bloque encore, c'est plutôt en syntaxe pour demander à file_get_contents de ne donner en echo que la ligne voulue ($timestamp);
J'y travail... Et en gardant la partie où le nombre de résultats est affiché (extrait)
Code :
1
2
3
        foreach ($resultats as $v);  {
            echo "$v";
        }
noviceman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2011, 17h49   #6
Membre Expert
 
Avatar de David Guillot
 
Homme David Guillot
Chef de projet en SSII
Inscription : mars 2004
Messages : 879
Détails du profil
Informations personnelles :
Nom : Homme David Guillot
Âge : 28
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2004
Messages : 879
Points : 1 149
Points : 1 149
Pas besoin d'un fopen devant file_get_contents ; et cette fonction est nettement plus simple et efficace pour lire des petits fichiers (je considère que 600ko c'est petit).

Par contre, il nous manque encore la structure du fichier que tu souhaites lire. Car si c'est un fichier structuré par ligne, tu ferais peut-être mieux de le lire avec la fonction file(), qui transforme directement le contenu en tableau (1 cellule par ligne). De cette manière tu pourrait très facilement parcourir ton tableau et effectuer ta recherche
__________________
Avant de poser une question ici :

Après résolution de votre question : un clic sur , un et un vote pour les personnes qui vous ont aidé
David Guillot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h56   #7
Invité régulier
 
Inscription : février 2009
Messages : 40
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 40
Points : 6
Points : 6
Bonjour,
Très justement tu dis :
"Par contre, il nous manque encore la structure du fichier que tu souhaites lire."
C'est précisément mon actuel problème.
La lecture s'effectue correctement si mes ligne d'infos sont les unes sous les autres.
AAA
BBB
CCC
DDD...Etc...
mais pas comme ça :
AAA<br />BBB<br />CCC<br />DDD...Etc...
C'est à dire qu'après essai, j'ai écrit mes dates les unes sous les autres sur le bloc-note windows et pas de problème.
Par contre, quand j' envois mes dates via mon code en ligne, ça donne ça et ça ne fonctionne pas pour la recherche...
Code :
1
2
 
<div style="color:red;"><i><b>HORAIRES DE RESERVATIONS DE LA SALLE 1</b></i></div> <br /><a href="c.php">Retour</a><br /><br /> <br /><br />07/ 09/ 2011--De : 9 heures00 mn A 10 heures00 mnSalle retenue par -> Yves  <br /><br />08/ 09/ 2011--De : 9 heures00 mn A 12 heures00 mnSalle retenue par ->  Sophie <br /><br />09/ 09/ 2011--De : 9 heures00 mn A 18 heures00 mnSalle retenue par ->  vvv <br /><br />07/ 09/ 2011--De : 10 heures00 mn A 12 heures00 mnSalle retenue par ->  Chris
Il faudrait que je puisse envoyer mes données (dates) et que le fichier soit comme ça :
Code :
1
2
3
4
5
6
 
<div style="color:red;"><i><b>HORAIRES DE RESERVATIONS DE LA SALLE 1</b></i></div> <br /><a href="c.php">Retour</a><br /><br /> 
07/ 09/ 2011--De : 9 heures00 mn A 10 heures00 mnSalle retenue par -> Yves  
08/ 09/ 2011--De : 9 heures00 mn A 12 heures00 mnSalle retenue par ->  Sophie 
09/ 09/ 2011--De : 9 heures00 mn A 18 heures00 mnSalle retenue par ->  vvv 
07/ 09/ 2011--De : 10 heures00 mn A 12 heures00 mnSalle retenue par ->  Chris
Je galère avec le retour chariot (\n \r) depuis des heures, rien n'y fait.
Peut on générer // en php dans un fichier (txt ou autre) // un vrai retour chariot comme je fais avec le bloc-note ?
AAA
BBB
CCC
noviceman est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h31.


 
 
 
 
Partenaires

Hébergement Web