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 07/06/2011, 10h16   #1
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
Par défaut Mon code de récupartion de fichier php ne marche pas

Bonjour,

plutôt que de long discours voici mon code :

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
	while ($result = mysql_fetch_array($ask)){
	$path = '/chemin/';
	$pseudo_fiche = $ask['pseudo'];
	$userListStr = "";
	$d = dir($path);
	$fichier = '';
	while (false !== ($entry = $d->read())) 
	{
	   $rest = substr($entry, 0, 5);
	   if ($rest == "fich_")
	   {
		if (file_exists($path.$entry))
		{
 
			$f_users = file($path.$entry);
 
			for ($i = 0; $i < count($f_users); $i ++)
			{
 
				$f_line = trim($f_users[$i]);
				if ($f_line == $pseudo_fiche) {$fichiers.=substr($entry,5,20)-".txt";  }
		  }
 
 
		}	   	
	   }
	}
	$d->close();
	echo 'dans la fiche'.$fichiers.'se trouvent les pseudos'.$ask['pseudo'];
	}
le problème c'est que ce code me ressort : dans la fiche 112 et 113 se trouve pseudoY, dans la fiche 113 se trouve pseudoZ.
Alors que j'aimerais plutôt: dans la fiche 113 se trouve PseudoY et PseudoZ (que ça me trie par fiche avec nbre de pseudo dedans (un peu complexe j'avoue)

Quelqu'un aurait une idée ?
Merci d'avance !
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2011, 11h20   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Je n'ai pas la moindre idée de ce que tu essaie de faire... Avec aussi peu d'informations, il m'est impossible de répondre correctement. Tu pourrais argumenter un peu ??
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 08h50   #3
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
salut,

En fait, j'ai plusieurs fichiers.txt sur mon server.
Dans chacun de ces fichiers se trouvent des pseudos dont certains sont des "pseudos favoris"

sur ma page php j'ai déjà récupéré la liste des pseudos favoris qui sont pascal , maxence, et martine.

Mais je souhaiterai afficher les noms des fichiers dans lesquels ces pseudos favoris se trouvent.

Ex des fichiers :

fich_1.txt :
maxence
robert
edouard

fich_2.txt :
pascal
maxence
martine
dominique

fich_3.txt :
maxence
martine
romain

Je souhaiterais afficher sur ma page php

Dans le 2 se trouvent 3 pseudos favoris
Dans le 3 se trouvent 2 pseudos favoris
Dans le 1 se trouvent 1 pseudos favoris

Le mieux est d'oublier le code que j'ai mis plus haut car il ne marche pas, il faudrait que je reparte sur un code tout neuf mais vraiment je ne vois pas comment faire, mes connaissances en php sont trop limitées
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 10h01   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Un algo de ce genre peut facilement faire l'affaire:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
define('USERNAMES_DIR', '/path/');
 
$peudos = array('pascal', 'maxence', 'martine');
 
if (is_dir($dir) && $handle = opendir(USERNAMES_DIR)) {
	while (($file = readdir($handle)) !== false) {
		if ($file == '.' || $file == '..' || !is_file($file))
			continue;
 
		$lines = file($path = realpath($dir) . '/' . $file);
		foreach ($pseudos as $pseudo) {
			if (in_array($pseudo, $lines)) 
				echo "Le pseudo $pseudo est dans le fichier $path";
		}
	}
	closedir($handle);
}
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 10h29   #5
Membre régulier
 
Homme
Développeur Web
Inscription : octobre 2009
Messages : 72
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Vietnam

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : octobre 2009
Messages : 72
Points : 99
Points : 99
Bonjour

J'aurais une proposition :

En parsant les .txt , tu renseignes un tableau avec pour clé le nom du fichier
et pour valeur un tableau des users contenus dans le fichier

Code :
1
2
3
4
5
6
7
8
9
 
$f_users = file($path.$entry);
for ($i = 0; $i < count($f_users); $i ++){
	$nom_fichier =  substr($entry,5,20);
 	$f_line = trim($f_users[$i]);
 
        $TableauUserParFichier[$nom_fichier] = $f_line; 
 
}
Ca devrait générer cela

Code :
1
2
3
 
$TableauUserParFichier['fich1'] = array('pascal','maxence','henri','antoine'); 
$TableauUserParFichier['fich2'] = array('pascal','monique');
dès lors pour chaque fichier tu compares les valeurs de user avec le tableau de user favoris

Code :
1
2
3
4
5
6
7
8
 
$fav = array('pascal','maxence','martine'); 
 
foreach ($TableauUserParFichier as $k => $v){
 
	$a = array_intersect($TableauUserParFichier[$k],$fav);
	echo 'dans la fichier '.$k.'.txt se trouvent '.count($a).' pseudos favoris sur un total de '.count($TableauUserParFichier[$k]).'<br/>';
}
C'est certainement optimisable, qu'en penses-tu ?
matlow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 10h38   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Citation:
Code :
for ($i = 0; $i < count($f_users); $i ++){
pas de for pour parcourir un tableau de cette façon foreach est la pour ça, de plus tu comptes le nombre de lignes à chaque tours de boucle
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 12h18   #7
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Quelque chose de ce genre ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
while ($result = mysql_fetch_array($ask)){ 
	$path = '/chemin/'; 
	$pseudo_fiche = $ask['pseudo']; // c'est pas plutôt $result ?
	$fichiers = array();
	foreach(new DirectoryIterator($path) as $dir){
		if(!$dir->isDot() && substr($dir->getFileName(),0,5) == "fich_"){
			$f_users = file($dir->getPathName());
			foreach($f_users as $line => $f_user)
			{ 
				$f_line = trim($f_user); 
				if ($f_line == $pseudo_fiche) {$fichiers[substr($entry,5,20)-".txt"][] = $pseudo_fiche;  } 
			} 
		}
	}
	foreach($fichiers as $fiche => $fichier)
		echo 'dans la fiche '.$fiche.' se trouvent les pseudos '.implode(', ', $fichier); 
}
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 17h50   #8
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
merci à tous pour vos réponses
j'essaye d'avance avec tout ça mais pas facile quand on y connait.... moins que vous en tout cas

le code de Shikiryu semple pas mal mais il me dit
dans la fiche 0 se trouve le pseudo pascal
or la fiche est la fiche fich_111.txt

Par contre, il faut complètement oublié mon 1er post et lire plutôt mon 2e, car mon code ne veut rien dire
Je voulais que, étant donné qu'on a la liste des pseudos favoris, ça me ressorte DANS l'ordre descendant, les fiches contenant le plus de pseudos favoris...
Assez compliqué je l'avoue... merci à celui qui me sortira de cette panade...
maxence64 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 20h27.


 
 
 
 
Partenaires

Hébergement Web