Rechercher / remplacer une chaine de caractères dans un fichier .txt

7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006 - 22 janv. 2006 à 19:38
7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006 - 30 janv. 2006 à 12:17
Salut,


Voila j'ai un peu chercher mais pas assez sans doute parcque j'ai rien trouvé et ça m'étonne, j'ai un fichier texte qui reprend les membres et leur mdp avec la date d'inscription (nom=mdp=email=date)


données.txt :


pierre=mdp1=pierre@free.fr=01/01/2006
pol=mdp2=pol@free.fr=01/01/2006
jack=mdp3=jack@free.fr=01/01/2006
etc..


et donc dans mon php je veux qu' a chaque connection du membre (donc envoi par formulaire du couple : nom=mdp) je trouve ma ligne dans le texte et remplace la date par celle du jour.


j'ai essayé ça mais ça marche pas! :


<?php
$nom = $_POST['nom'];
$mdp = $_POST['mdp'];
$date = date ('d/m/Y');


/// si $nom existe .... /// verification de l'inscription ..


/// si oui alors :


$data = ( "données.txt" ) ;
$fp = fopen ( $data , "r+" ) ;
while ( !feof ( $fp ) )
{
$contenu .= fgets ( $fo , 4096 ) ;
}
$corr = str_replace ( "=??/??/????" , "=".$date , $end ) ;
fputs ( $fp , $end ) ;
fclose ( $fp ) ;


/// bon ca c'est sur ca donne rien , alors avec eregi :


$data = ( "données.txt" ) ;
$fp = fopen ( $data , "r+" ) ;
$contenu = file ( $fp ) ;
$taille = count ( $contenu ) ;
$couple = $nom.'='.$mdp.'=';
for ( $i=0 ; $i <= $taille ; $i++ ) {


if ( eregi ( $couple , $contenu[$i] ) ) {

fputs ( $fp , substr ( $contenu[$i] , -10 ) . $date );


}else{


fputs ( $fp , $contenu[$i] );


}
fclose ( $fp ) ;

//// marche pas help please !!

?>


Merci pour vos réponses ....

10 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 janv. 2006 à 10:14
Hello,

si c'est toujours ce format, alors tu peux faire un truc du genre :

$chaine = file_get_contents ('fichier.txt');
$aChaine = explode ('=', $chaine);
$clef = array_seach ($_POST['nom'], $aChaine);
$aChaine[$clef + 3] =date (...//la forme que tu veux);
$chaine = implode ($aChaine);
// écriture dans le fichier de $chaine en écrasant l'ancien fichier (fopen (fichier, 'w+');
1
7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006
22 janv. 2006 à 19:39
AAhhh mé pourquoi il met pas le code en couleur !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
23 janv. 2006 à 10:15
heu implode ('=', $aChaine);

petit oubli ;-)
0
7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006
23 janv. 2006 à 18:13
Merci pour cette réponse mais le code ne marche pas , il ne corrige chaque fois que la premiere ligne , même si le nom entré est le 3eme(Jack)
sinon ça m'aide déja , tu me donne là une piste , je vais chercher de ce côté.
Merci encore
0

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

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 janv. 2006 à 09:24
fais un echo $clef = array_seach ($_POST['nom'], $aChaine);

et un echo $_POST['nom']
0
7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006
26 janv. 2006 à 18:01
Ben écoute je te promets je vois pas pourquoi il me remplace toujours cette première ligne , en + il me bouffe mon \r\n de fin de ligne que la deuxieme ligne se met a la suite de la premiere,
en effet la construction de mon txt ce fait ainsi :

fopen ($fp, 'monfichier.txt');

fputs($fp,"$nom=$mdp=$mail=$date\r\n");

est ce a cause de \r\n que $achaine foire je sais pas ?

mais j'aimerais bien aussi que tu me montres comment intégrer un eregi , imaginons que je ne sache pas exactement où se trouve les caractères a remplacer ...

exple :

fichier.txt :

Sophie mange du beurre et boit du lait

----------------------------------------------------
php :

$chaine = eregi_replace("beurre","pain","fichier.txt"); ???

resultat désiré :
Sophie mange du pain et boit du lait

mais comment faire ???....
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 janv. 2006 à 18:09
Pas besoin d'une expression régulière pour ça.
str_replace fera l'affaire :
http://fr3.php.net/manual/fr/function.str-replace.php

Pour ton autre problème, je t'ai demandé d'afficher des trucs, pour que tu me dises ce qu'il t'affiche lol. Afin d'essayer de comprendre...
0
7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006
26 janv. 2006 à 18:14
/auteurdetail.aspx?ID=58031 echo $clef = array_seach ($_POST['nom'], $aChaine); ne renvoie rien

et un echo $_POST['nom'] renvoie jack
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
26 janv. 2006 à 18:55
et un print_r ($aChaine);
(juste après l'explode() )?
0
7nico7 Messages postés 19 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 30 janvier 2006
30 janv. 2006 à 12:17
voici le txt avant :

pierre= mdp=brol@yahoo.com=25/01/2006=
pol=mdp=brol@yahoo.com=25/01/2006=
jack=mdp=brol@yahoo.com=25/01/2006=
alphonse=mdp=brol@yahoo.com=25/01/2006=

(j'ai rajouté un = a la fin pour eviter qu'il confonde la date avec le nom de la ligne suivante lors de l'explode)

<HR>
mon php :

$nom = $_POST[nom];
$mdp = $_POST['mdp'];
$data = "fichier.txt";
$date = date('d/m/Y');

// remplacer date
$chaine = file_get_contents ($data);
$aChaine = explode ('=', $chaine);
echo "print r :
";
print_r ($aChaine);
echo '
clef : '.$clef = array_search ($pseudo, $aChaine).'
';
$aChaine[$clef + 3] = $date ;
echo 'pseudo : '.$pseudo.'
';
$chaine = implode ('=' , $aChaine);
$fo = fopen ($data,"w+");
fputs ($fo,$chaine);
fclose($fo);


<HR>
affichage :

print r :
Array ( [0] => pierre [1] => mdp [2] => brol@yahoo.com [3] => 25/01/2006 [4] => pol [5] => mdp [6] => brol@yahoo.com [7] => 25/01/2006 [8] => jack [9] => mdp [10] => brol@yahoo.com [11] => 25/01/2006 [12] => alphonse [13] => mdp [14] => brol@yahoo.com [15] => 25/01/2006 [16] => )
clef :
pseudo : jack

<HR>

mon txt après :

pierre =mdp=brol@yahoo.com=30/01/2006=
pol=mdp=brol@yahoo.com=25/01/2006=
jack=mdp=brol@yahoo.com=25/01/2006=
alphonse=mdp=brol@yahoo.com=25/01/2006=


<HR>
il remplace donc la date de pierre alors que c'est jack qui s'inscrit !!!

merci encore
0
Rejoignez-nous