Modifier la ligne X d'un fichier txt [Résolu]

Signaler
-
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
-
Bonjour à vous,
Je suis pas très fort en php et je n''arrive pas à réaliser un petit script pour mon site, je m''explique:
Je
souhaiterai modifier la ligne x d''un fichier texte récupéré grace à un
lien du type /edit.php?id=431 pour modifier la ligne 431 grace à un
simple formulaire
La page edit charge alors la ligne a éditer dans
le formulaire avec un bouton modifier pour ré enregister la ligne au
meme emplacement
Si quelqu''un peut m''aider...
Merci d''avance
Cordialement,

19 réponses

Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Meme joueur joue encore :
<?php
$file = 'http://www.bastagogne.com/blablateur.txt';
if (($lines = file($file)) !== FALSE) {
 if (isset($_GET['id']) AND isset($lines[(int) $_GET['id']])) {
  $temp = explode('
', $lines[(int) $_GET['id']]);
  if (isset($_POST['change'])) {
   if (isset($_POST['message']) AND $_POST['message'] !== '') $temp[count($temp)-1] = stripslashes($_POST['message']);
   $temp = implode('
', $temp);
   $lines[(int) $_GET['id']] = $temp;
   $lines = implode("\r\n", $lines);
   if (($fp = fopen($file, 'w')) !== FALSE) {
    fwrite($fp, $content);
    fclose($fp);
   }
  }
  else {
   $message = str_replace(array('<hr />', "\n"), '', end($temp));
   echo '<form action="',$_SERVER['PHP_SELF'],'?id=',$_GET['id'],'" method="post">Message :
<textarea cols="50" name="message" rows="10">',$message,'</textarea>

</form>';
  }
 
 }
 else echo 'La ligne indiqué n\'existe pas.';




}
else echo 'Le fichier "',$file,'" est introuvable.';
?>




For every choice, a consequence (Fable)
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Bon alors c est pas beau comme code mais alors pas beau du tout :(

<?php
$file='test.txt';
$content=file($file);

if(isset($_GET['id']) && !empty($_GET['id'])){
    $ligne=$_GET['id']-1;
    echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">';
    echo '';
    echo '';
    echo '';
    echo '</form>';
    exit;
}

if(isset($_POST['text']) && !empty($_POST['text'])){
    $text=$_POST['text'];
    $ligne=$_POST['ligne'];
    $fp=fopen($file,'w');
    $i=-1;
    while($content[++$i]){
        ($i==$ligne) ? fputs($fp,$text."\r\n") : fputs($fp,$content[$i]);
    }
    fclose($fp);
    exit;
}

?>



Vilhjálms


Sigurðsdóttir aka Frëyjá
Messages postés
385
Date d'inscription
lundi 27 février 2006
Statut
Membre
Dernière intervention
21 août 2015
3
salut basta je suis amezghal ^^
Au début, on essaye de trouver une solution qui marche, et puis on cherche la meilleure solution.
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Salut,
Vilhjalms pourquoi utiliser une boucle au lieu de la fonction "implode" ?
<?php
$file = 'text.txt';

if (is_file($file)) $content = file($file);
else $content = array();

if (isset($_GET['id']) AND isset($content[(int) $_GET['id']-1])) {
    if (isset($_POST['text'])) {
        $content[(int) $_GET['id']] = $_POST['text'];
        $content = implode("\r\n", $content);
        if (($fp = fopen($file, 'w')) !== FALSE) {
            fwrite($fp, $content);
            fclose($fp);
        }
    }
    else
        echo '<form action="',$_SERVER['PHP_SELF'],'?id=',$_GET['id'],'" method="post">
           
           
        </form>';
}

?>

For every choice, a consequence (Fable)
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

"Vilhjalms pourquoi utiliser une boucle au lieu de la fonction "implode" ?"
> Parce que " [...] c est pas beau comme code mais alors pas beau du tout :("
:)

Vilhjálms
Sigurðsdóttir aka Frëyjá

Merci de vos réponses mais en fait mon fichier contient uniquement des lignes formatés comme ceci:
[DATE @ HEURE]
Pseudo
Message<hr />
Et il apparait uniquement ca <span class=
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Dans le fond çà ne change pas grand chose. Essayes comme ceci (j'ai pas testé) :
<?php
$file = 'tonfichier.txt';




if (isset($_GET['id']) AND ($fp = fopen($file, 'r')) !== FALSE) {
 $content = '';
 while (!feof($fp)) $content .= fgets($fp, 4096);
 
 $content = explode('
', $content);
 if (isset($content[(int) $_GET['id']])) {
  if (isset($_POST['text'])) {
   $content[(int) $_GET['id']] = preg_replace('`.+?`', ''.$_POST['text'].'', $content[(int) $_GET['id']]);
   $content = implode('
', $content);
  }
  else {
   $content[(int) $_GET['id']] = preg_replace('`(.+?)`', '$1', $content[(int) $_GET['id']]);
   echo '<form action="',$_SERVER['PHP_SELF'],'?id=',(int) $_GET['id'],'" method="post">
            
            
         </form>';
  }
 }
}
?>





For every choice, a consequence (Fable)

Merci beaucoup pour ta réponse mais l'affichage n'est toujours pas correct, il affiche toujours un bout de phrase
Je pense qu'il faudrait essaye de récupérer la ligne de facon brute, mais j'ai aucune connaissance pour le faire.. :(
Merci pour votre aide
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Est ce que le fichier text est correctement modifier ?
et
Comment affichez vous vos phrases ?


Vilhjálms Sigurðsdóttir aka Frëyjá
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Si des infos se situent avant la chaîne "" essayons comme ceci :
<?php$file 'tonfichier.txt';if (isset($_GET['id']) AND ($fp fopen($file, 'r')) !== FALSE) {
 $content = '';
 while (!feof($fp)) $content .= fgets($fp, 4096);
 
 $content = explode('
', $content);
 if (isset($content[(int) $_GET['id']])) {
  if (isset($_POST['text'])) {
   $content[(int) $_GET['id']] = preg_replace('`(.+?).+?`', '$1'.$_POST['text'].'', $content[(int) $_GET['id']]);
   $content = implode('
', $content);
  }
  else {
   $content[(int) $_GET['id']] = preg_replace('`.+?(.+?)`', '$1', $content[(int) $_GET['id']]);
   echo '<form action="',$_SERVER['PHP_SELF'],'?id=',(int) $_GET['id'],'" method="post">
             '" />
            
         </form>';
  }
 }
}
?>

For every choice, a consequence (Fable)

Ca marche pas, ca n'affiche qu'une petite partie de la phrase. Je vous donne le fichier que je cherche à éditer
http://www.bastagogne.com/blablateur.txt
Merci de ta réponse

Wow Nikel, cela affiche bien correctement le message mais on ne peut pas enregistrerla modification ???

UPPP svp :-)
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Statut
Membre
Dernière intervention
11 août 2008

Oups sorry j'avais pas vu la question XDRemplaces "$file 'http://www.bastagogne.com/blablateur.txt';" par "$file './dossier/blablateur.txt';".

For every choice, a consequence (Fable)

J'ai mis "$file = '../blablateur.txt';" et lorsque je souhaite modifier la ligne ca efface tout

une idée pour la solution finale ?
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

il y a un $content bizarre a remplacer par $lines :

if (($fp = fopen($file, 'w')) !== FALSE) {
    fwrite($fp, $lines);
    fclose($fp);
}

Vilhjálms
Sigurðsdóttir aka Frëyjá

Alors ça fonction mais ca ne formate pas le texte comment il faut, le mieux je pense serrai d'extraire entierement la ligne de facon brut et de faire un preg_replace.
Quand pensez vous ?
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð

Qu est ce qui ne va pas dans le formatage ?


Vilhjálms
Sigurðsdóttir aka Frëyjá