IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Configuration] Supprimer une donnée dans un fichier [Fait]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    -> rubrique : Expressions regulieres ! lol

    Sinon lache nous ton code qu on te dise pourquoi ça marche pas !

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
      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.

  4. #4
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    Par défaut
    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

  5. #5
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    Par défaut
    Je sais pas si qq1 sait comment supprimer un élément d'une liste dans un fichier .txt avec php.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 90
    Points : 100
    Points
    100
    Par défaut
    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 ?

  7. #7
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    J'ai testé avec cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  9. #9
    Membre actif
    Inscrit en
    Décembre 2006
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 205
    Points : 240
    Points
    240
    Par défaut
    Cela marche nickel chrome ton code julp.
    Merci, t'es un pro.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprime une ligne dans un fichier texte
    Par dev7 dans le forum Linux
    Réponses: 4
    Dernier message: 28/03/2006, 01h33
  2. Supprimer une ligne dans un fichier text
    Par philippe13 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/03/2006, 16h43
  3. Supprimer une ligne dans un fichier
    Par tsing dans le forum Linux
    Réponses: 4
    Dernier message: 06/02/2006, 14h45
  4. Supprime une occurence dans un fichier
    Par dev7 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 03/02/2006, 14h21
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo