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

- - Dernière réponse : vilhjalms
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
- 9 juil. 2007 à 20:04
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,
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Dernière intervention
11 août 2008
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de audayls
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
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á
Commenter la réponse de vilhjalms
Messages postés
386
Date d'inscription
lundi 27 février 2006
Dernière intervention
21 août 2015
0
Merci
salut basta je suis amezghal ^^
Au début, on essaye de trouver une solution qui marche, et puis on cherche la meilleure solution.
Commenter la réponse de amezghal
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Dernière intervention
11 août 2008
0
Merci
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)
Commenter la réponse de audayls
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
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á
Commenter la réponse de vilhjalms
0
Merci
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=
Commenter la réponse de Utilisateur anonyme
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Dernière intervention
11 août 2008
0
Merci
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)
Commenter la réponse de audayls
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
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á
Commenter la réponse de vilhjalms
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Dernière intervention
11 août 2008
0
Merci
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)
Commenter la réponse de audayls
0
Merci
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
Commenter la réponse de Utilisateur anonyme
0
Merci
Wow Nikel, cela affiche bien correctement le message mais on ne peut pas enregistrerla modification ???
Commenter la réponse de Utilisateur anonyme
Commenter la réponse de Utilisateur anonyme
Messages postés
373
Date d'inscription
samedi 9 juillet 2005
Dernière intervention
11 août 2008
0
Merci
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)
Commenter la réponse de audayls
0
Merci
J'ai mis "$file = '../blablateur.txt';" et lorsque je souhaite modifier la ligne ca efface tout
Commenter la réponse de Utilisateur anonyme
0
Merci
une idée pour la solution finale ?
Commenter la réponse de Utilisateur anonyme
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
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á
Commenter la réponse de vilhjalms
0
Merci
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 ?
Commenter la réponse de Utilisateur anonyme
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Dernière intervention
16 juillet 2009
0
Merci
Saell og blesuð

Qu est ce qui ne va pas dans le formatage ?


Vilhjálms
Sigurðsdóttir aka Frëyjá
Commenter la réponse de vilhjalms

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.