Précédent   Forum des professionnels en informatique > PHP > Outils
Outils Forum d'entraide sur les outils pour développeurs PHP : EDI, installation, administration... Avant de poster : FAQ outils, toutes les FAQ PHP et les comparatifs
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 06/02/2007, 14h59   #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 [Configuration] Supprimer une donnée dans un fichier

Bonjour;
Je voudrais savoir comment faire pour parcourir un fichier.txt pour trouver une donnée puis la supprimer.
Voici ce que j'ai fait mais cela ne fonctionne pas.
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
 
if(    isset($_POST['effacer']) && isset($_POST['nom']) )
{
    if(file_exists("clients.txt"))
    {
    $ouvre=fopen("clients.txt","r");
    while (!feof ($ouvre))          
        {
        $lecture = fgets($ouvre, 400); 
        $donnee=explode(";",$lecture);  
        $combien=count($donnee)-1; 
        for ($i=0;$i<$combien;$i++)
            {
            if (ereg($_POST['nom'],$donnee[$i])){$donnee[$i]=$donnee[$i]="";}
            if ($donnee[$i]!=""){$liste_modif.=$donnee[$i].";";}
            }
	    }	
    fclose($ouvre);		
    $ouvre=fopen("clients.txt","w+");
    fwrite($ouvre,$liste_modif);
    fclose($ouvre);
    echo "<h2>Client ",$_POST['nom'],"  effacé </h2> ";
	}
}
Si qq1 a des informations, elles sont les bienvenues.
Merci.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 15h42   #2
Rédacteur
 
Avatar de RideKick
 
Homme
Directeur technique
Inscription : septembre 2006
Messages : 5 959
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur technique
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : septembre 2006
Messages : 5 959
Points : 10 889
Points : 10 889
-> rubrique : Expressions regulieres ! lol

Sinon lache nous ton code qu on te dise pourquoi ça marche pas !
__________________
Pas de questions techniques en MP please

Mon site perso
RideKick est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 17h28   #3
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par cirtey
Voici ce que j'ai fait mais cela ne fonctionne pas.
Pourriez-vous expliciter ce "cela ne fonctionne pas" par des messages d'erreur ou une description de ce comportement anormal ?

Quelques remarques :
  • Avant le while déclarez la variable $liste_modif en lui affectant une chaîne vide : Cela permet d'éviter un warning selon la configuration de PHP.
  • Votre indentation n'est pas homogène
  • Sur count(...) - 1, le - 1 est-il justifié ?
  • Vous pourriez simplifier (donc augmenter sa lisibilité) le corps de votre boucle for de la façon suivante :
    Code :
    1
    2
    3
    if (!ereg($_POST['nom'], $donnee[$i])) {
        $liste_modif .= $donnee[$i] . ';';
    }
    Surtout que vous y faites une triple affectation quelque peu étrange.
  • L'utilisation de regexp est-elle justifiée ? Imaginez que vous faîtes une erreur dans l'expression et vous supprimeriez plusieurs clients !


Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 17h52   #4
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
En fait, le problème est le warning dû à l'absence d'initialisation que j'ai corrigé mais plus grave, je souhaite supprimer un nom et je me trouve à supprimer toute la liste.
Le double dans données est une erreur.
N.B: j'ai commencé la prog ce novembre et je n'ai pas encore terminé tous mes cours en php
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 17h55   #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
Je sais pas si qq1 sait comment supprimer un élément d'une liste dans un fichier .txt avec php.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2007, 18h12   #6
Membre régulier
 
Inscription : avril 2005
Messages : 90
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 90
Points : 89
Points : 89
Comment est formaté le fichier txt ?
C'est une liste de noms séparés par des points-virgules ? tout sur la même ligne ?
mikemarti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 14h31   #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
Le fichier se présente dans la forme initiale suivante:
aaaa;bbbb;cccc;dddd
xxxx;zzda;azdaz;azrffzefzef
szddqdq;dd;zd;zdazd

