supprimer ligne dans un fichier texte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : supprimer ligne dans un fichier texte

par guilt92 » 11 juil. 2008, 11:02

Il y a plusieurs erreurs dans ton code.

La première (le message d'erreur) c'est que $fichier est un tableau, il faut donc faire
unset($fichier[$position]);
avec des [] et non pas des ()

Ensuite dans le bloc d'en dessous il y a une parenthèse en trop, un ; qui manque et deux références à $fd à la place de $fp. Voici la correction :
        $fp = fopen($fd, 'w+'); 
        foreach($fichier as $ligne) { fwrite($fp,$ligne); }  
        fclose ($fp); 
Voila qui devrait mieux marcher.

Apres je ne connais pas la structure de ton fichier mais fait quand meme un echo de chaque ligne au moment de la création de $fichier parce que le fait de couper avec le substr peut etre un probleme sur la derniere ligne du fichier...

par soleila » 08 juil. 2008, 17:50

j'ai essayé le tien voila mon code:

$trouver= false;
if(isset($_POST['login'])){ //verification de l existance de la variable
    if(!empty($_POST['login'])){ //verification si elle est n est pas vide
$login = md5(stripslashes($_POST['login'])); 
		 $fd = 'C:\Users\sonia\Documents\logica\loginCrypter.txt';
		$fichier= file($fd);	
					foreach( $fichier as $key=>$ligne) {
			 $ligne = substr($ligne, 0, strlen($ligne)-2); //on enleve l espace en fin de la ligne
             $ligne = strtolower($ligne);//mise en minuscule du login ds le tableau
			 $cmp= strcmp($login, $ligne);
			 if (empty($cmp)){
			 $position= $key;		 			 
			 }
			 }
			 if (isset($position)){		 	
			 unset($fichier($position)); //ICI L'ERREUR
        }
		$fp = fopen($fd, 'w+')) 
		foreach($fichier as $ligne) { fwrite($fd,$ligne); } 
		fclose ($fd);
}
}

par guilt92 » 08 juil. 2008, 17:18

Quel bout de code as tu essayé ? Le mien ou celui de BaLiSTiK ?

Poste ton code actuel stp (entre les balises

Code : Tout sélectionner

[php][/php]
) en nous indiquant quelle est la ligne 32 :)

par soleila » 08 juil. 2008, 17:10

je travaille avec la version 5 j'ai essayé ton bout de code voila l'erreur:

Fatal error: Can't use function return value in write context in C:\wamp\www\test\login.php on line 32

par guilt92 » 08 juil. 2008, 16:55

Le file_put_contents() est équivalent au bloc que j'ai proposé avec fopen fwrite et fclose et effectivement peut fonctionner après le unset, si toutefois tu es en php5 uniquement.
Sur quelle version de php travailles tu ?

par BaLiSTiK » 08 juil. 2008, 16:47

Met le code entre les balises
 et 
je t'ai dis ^^.

J ai tenté de mettre ceci mais apparement ça ne fonctionne pas :
if ($trouver == true){
	echo '<p> Votre login a &eacute;t&eacute; supprim&eacute;</p>';
	//supprimer le login dans le fichier texte
	$fichier = file_get_contents($fd); 
	$ligne = '/'.$ligne.'/';
	preg_replace($ligne,'',$fichier);
	file_put_contents('fichier.txt' , $fichier); 
}
Les str_replace et ereg_replace apparement en fonctionnent pas. Je n ai pas trouvé de solution, si quelqu'un en a une... :/

par guilt92 » 08 juil. 2008, 16:44

Je ne comprends pas trop où tu veux en venir mais en tous cas pour moi la solution est la suivante :

Si tu trouves l'id à supprimer, tu stockes le numéro de la ligne (le $key de ton tableau).

Exemple :
	if (empty($cmp)){ 
		$position = $key;
		} 
Une fois la boucle de vérification terminée, si la position de la ligne à supprimer est définie cela veut dire qu'elle a été trouvé, donc tu supprimes cette valeur de ton tableau $fichier
unset($fichier[$position]);
(tu es obligé de faire cela lorsque la boucle foreach est terminée car tu ne peux pas modifier les index d'un foreach à la volée...)

Une fois que c'est fait, tu ouvres ton fichier en écriture (ce qui va l'effacer) et tu copies toutes les autres lignes... un truc du genre :
	if (!$fp = fopen($fd, 'w+'))
    {
        print "Cannot open file ($fd)";
        exit;
     }
    else
    {
        // write the array to the file
        foreach($fichier as $ligne) { fwrite($fp,$ligne); }

        // close the file
        fclose($fp);
	}
Comme ca ca copie toutes les lignes de l'ancien fichier, sauf celle supprimée, dans le nouveau.

Sinon, petite remarque :
if(isset($_POST['login'])){ //verification de l existance de la variable 
if(!empty($_POST['login'])){ //verification si elle est n est pas vide 
Tu peux te contenter de
if(!empty($_POST['login'])){ //verification si elle est n est pas vide 
car si la variable est pas définie le empty renvoi true.

supprimer ligne dans un fichier texte

par soleila » 08 juil. 2008, 16:23

bonjour,

voila mon probleme je fais un formulaire dans lequel l'utilisateur rentre son login je vais ensuite le crypter puis le comparer à des logins présents dans un fichier texte (eux aussi cryptés).
J'aimerais que lorsque le login entré par l'utilisateur est présent dans le fichier texte je le supprime.
voila mon code:

<html>
<p>
Veuillez entrer le login &agrave; rajouter
</p>
<form action="login.php" method="post">
<p>
<input type="text" name="login"/> <input type="submit" value="Valider"/>
</p>
</form>

</html>
<?php
$trouver= false;
if(isset($_POST['login'])){ //verification de l existance de la variable
if(!empty($_POST['login'])){ //verification si elle est n est pas vide
$login = md5(stripslashes($_POST['login']));
$fd = 'loginCrypter.txt';
$fichier= file($fd);
foreach( $fichier as $key=>$ligne) {
$ligne = substr($ligne, 0, strlen($ligne)-2); //on enleve l espace en fin de la ligne
$ligne = strtolower($ligne);//mise en minuscule du login ds le tableau
$cmp= strcmp($login, $ligne);
if (empty($cmp)){
$trouver=true;
}
if ($trouver==true){
//supprimer le login dans le fichier texte
}
}
}
}