IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

écrire au début d'un fichier sans l'écraser


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut écrire au début d'un fichier sans l'écraser
    Salut
    je réalise actuellement un site internet et j'en suis au livre d'or.
    J'ai trouvé un programme PHP me permettant de recuperer le texte d'une textbox de l'écrire dans un fichier .txt et d'afficher le contenu de ce texte a chaque fois..
    Sur la version que j'ai prise l'attribut du fopen était "a" je l'ai remplacé en "r+" pour écrire non pas à la fin mais au début du fichier texte (pour que ce soit le dernier message posté qui s'affiche en premier et non pas le contraire)

    Le problème est que le dernier message posté écrase maintenant le précédent...
    Avez vous une idée de solution ?

    Voila le livre d'or en question :
    http://davboc.free.fr/Tahlaniak/Site...L/livredor.php

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    pour ecrire dans un fichier tu deus option soit w(write) ou la tu ecrase le fichier ou a(ajouter)
    donc il faut aouvrir eton fichier en ajout
    pour placer le pointeur au debut du fichier il faut utiliser Boef et pour ce placer a la fin c'est EOF

    voici un lien qui pourrai t'aiderhttp://fr2.php.net/manual/fr/function.fwrite.php

  3. #3
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    Merci,
    mais je ne comprends pas ou placer ce beof (oui je suis un noob au fait)
    C'est bizarre pourtant regardez ce que dis la doc
    'r+' Open for reading and writing; place the file pointer at the beginning of the file.
    et voila mon script d'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    //Ouverture du fichier en ecriture
    $fp = fopen("../livredor.txt","r+");
     
    //On convertit les caracteres html
    $nom = htmlspecialchars($_POST['nom']);
    $mail = htmlspecialchars($_POST['mail']);
    $message = stripslashes(nl2br(htmlentities($_POST['message'])));
    $d = date ( "d/m/Y H:i:s" );
     
    $page = "";
    $lemail = "<a href=\"mailto:$mail\">$mail</a>";
    $page .= "<b>$nom</b> (".$lemail.") - $d<br>$message<br><hr>\n";
     
    //On rajoute le message
    fwrite($fp,"$page" ,strlen("$page"));
     
    //fermeture du fichier
    fclose($fp);
     
    //On affiche le message enregistr&eacute;
    echo "Merci $nom, nous avons enregistr&eacute;: <br>";
    echo "email : $mail <br> message : $message";
     
    ?>
    <br />
    <a href="livredor.php">Retour au Livre d'Or</a>

  4. #4
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    j'ai essayé de rajouter $fp=fseek($fp,beof) et en remplacant r+ par a mais c'est toujours la meme

    j'ai aussi essayé rewind($fp); avant l'ecriture et avec l'argument 'a'
    mais sans succès...

  5. #5
    Membre expérimenté
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Points : 1 309
    Points
    1 309
    Par défaut
    J'crois que c'est ton fwrite qui ne va pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite($fp,$page,strlen($page));

  6. #6
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    <?php
    // on test la présence et le contenue des variables
    if(isset($_POST['mail']) && isset($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['nom'])){
    //On vire les caracteres html et php et on échappe les quotes
    $nom = strip_tags(addslashes($_POST['nom']));
    $mail = strip_tags(addslashes($_POST['mail']));
    $message = nl2br(strip_tags(addslashes($_POST['message'])));
    $d = date ( "d/m/Y H:i:s" );
    $guestbookFile = "../livredor.txt";
    $page = '';
    $mail = '<a href="mailto:$mail">$mail</a>';
    $newEntry .= '<b>'.$nom.'</b> ('.$mail.') - '.$d.'<br />'.$message.'<br /><hr /><br />';

    //Ouverture du fichier en ecriture
    if(!$fp = fopen($guestbookFile,"r+")){
    echo
    'une erreur est survenue... votre message n'a p&ucric;t &ecirc;tre ajout&eacute;... .. .';
    } else {
    // on récupère le contenu du fichier
    $contents = file_get_contents($guestbookFile);
    //On rajoute le message
    fputs($fp,$newEntry.$contents);
    //fermeture du fichier
    fclose($fp);
    //On affiche le message enregistr&eacute;
    echo 'Merci '.$nom.', votre message a &eacute;t&eacute; enregistr&eacute; :<br />email : '.$mail.' <br /> message : '.$message;
    }
    } else {
    echo
    'Les champs "nom" et "message" doivent &ecirc;tre rempli pour que votre message soit enregistr&eacute; !';
    }
    ?>
    <br />
    <a href="livredor.php">Retour au Livre d'Or</a>

  7. #7
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    ah ça fait plaisir !
    merci !
    Y'a deux trois ptits bugs mais ça marche mieux !
    (le ' de n'a il fait deconner et l'adresse mail affichée est $mail)

    MERCIIIIIIIIII !!

    [edit]
    Pour ceux que ça interesse voila une version sans bug (enfin presque, les " ' " s'affichent " \\\' " si quelqu'un sait comment les remplacer plutot par &acute; ... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    // on test la présence et le contenue des variables
    if(isset($_POST['mail']) && isset($_POST['nom']) && !empty($_POST['mail']) && !empty($_POST['nom'])){
    //On vire les caracteres html et php et on échappe les quotes
    $nom = strip_tags(addslashes($_POST['nom']));
    $mail = strip_tags(addslashes($_POST['mail']));
    $message = nl2br(strip_tags(addslashes($_POST['message'])));
    $d = date ( "d/m/Y H:i:s" );
    $guestbookFile = "../livredor.txt";
    $page = '';
    $mail = '<a href="mailto:$mail">'.$mail.'</a>';
    $newEntry .= '<b>'.$nom.'</b> ('.$mail.') - '.$d.'<br />'.$message.'<br /><hr /><br />';
     
    //Ouverture du fichier en ecriture
    if(!$fp = fopen($guestbookFile,"r+")){
    echo 'une erreur est survenue... votre message n&acute;a p&ucric;t être ajout&eacute;...';
    } else {
    // on récupère le contenu du fichier
    $contents = file_get_contents($guestbookFile);
    //On rajoute le message
    fputs($fp,$newEntry.$contents);
    //fermeture du fichier
    fclose($fp);
    //On affiche le message enregistr&eacute;
    echo 'Merci '.$nom.', message bien &eacute;t&eacute; enregistr&eacute; :<br />Email : '.$mail.' <br /> message : '.$message;
    }
    } else {
    echo 'Les champs "nom" et "message" doivent &ecirc;tre rempli pour que votre message soit enregistr&eacute; !';
    }
    ?>
    <br />
    <a href="livredor.php">Retour au Livre d'Or</a>
    Encore merci à kankrelune et jeff_! !

  8. #8
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Davboc
    ah ça fait plaisir !
    (le ' de n'a il fait deconner et l'adresse mail affichée est $mail)
    C'est corrigé j'avais oublié d'échapper l'apostrophe de n'a et de concaténer $mail... et j'avais oublié de tester $_POST['message']... .. .

    Citation Envoyé par Davboc
    Pour ceux que ça interesse voila une version sans bug (enfin presque, les " ' " s'affichent " \\\' " si quelqu'un sait comment les remplacer plutot par &acute; ... )
    &acute; correspond à "é" rien à voir avec les antislashes fais stripslashes($message) pour l'affichage... .. .

    @ tchaOo°


    <?php
    //&#160;on&#160;test&#160;la&#160;présence&#160;et&#160;le&#160;contenue&#160;des&#160;variables
    if(isset($_POST['mail'])&#160;&&&#160;isset($_POST['nom'])&#160;&&&#160;isset($_POST['message'])&#160;&&&#160;!empty($_POST['mail'])&#160;&&&#160;!empty($_POST['nom'])&#160;&&&#160;!empty($_POST['message'])){
    //On&#160;vire&#160;les&#160;caracteres&#160;html&#160;et&#160;php&#160;et&#160;on&#160;échappe&#160;les&#160;quotes
    $nom&#160;=&#160;strip_tags(addslashes($_POST['nom']));
    $mail&#160;=&#160;strip_tags(addslashes($_POST['mail']));
    $message&#160;=&#160;nl2br(strip_tags(addslashes($_POST['message'])));
    $d&#160;=&#160;date&#160;(&#160;"d/m/Y&#160;H:i:s"&#160;);
    $guestbookFile&#160;=&#160;"../livredor.txt";
    $page&#160;=&#160;'';
    $mail&#160;=&#160;'<a&#160;href="mailto:'.$mail.'">$mail</a>';
    $newEntry&#160;.=&#160;'<b>'.$nom.'</b>&#160;('.$mail.')&#160;-&#160;'.$d.'<br&#160;/>'.$message.'<br&#160;/><hr&#160;/><br&#160;/>';

    //Ouverture&#160;du&#160;fichier&#160;en&#160;ecriture
    if(!$fp&#160;=&#160;fopen($guestbookFile,"r+")){
    echo&#160;
    'Une&#160;erreur&#160;est&#160;survenue...&#160;votre&#160;message&#160;n'a&#160;p&ucric;t&#160;&ecirc;tre&#160;ajout&eacute;...&#160;..&#160;.';
    }&#160;else&#160;{
    //&#160;on&#160;récupère&#160;le&#160;contenu&#160;du&#160;fichier
    $contents&#160;=&#160;file_get_contents($guestbookFile);
    //On&#160;rajoute&#160;le&#160;message
    fputs($fp,$newEntry.$contents);
    //fermeture&#160;du&#160;fichier
    fclose($fp);
    //On&#160;affiche&#160;le&#160;message&#160;enregistr&eacute;
    echo&#160;'Merci&#160;'.$nom.',&#160;<br&#160;/>Votre&#160;message&#160;a&#160;bien&#160;&eacute;t&eacute;&#160;enregistr&eacute;&#160;:<br&#160;/>email&#160;:&#160;'.$mail.'&#160;<br&#160;/>&#160;message&#160;:&#160;'.stripslashes($message);
    }
    }&#160;else&#160;{
    echo&#160;
    'Les&#160;champs&#160;"nom"&#160;et&#160;"message"&#160;doivent&#160;&ecirc;tre&#160;rempli&#160;pour&#160;que&#160;votre&#160;message&#160;soit&#160;enregistr&eacute;&#160;!';
    }
    ?>
    <br&#160;/>
    <a&#160;href="livredor.php">Retour&#160;au&#160;Livre&#160;d'Or</a>

  9. #9
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    é c'est &eacute e ' c'est &acute j'ai vérifié ;p
    Merci pour la correction..
    il met toujours un / au lieu de trois c'est normal ?

  10. #10
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par Davboc
    é c'est &eacute e ' c'est &acute j'ai vérifié ;p
    Merci pour la correction
    Prend la modification que je viens de faire j'avais oublié de teste $_POST['message']... .. .

    @ tchaOo°

  11. #11
    Membre habitué Avatar de Davboc
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    266
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 266
    Points : 168
    Points
    168
    Par défaut
    merci

  12. #12
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Putain j'ais pas les yeux en face des trou à cette heure ci... .. .

    remplace...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mail = '<a href="mailto:'.$mail.'">$mail</a>';
    par...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mail = '<a href="mailto:'.$mail.'">'.$mail.'</a>';
    @ tchaOo°

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/11/2010, 15h55
  2. Réponses: 10
    Dernier message: 23/09/2010, 16h42
  3. écrire au début d'un fichier
    Par luna007 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 01/09/2009, 16h30
  4. écrire dans un fichier sans l'écraser
    Par radahm dans le forum Import/Export
    Réponses: 3
    Dernier message: 15/05/2009, 14h52
  5. Réponses: 2
    Dernier message: 05/04/2007, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo