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

EDI, CMS, Outils, Scripts et API PHP Discussion :

afficher un élément sur deux dans un fichier texte


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut afficher un élément sur deux dans un fichier texte
    J'ai de nouveau un léger soucis, j'ai besoin de supprimé plusieurs ligne de mon fichier texte sachant que je connais les indices à supprimer.
    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
     
    foreach($contenu_array as $cle=>$valeur)
        {
     
     
        if(!empty($_POST["$cle"]))
       { echo $valeur;
          echo$cle;   
     
      //si checkbox 1 et 3 coché  echo$cle affiche 0 et 2, correspondant bien //aux indice que je veux supprimer dans mon fichier .txt
     
     
       //ici j'ouvre mon fichier
        //je veux supprimer les lignes de mon tableaux correspondant à $cle
     
     
       }
    }

    la ou sont les commentaires je pensé mettre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fichier = fopen("photoheber.txt","r+");
      unset($fichier,$cle);
    fclose($fichier);
    Cependant quand je réouvre mon fichier rien n'a changé, aucun texte correspondant n'est supprimé

    D'ou cela pourrait venir?

    merci d'avance

  2. #2
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    Les variables qui te permettent d'accéder au fichier sont des copies du contenu, les modifier ne sert à rien (et en plus foreach fait une nouvelle copie).
    Le plus simple serait de lire le fichier avec file() (qui conserve les sauts de lignes dans le texte), de le parcourir avec un for classique, de remplacer les lignes à supprimer par "", puis de réécrire avec implode() et file_put_contents.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    oui mais je dois rester dans ma boucle pour effectuer cela, car je récupére les ligne uniquement si les checkbox sont cochés.
    Si j'effectue ces opération à l'extérieur alors je récupérerais pas les bonne valeur à supprimer

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
       $fichier = fopen("photoheber.txt","r");
     
       $a = str_replace("$valeur","",$fichier); 
    $b=implode($a,$contenu_array);
    fopen("photoheber.txt","r");
    fwrite($file,$b);
       fclose($fichier);
    voila ce que j'ai tenté d'insérer dans la boucle ou j'avais mis le commentaire dans le premier message, mais cela ne marche toujours pas l'erreur affiché est:


    Warning: fwrite(): 4 is not a valid stream resource in C:\wamp\www\photo2\validphoto.php on line 45
    ./PHOTOHEBER/1731.jpg
    Warning: fwrite(): 7 is not a valid stream resource in C:\wamp\www\photo2\validphoto.php on line 45
    ./PHOTOHEBER/100_0926.JPG
    Warning: fwrite(): 10 is not a valid stream resource in C:\wamp\www\photo2\validphoto.php on line 45
    ./PHOTOHEBER/100_0598.JPG

    Bonne soirée et merci d'avance

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Je te recommande de suivre les indications de Caerbannog.
    Doc de file( ) : http://fr.php.net/file
    implode( ) : http://fr.php.net/implode
    file_put_contents : http://fr.php.net/file-put-contents
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    C'est ce que j'ai fais étant donné que un file put contents correspond à l'ouverture, l'écriture et la fermeture d'un fichier! donc cela reviens au même.
    Si je post, c'est justement parce que cela fais plusieurs heures voir plusieurs jours que je cherche et que je ne parviens pas malgrès des centaines de test et de variantes à obtenir ce que je souhaite.

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Non, ce n'est pas du tout ce que tu fais.

    Si je post, c'est justement parce que cela fais plusieurs heures voir plusieurs jours que je cherche et que je ne parviens pas malgrès des centaines de test et de variantes à obtenir ce que je souhaite.
    Faudrait suivre les conseils judicieux prodigués

    Tout est là :

    Les variables qui te permettent d'accéder au fichier sont des copies du contenu, les modifier ne sert à rien (et en plus foreach fait une nouvelle copie).
    Le plus simple serait de lire le fichier avec file() (qui conserve les sauts de lignes dans le texte), de le parcourir avec un for classique, de remplacer les lignes à supprimer par "", puis de réécrire avec implode() et file_put_contents.
    Si tu n'arrives pas à t'en sortir alors donne un extrait significatif de ton fichier texte avant traitement, la structure des données réceptionnées en POST et un extrait significatif du fichier texte attendu après traitement.

    A te lire.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Oui j'ai compris cela, sauf que le soucis c'est que je peux accéder aux variable uniquement par le biais de la boucle, car la boucle me permet de retrouver les checkbox du formulaire précédent qui ont été coché, et donc de connaitre les valeurs à supprimer pour le tableau (1chekbox correspondant à une image et étant un indice de tableau)

    dans la page de formulaire il y'a la meme boucle que précédement dans laquelle on trouve stocké dans une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    	print("<img src=\"$valeur\" border=\"0\" width=\"20%\">");
    	//echo "<tr><td> <input type='checkbox' name='choix_".$valeur."' value='ok' /> ";
    echo "</TD><TD><tr><td> <input type=\"checkbox\"  name=\"$cle\" >$valeur";//value=\"true\"
    lorsque le formulaire est valider cela est renvoyé par la page dont j'ai coller le code plus haut, je le remet ici:

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    <?php
     
        $fichier = 'photoheber.txt';  //nom du fichier ou est écrit toute les photos //présente sur le formulaire précédent du type ./chemin/nomfichier.extension
     
      $contenu_array = file($fichier);  //je fais de ce fichier une chaine 
     
     
     
     
    foreach($contenu_array as $cle=>$valeur)  //decompose le fichier pour chaq //image
        {
     
     
        if(!empty($_POST["$cle"]))  //test si checkbox est coché
       { //echo $valeur;       //echo valeur renvoi le nom de la checkbox    //identique au nom de l'image
     
     
     
     //  echo $cle;       //cle représente l'indice du tableau correspondant au //meme indice que dans le fichier texte
     
        $file = fopen("photoheberuser.txt","a");    //creation nouveau fichier
       fwrite($file,$valeur);            //ecriture du nom des checkbox=photo coché
      fwrite($file,"\n");
      fclose($file);                   //fermeture
     
      //jusque ici tout fonctionne parfaitement
     
    // maintenant je souhaite supprimer du premier fichier les liens que j'ai ajouté 
    //à photoheberuser.txt afin par la suite de gérer les photo accepté par //l'admin pour qu'elle soit visible par les utilisateurs
     
     
     
    //a partir d'ici je vois plus trop comment faire
     
       $fichier = fopen("photoheber.txt","r");   //ouverture de l'ancien fichier ou je //veux supprimer les lignes adéquates
     
     a = str_replace("$valeur","",$fichier);   //je voulais d'abord remplacer les nom //par du vide
    $b=implode($a,$contenu_array); //ensuite rassemblé le contenu
    fopen("photoheber.txt","r"); //pour affecter ces modification au fichier
    fwrite($file,$b);
       fclose($fichier);
     
     
     
       }
     
    }
     
     
    ?>
    voyez vous ce que je désire faire?
    merci et bonne nuit à vous

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Re,
    Ta réponse ne contient pas les infos demandées précédemment, je ne peux donc rien faire de plus pour toi.
    En espérant que qqu'un pourra te dépanner.
    A+
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Je te recommande de suivre les indications de Caerbannog.
    Doc de file( ) : http://fr.php.net/file
    implode( ) : http://fr.php.net/implode
    file_put_contents : http://fr.php.net/file-put-contents
    Hier 23h40
    Puis-je insérer cela dans ma boucle? cela peut fonctionner???

    car j'avais oublié de précisé que j'ai deux fichiers; fichierheber.txt le fichier d'origine ou je copie une partie dans mon nouveau fichier texte fichierheberuser.txt et c'est ensuite que je désire supprimé ces informations copié dans le fichier initial.

    Donc l'oubli de cette précision à laissé pensé que je voulais supprimé les copies du contenues, excusez moi

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Je m'y suis pris autrement et cela marche, c'est à dire que j'ai crée un fichier auxiliaire ou j'inscris les données voulu. Maintenant je voudrais simplement remplacer mon fichier initial par ce fichier temporaire.

    j'ai essayer de supprimer le fichier initial puis de renommer le fichier auxiliaire (avec le même nom que l'original)

    J'ai essayer de remplacer le fichier original par le fichier auxiliaire

    mais je ne sais pas trop comment m'y prendre

    pourriez vous m'aider?

  12. #12
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Pour supprimer un fichier : unlink( ) http://fr.php.net/unlink
    Pour renommer un fichier : rename( ) http://fr.php.net/rename
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  13. #13
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    Joli courage Séb.
    Moi c'est ma dernière réponse dans ce sujet.

    Jérém08 : plutôt que décrire dans un fichier temporaire, écris dans une variable (avec $var.= "suite du texte") et écris la variable dans ton fichier à la fin (avec file_put_contents).

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    merci pour votre aide, mais j'y suis parvenu juste aprés avoir poster mon dernier message.

    Admettons que je renvoie les lignes d'un fichier sous la forme d'un tableau, m'est t'il possible d'afficher une ligne sur 2???
    car j'ai ma boucle foreach($contenu_array as $cle=>$valeur) et en essayant de placer une boucle for avant foreach, ou après, cela ne me donne pas l'affichage d'une ligne sur 2

    Et voici la boucle for:
    for ($i=0;$i<count(file($fichier));$i+=1)

  15. #15
    Inscrit
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Points : 273
    Points
    273
    Par défaut
    Le but c'est de remplacer le foreach par le for ; l'idée pour une ligne sur deux c'est de remplacer $i+=1 par $i+=2

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    mais ma boucle foreach est primordiale, car j'utilise $valeur à l'interieur ainsi que $cle pour les pages suivante.

    donc une boucle for à l'intérieur c'est ce que je pensé mais sa ne marche pas.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Pour etre plus claire je me suis arrangé pour écrire dans mon fichier de telle maniére

    "chemin\nom.image" "pseudohébergeur"
    "chemin\nom.image2" "pseudohébergeur"

    toute la ligne représentant le $valeur de ma boucle foreach.
    cependant quand j'affiche tout cela, j'ai une image (une sur deux) qui est parfaite, et une autre blanche puisque dans le fichier cela est le pseudo de l'hébergeur et donc il ne faut pas l'afficher.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    merci, mais du coup je n'aurais plus mon $cle et mon $valeur?

Discussions similaires

  1. Styliser un élément sur deux dans une boucle while
    Par skywhi dans le forum Langage
    Réponses: 6
    Dernier message: 12/12/2013, 13h59
  2. Réponses: 5
    Dernier message: 08/01/2013, 17h56
  3. Afficher un résultat sur deux critères du même champ
    Par julien6660 dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 11h30
  4. Réponses: 6
    Dernier message: 23/02/2006, 12h09
  5. le sous formulaire s'affiche une fois sur deux
    Par Math dans le forum Access
    Réponses: 16
    Dernier message: 10/10/2005, 15h25

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