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 :

Lire la chaîne à l envers [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Lire la chaîne à l envers
    Bonjour,
    J aimerai savoir s il est possible de lire une chaîne en partant de la fin et de supprimer tous ce qui est après la dernière balise?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    [ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]45[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]
    Je dois supprimer la dernière balise 5.
    j'ai fait une condition sur les pages en cas de retour en arrière.
    lorsque l'user clique sur le bouton précédent, cela arrive dans le elseIf.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    elseif(isset($_SESSION["Balises2"])){
    $page='4';
    $Listenature = $_SESSION['listetype'];
    $nature = $_SESSION['Balises2'];
    $pos = strpos($nature, $page);
    // //Supprimer la chaine après la valeur de $pos
    $_SESSION['Balises2'] = substr($nature,0,$pos);
    $_SESSION['Balises2'] = $_SESSION['Balises2'].$page;
    echo $_SESSION['Balises2']. "ELSEIF";
    c'est très bien pour page en page.
    Mais j'ai des pages qui sont appelées plusieurs fois.
    j'aimerai que sur ces pages si l'user à remplit plusieurs fois le même formulaire sur la même page, lorsqu'il fait précédent, cela ne retire que la dernière balise renseignée, et non toutes les balises avec le même chiffre.
    Ex:
    j'ai mis un marqueur dans chaque pages.
    Page 1 >> formulaire rempli redirige vers la page 2.
    Page2 >>demande si besoin d'ajouter une autre intervention.
    Si oui ouverture de la page 3 avec le formulaire. une fois rempli l'user clique sur suivant et cela redirige vers la page 2, qui prends la nouvelle balise, et redemande si besoin d'ajouter une autre intervention.
    Si l'user fait encore oui sur la page2, cela redirige vers la page 3, et ainsi de suite.
    Si l'user fait précédent sur la page 2, cela redirige à la page 1 et supprime les balises avec le même marqueur.
    J'aimerai que je puisse faire en sorte que cela ne supprime que la dernière balise et son marqueur.

    Sachant que le chiffre n est pas toujours le même.
    J'ai essayé avec strrpos() et strripos(), sans résultats.

    voilà ce que j'ai essayé de faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    elseif(isset($_SESSION['Balises2'])){
            $page='6';
       $nature = $_SESSION['Balises2'];
        $pos = strpos($nature, -$page);
        // // //Supprimer la chaine après la valeur de $pos = 25
       $_SESSION['Balises2'] = strrpos($nature,0,-$pos);
    //precedent();
    echo $_SESSION['Balises2']. "ELSEIF";
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 333
    Points : 15 677
    Points
    15 677
    Par défaut
    Citation Envoyé par wisefun77 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]45[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]
    dans ce texte vous voulez supprimer le dernier élément entre crochet et le nombre juste avant, c'est bien ça ?

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    A mon avis, il faut employer une regex...

  4. #4
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour Mathieu,
    Oui c est bien celà.
    Bonjour LaurentSc,
    C est quoi le regex?.
    Merci

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    regex = expression régulière

    https://fr.wikipedia.org/wiki/Expres...A9guli%C3%A8re

    https://www.lucaswillems.com/fr/arti...ons-regulieres

    Moi, je ne les maîtrise pas mais CosmoKnacki est un spécialiste.

    Je pense qu'il faut t'intéresser à https://www.php.net/manual/fr/function.preg-replace.php

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 333
    Points : 15 677
    Points
    15 677
    Par défaut
    essayez ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $d = "[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]45[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>ZzZ]5[DEM_PDT>TPX_1>]";
     
     
    $regex = "/(.*)[0-9]+\\[.*\\]/";
     
    preg_match($regex, $d, $resultats);
     
     
    $reste = $resultats[1];
    // $reste contient la chaine sans le dernier morceau

  7. #7
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour Mathieu,
    Je vais tester cette après midi.
    Merci à vous deux pour toutes ces infos.

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    j'ai testé le code de Mathieu et il marche...
    Pouvez-vous, Mathieu, expliquer cette regex ?

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Tu peux le faire de mille et une manières:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $str = '[ADC_START][SDP]1[GUICHET]2[DEM]3[USER_CMDB_DIF_NON]45[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]5[DEM_PDT>TPX_1>]';
     
    $nl = PHP_EOL; // = '<br>';
     
    echo // en s'appuyant sur le ] précédant
         substr($str, 0, strrpos($str, ']', -2) + 1), $nl,
         preg_replace('~.*]\K.+~', '', $str),         $nl,
     
         // en s'appuyant uniquement sur la fin de chaîne
         preg_replace('~\d*[^]]*]\z~', '', $str),     $nl;

  10. #10
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour CosmoKnacki,
    Merci beaucoup, je vais tester cette après midi.

  11. #11
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour CosmoKnacki, Mathieu, LaurentSc,

    J'ai testé le code de @Mathieu, il fonctionne à merveille. J'ai créé une function, de chaque code, que j'appelle dans toutes mes pages.
    Comme cela je pourrais aussi mettre le code de @CosmoKnacki, qui fonctionne à merveille, si je veux supprimer plus que la dernière balise.
    Un énorme et sincère merci à vous tous.
    Demain je passe le teste d'entretient finale.

  12. #12
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wisefun77 Voir le message
    Demain je passe le teste d'entretient finale.
    attention à l'orthographe : le test de l'entretien final...

  13. #13
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour LaurentSc,
    attention à l'orthographe : le test de l'entretien final...
    La honte pour moi.
    Merci beaucoup.

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Ce n'était pas le but mais seulement de te recommander de faire attention s'il y a de l'écrit dans ton test. Merci de nous tenir au courant. Bonne chance.

  15. #15
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour LaurentSc,

    Si j'ai bien compris lors de l'entretient:
    Le développeur est dans une situation de santé grave. Quand il reviendra il reprendra sa place.
    Je ne suis là que pour le remplacer et je l'accepte de tout cœur.
    Je ne peux reprendre son code, car il a tout développé sous Symfony.
    Les boss ne veulent pas revivre une telle situation, de ne pouvoir modifier ou débugger une application qu'ils ne maitrisent pas.
    Donc mon travail est de faire une application en PHP sans base de données, sans Framework, et très très peu de JS.

    Nous sommes encore deux sur la liste.
    Je vais le savoir ce soir.

    Merci beaucoup.

  16. #16
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Entretien sans "t" final ;-)

    Juste une remarque : Symfony ou Laravel ou autre chose (un framework) permet d'accélérer le développement puisque ces outils viennent avec quantité d'outils et de fonctionnalités déjà implémentées. Un framework permet de ne pas réinventer la roue, d'aller plus vite et de profiter de l'expertise de ceux; hyper nombreux, qui ont développé les frameworks. Ne pas utiliser un framework et tout réinventer est un choix... mais est-ce le bon ? J'en doute.

    Il existe aussi tant et plus de tutoriels que, oui, prendre en main un projet Symfony (ou Laravel ou ...) demande un temps d'apprentissage mais ce temps est bien mieux investi que de réinventer l'ensemble. Pour moi, si ton projet est tout petit; pas de souci à faire du PHP "natif" (on appelle cela aussi du PHP "vanilla"). Mais, si le projet est un tant soit peu important; le bon choix est d'opter pour un framework.

    Demain, dans un an, ... tu quittes le projet : ce sera plus simple de trouver un nouveau développeur PHP connaissant Symfony que de former quelqu'un à reprendre ton code; le comprendre; l'améliorer; ... et cela; si tu n'as pas de documentations; c'est encore pire.

    Donc, en bref, dire "Plus de framework" est un choix qui n'est pas innocent.

    Tu dis aussi "pas de base de données"; euh? pourquoi ? Si tu dois stocker des informations, c'est quand même plus facile d'avoir une DB que de stocker dans un fichier Excel non ?

    J'ai l'impression que ton management est confronté à une situation de crise (l'absence du gars) et prends des décisions hâtives et pas du tout pérennes. Juste mon avis à la lecture de ton dernier post.

  17. #17
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Entretien sans "t" final ;-)
    Décidemment entretien me fais la misère.....
    J'ai l'impression que ton management est confronté à une situation de crise (l'absence du gars) et prends des décisions hâtives et pas du tout pérennes. Juste mon avis à la lecture de ton dernier post.
    Tout a fait d'accord avec toi.
    Le temps que j'ai perdu à redévelopper cette petite application, j'aurais pu le faire en apprenant Symfony.
    Maintenant je dois faire toute la documentation sur l'appli pour aider les autres.
    Pas de base de données car pas besoin dans cette appli. on ne conserve aucune donnée.
    L'appli comporte 120 pages, il y a plein de pages en doublon.
    Si un jour cette appli doit être utilisée par un smartphone ou une tablette, alors là c'est la cata...

  18. #18
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    J'en perds mon latin.
    j'ai testé cette function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?PHP
    function precedent()
    {
     
        $d = $_SESSION['Balises2'];
    $regex = "/(.*)[0-9]+\\[.*\\]/";
    preg_match($regex, $d, $resultats);
    $reste = $resultats[1];
    // $reste contient la chaine sans le dernier morceau
    echo $reste. "ELSEIF";
     
    }
    ?>
    Elle fonctionne bien quand elle est renseignée dans chaque page.
    J'ai mis cette function dans un fichier dans un dossier.
    J'appel cette function dans mes pages.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    elseif(isset($_SESSION['Balises2'])){
        $page='3';
        precedent();
    }
    Mais quand je fais appel à elle avec le bouton précédent, un message d'erreur me dit que la function n'est pas définie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined function precedent() in C:\wamp\www\_Dev\sdp-asset2.php on line 20
    Pourtant quand je tape le nom de la function il ne l'affiche pas en erreur, et la voit bien dans l'IntelliSense.
    Pourquoi?

    Merci

  19. #19
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci de donner le code de sdp-asset2.php et d'en signaler la ligne 20.

    Comme le sujet actuel n'a rien à voir avec le titre de la discussion (qui, en plus, est ), je te conseille de créer une nouvelle discussion.

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

Discussions similaires

  1. lire un iterator à l'envers
    Par mauroyb0 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/05/2007, 10h12
  2. lire une chaîne > 255 d'un fichier texte
    Par pascal54 dans le forum Delphi
    Réponses: 5
    Dernier message: 21/02/2007, 23h38
  3. Comment lire un fichier à l'envers ?
    Par spip68 dans le forum Langage
    Réponses: 15
    Dernier message: 13/12/2006, 00h24
  4. [MySQL] Lire résultat requête à l'envers
    Par Kyvin dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 04/04/2006, 20h33
  5. [SAX] Lire une chaîne de caractères comme un XML
    Par Le Furet dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 23/01/2006, 08h57

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