Ce que je veux, c'est quand je $_POST la première valeur d'une ligne par exemple xxxx de la ligne xxxx;zzda;azdaz;azrffzefzef toute la ligne disparaisse.

Ce qui donnerait:
aaaa;bbbb;cccc;dddd
szddqdq;dd;zd;zdazd

Hors avec mon code actuel
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
//SUPPRESSION DES DONNES
if (    isset($_POST['effacer']) && isset($_POST['nom1']) )
{
    if(file_exists("clients.txt"))
    {
    $id_file=fopen("clients.txt","r");
    flock($id_file,1); 
    $liste_modif="";
        while (!feof ($id_file)) // Parcourir le fichier tant qu'il n'est pas fini
        {
        $lecture = fgets($id_file, 4096); 
        $donnee=explode(";",$lecture);  
        $combien=count($donnee); 
        for ($i=0;$i<$combien;$i++)
            {
            if (ereg($_POST['nom1'],$donnee[$i])){$donnee[$i]="";} 
            if ($donnee[$i]!=""){$liste_modif.=$donnee[$i].";";} // Cas de donnée nulle
            }
        }
        flock($id_file,3);	
        fclose($id_file);		
        $id_file=fopen("clients.txt","w+");
        fwrite($id_file,$liste_modif);
        fclose($id_file);
        echo "<h2>Client ",$_POST['nom1'],"  effacé </h2> ";
    }
    else {echo "fichier inaccessible";}
}
j'ai pour résultat:
aaaa;bbbb;cccc;dddd
;zzda;azdaz;azrffzefzef
;szddqdq;dd;zd;zdazd;

Soit la suppression de xxxx uniquement et non pas toute la ligne, par ailleurs il y a un ";" qui s'insère dans la ligne suivante.

Comment faire pour obtenir le résultat (lorsque je demande de supprimer la ligne dont le premier élement est xxxx):
aaaa;bbbb;cccc;dddd
szddqdq;dd;zd;zdazd

Je continue de faire de nouvelles combinaisons, pour le moment cela ne fonctionne pas.

Merci.
cirtey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 15h39   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
J'ai testé avec cette version :
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
<form method="post">
	Client à supprimer : <input type="text" name="nom1" />
	<br/>
	<input type="submit" name="effacer" value="Effacer"/>
</form>
 
<?php
if (isset($_POST['effacer']) && isset($_POST['nom1']))
{
	if(file_exists('clients.txt'))
	{
		$client_trouve = FALSE;
		$id_file = fopen('clients.txt', 'r');
		flock($id_file, LOCK_SH); // Pose d'un verrou en lecture
		$liste_modif = '';
		while (!feof($id_file)) // Parcourir le fichier tant qu'il n'est pas fini
		{
			$lecture = fgets($id_file, 4096); 
			if (preg_match('#^' . preg_quote($_POST['nom1']) . ';#', $lecture)) {
				$client_trouve = TRUE;
			} else {
				$liste_modif .= $lecture;
			}
		}
		flock($id_file, LOCK_UN); // Libération du verrou
		fclose($id_file);		
		$id_file = fopen('clients.txt', 'w+');
		flock($id_file, LOCK_EX); // Pose d'un verrou en écriture
		fwrite($id_file, $liste_modif);
		flock($id_file, LOCK_UN); // Libération du verrou
		fclose($id_file);
		if ($client_trouve) {
			echo '<h2>Client ' . $_POST['nom1'] . '  effacé </h2> ';
		} else {
			echo '<h2>Aucun client du nom de ' . $_POST['nom1'] . '</h2>';
		}
	} else {
		echo "Fichier inaccessible";
	}
}
?>

Julp.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2007, 16h36   #9
Membre habitué
 
Inscription : décembre 2006
Messages : 156
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 156
Points : 103
Points : 103
Cela marche nickel chrome ton code julp.
Merci, t'es un pro.
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 20h55.


 
 
 
 
Partenaires

Hébergement Web