Suppression ligne fichier texte

abdinfo6 Messages postés 36 Date d'inscription mercredi 17 novembre 2010 Statut Membre Dernière intervention 18 avril 2011 - 17 nov. 2010 à 10:17
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 17 nov. 2010 à 13:52
Bonjour,

j'ai un fichier texte contenant un mot par ligne (machin 1, truc, machin2 ...) et je n'arrive pas à supprimer l'élément
voulu. Mon fichier texte apparait dans une liste déroulante. Le mot à supprimer est donc sélectionné et doit être
supprimé par l'action du clic sur le bouton "supprimer".

J'ai donc ce code la :

if (isset($_POST[supprimer])) // si l'utilisateur a appuyer sur le bouton supprimer
{
$valeur_eff = $_POST[liste]; // récupère la valeur à supprimer			
$tab = file($fic);			
$cpt = 0;
$fp = fopen($fic, 'w');

while (($cpt < count($tab)) && ($valeur_eff != trim($tab[$cpt]))) // tant qu'on a pas la valeur
{
fputs($fp, $tab[$cpt]);
fputs ($fp , "\r\n");				
$cpt++;			
}

while ($cpt < count($tab))
{
$valeur_sup = $tab[$cpt++];
fputs ($fp, $valeur_sup);
fputs ($fp , "\r\n");
}
fclose ($fic);		
header('Location: suppression.php');
}



Merci car je jette l'éponge là ...

abdinfo6

7 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
17 nov. 2010 à 10:55
Bonjour

Tu devrais utiliser str_replace();
si tu veux supprimer un bout du fichier, tu remplaces dans le fichier ce bout par rien.
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
17 nov. 2010 à 11:15
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
17 nov. 2010 à 12:21
Salut,

Moi je ferais pas comme ça.
Dans ma liste HTML, pour chaque mot, la valeur de l'option serait son numéro de ligne dans le fichier en question.
Pour la créer, un truc dans le genre :
<?php
echo '<select name="supprimer">';
foreach ($file file($fic) as $num> $line) {
  echo sprintf('<option value="%s">%s</option>', $num, $line);
}
echo '</select>';
?>


Ensuite, pour sauvegarder le fichier :
<?php
// Avec des guillemets autour de 'supprimer', sinon on obtient une erreur de type E_NOTICE
if (isset($_POST['supprimer'])) {
  $file = file($fic);
  // On s'assure que le numéro de la ligne est compris entre 0 et count($file)
  if ($num >= 0 && $num < count($file) {
    // On supprime la ligne en question
    array_splice($file, $num, 1);
    // On écrit le fichier
    // On peut utiliser \r\n comme retour à la ligne sur Windows
    file_put_contents($fic, implode("\n", $file));
  }
}
?>


C'est pas parce que c'est de moi, mais je trouve que c'est plus élégant.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
17 nov. 2010 à 12:53
Des fois j'écris des énormités...
Au lieu de echo sprintf()... on peut utiliser simplement printf() lol

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0

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

Posez votre question
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
17 nov. 2010 à 13:04
Bonjour,

Je pense que les <option> de ton <select> sont mal construits. La fonction "file()" retourne un tableau. Tu doit mettre la clé de chaque ligne dans l'attribut "value".
Copie les lignes ci-dessous dans un fichier "test.txt" :
ligne N° 1
ligne N° 2
ligne N° 3
ligne N° 4
ligne N° 5
ligne N° 6
ligne N° 7
ligne N° 8
ligne N° 9
ligne N° 10
ligne N° 11
ligne N° 12
ligne N° 13
ligne N° 14
ligne N° 15
ligne N° 16
ligne N° 17
ligne N° 18
ligne N° 19
ligne N° 20

Génération des options et affichage du formulaire :
<?php
  function creeSelect($ligne)
  {
    //-- génération de <option> du <select> ------------------------------------
    $option = '';
    foreach ($ligne as $cle => $valeur)
    {
      $option .= '<option value="' . $cle . '">' . trim($valeur) . '</option>';
    }
    return $option;
  }

  //----------------------------------------------------------------------------
  //----------------------------------------------------------------------------
  //----------------------------------------------------------------------------
  $fichier = 'test.txt';
  $ligne = file ($fichier);
?>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script type="text/javascript">
    </script>
  </head>
  
    <form name="formulaire" method="post" action="essai.php">
      <select name="ligne">
        <?php echo creeSelect($ligne) ?>
      </select>
      

      
    </form>
  
</html>

Suppression de la ligne sélectionnée et réécriture de "test.txt" :
//-- essai.php --------
<?php
  if (isset($_POST['sup']))
  {
    $aSupprimer = $_POST['ligne'];
    $fichier = 'test.txt';
    $ligne = file ($fichier);
    unset($ligne[$aSupprimer]);
    file_put_contents ( $fichier , $ligne);
  }
?>


Cordialement.

JC

                
0
cs_jeca Messages postés 341 Date d'inscription mercredi 17 juillet 2002 Statut Membre Dernière intervention 14 juillet 2011 14
17 nov. 2010 à 13:06
Damned, grillé par neigedhiver.

Cordialement.

JC
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
17 nov. 2010 à 13:52
Jeca, tu as fait une erreur dans l'utilisation de file_put_contents : si tu y colles directement le tableau, ça va pas aller... Il faut concaténer toutes les lignes entre elles, avec une nouvelle ligne (\n) entre chaque, avec implode par exemple ;)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
Rejoignez-nous