Supprimer ligne fichier texte

sly784965 Messages postés 12 Date d'inscription mardi 12 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010 - 12 oct. 2010 à 13:33
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 13 oct. 2010 à 19:44
Bonjour,

j'ai le code suivant qui me permet d'afficher le contenu du fichier "affichage.php" via une boucle while :
<?php
                                //Lecture séquentielle du fichier et affichage, ligne par ligne du contenu du fichier "affichage.txt":  
                                $fic = fopen ("affichage.txt" , "r");
                                $tab_ligne = file('affichage.txt'); // place le fichier dans un tableau
                                $nb = count($tab_ligne);
                                $i=0;
                                                                   
                                    while ($i<$nb)
                                       {
                            ?>
                                <tr><td><?php echo $tab_ligne[$i]; ?> </td>
                                    <td></td>
                                </tr>    
                            <?php            $i++;
                                        }
                                      fclose ($fic);

                            ?>


Le problème est que je ne sais pas comment faire pour que lorsque je clique sur le bouton supprimer correspondant a un enregistrement, cet enregistrement soit supprimer de mon fichier texte !!

Merci de m'aider

sly

7 réponses

007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
13 oct. 2010 à 00:38
[list]Il s'agit sans doute d'un extrait de la pageaffichage.php destiné à traiter le fichier affichage.txt ?/list[list]Les fopen et fclose (et la variable $fic) sont inutiles, le file est suffisant pour lire un fichier texte disponible sur le serveur./list[list]Ne serait-il pas plus utile de rassembler le tout, plutôt que dans un tableau, dans un formulaire à construire progressivement (et à éditer en une seule fois) pour le soumettre (avec méthode et action) ?/list[list]Alors des cases à cocher repérées par des noms indicés permettraient de distinguer les lignes à supprimer en cliquant sur un unique bouton submit./list
0
sly784965 Messages postés 12 Date d'inscription mardi 12 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010
13 oct. 2010 à 09:20
Oui il s'agit bien de la page visant à traiter le fichier affichage.txt. Dans mon cas le formulaire n'a aucune utilité.
A chaque affichage d'une ligne de mon fichier txt, un bouton supprimer apparait pour chaque ligne et j'aimerais qu'en cliquant dessus il supprimer la ligne désirée.

J'ai trouvé cela mais il ne fonctionne pas comme je le voudrais :
<?php 

    function afficher($fichier, $separateur)
    {
      $tab = file($fichier);
      print "\";
for($i=0;$i<count($tab);$i++)
{
print \"----
\";
$sstab = explode($separateur, $tab[$i]);
foreach ($sstab as $ssval)
print \"$ssval, \";
print \"Supprimer, \";
print \"\";
}
      print "
";
    } 


    if (!empty($_GET))
    {
        if (isset($_GET['suppr']))
        {
             $pFic = fopen ("affichage.txt", 'r');
             $tab = file("affichage.txt");
             $chaine ="";
             for ($i = 0; $i<count($tab);$i++)
             $chaine .= ($i!=$_GET['suppr']) ? $tab[$i] : ""; //C'est ici qu'on supprime la ligne sélectionnée
             fclose ($pFic);
         }
         $pFic = fopen ("affichage.txt", 'w');
         fputs ($pFic, $chaine);
        fclose ($pFic);
    }
?>


Et dans le corps de ma page :
<? afficher("affichage.txt", " : ") ?>
Mon fichier texte comprenant plusieurs données par ligne séparé par ":". Le soucis est lorsque j'ai par exemple 10 lignes et que je supprime la ligne 8, il me supprime la ligne 9 et 10 aussi.

Merci d'avance.

sly
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
13 oct. 2010 à 11:03
Effectivement avec une méthode GET, le formulaire est inutile. Les fopen et fclose du pFic sont tout aussi inutiles pour lire le fichier (d'ailleurs l'affichage se fait sans), ils ne servent qu'à le reconstituer en fin d'opération (avec la méthode (w) comme write).

La fermeture la case du tableau après le supprimer (</td> et non <td>) éviterait des cases inutiles, mais la question essentielle est quel est le but de l'opération supprimer des lignes entières ou seulement des portions distinguées par des séparateurs ?

Bonne continuation
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
13 oct. 2010 à 11:07
Attention aussi aux rechargements de page (et à l'affichage préalable aux modifications) qui, en supprimant la ligne n peuvent progressivement supprimer toutes lignes suivantes...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sly784965 Messages postés 12 Date d'inscription mardi 12 octobre 2010 Statut Membre Dernière intervention 20 octobre 2010
13 oct. 2010 à 13:18
C'est justement mon problème, les lignes suivantes par rapport à celles que j'ai supprimé se supprime lors du rechargement de la page. Le but est de supprimer une ligne entiere en cliquant sur le bouton supprimer lui correspondant dans le tableau.

sly
0
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
13 oct. 2010 à 14:42
La meilleure solution semble alors un POST et un rechargement de page pour éviter les doubles enregistrements. Mais attention aux interventions croisées ! C'est un peu du bricolage pour travaux à domicile...

Si tel est le cas, j'aurais procédé comme suit :
if (!empty($_POST) && $_POST["bouton"]=="Enregistrer"){
   // Enregistrer les suppressions de lignes
   //Lire le fichier texte
   $tab=file("affichage.txt");
   // Enregistrer une sauvegarde datée
   $tdy=date("ymd_His");
   $fis=fopen("affichage$tdy.txt","w");
   $fic=fopen("affichage.txt","w");
   for($i=0;$i<count($tab);$i++){
      fwrite($fis,$tab[$i]);
      if (empty($_POST["suppr".$i])) fwrite($fic,$tab[$i]);
   }
   fclose($fis);fclose($fic);
// Rechargement de la page 
   header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
   exit;
}
// Afficher
$lgn=chr(10).chr(13); // Pour un source plus lisible
$chn='<form method="POST" action="'.$_SERVER['PHP_SELF'].'">'.$lgn;
$tab=file("affichage.txt");
for($i=0;$i<count($tab);$i++){
   $chn.='';
   $sstab=explode(" : ", trim($tab[$i]));
   foreach ($sstab as $ssval) $chn.= ''.$ssval.'';
   $chn.='
'.$lgn;
}
$chn.='';
Avec une fonction ou un simple
<?php echo $chn ?>
dans le corps du programme.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 oct. 2010 à 19:44
Salut,

La meilleure solution semble alors un POST[...]

Je dirai qu'il y a sans doute plusieurs meilleures solutions
L'utilisation des XMLHTTPRequest étant certainement en haut de tableau.

Cordialement,

Kohntark -
0
Rejoignez-nous