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 :

Problème avec fonction preg_match


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut Problème avec fonction preg_match
    Salut,

    Je m'arrache les cheveux avec un truc tout con mais là je sèche !!

    J'ai la variable $prix qui prend la valeur d'une variable de session.
    Cette variable de session est la valeur d'un champs de ma BD qui est défini en float(10,2).

    Je veux que si le prix est un décimal entier (genre 23 € par exemple) alors il ne m'affiche pas de chiffre après la virgule et inversement si le prix est un décimal avec virgule (genre 16.90) alors j'affiche 2 chiffres après la virgule.

    Voici mon code :

    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
     
    <?php $nbArticles = count($_SESSION['panier']['libelleProduit']);
     
    for ($i=0; $i < $nbArticles ; $i++) {
     
        $libelle = $_SESSION['panier']['libelleProduit'][$i];
        $prix = $_SESSION['panier']['prixProduit'][$i]; ?>
     
        <p><?php if (preg_match('/(.|,)/', $prix, $out)) {
     
             echo $libelle.' '.$prix.' €';
     
        } else {
     
            echo $libelle.' '.number_format($prix,2).' €';
     
        } ?></p>
     
        <p>&nbsp;</p>
     
    <?php } ?>
    Et voici mon résultat :

    Bad Boy BraziI Fightshorts - Ice 32.9 €
    Bad Boy Shadow Tshirt 16.9 €
    Venum Giant Tshirt - Black 23 €

    Je veux avoir :

    Bad Boy BraziI Fightshorts - Ice 32.90 €
    Bad Boy Shadow Tshirt 16.90 €
    Venum Giant Tshirt - Black 23 €

    Merci d'avance pour votre aide, il ne doit pas manquer grand chose...

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Dans ton algo si la chaine de caractère comporte un point ou une virgule alors elle est renvoyée sans traitement. C'est pas ce que tu dis vouloir...
    Et il faut échapper ton "." avec un anti slash car c'est un caractère spécial.

    Par ailleurs utilise foreach pour lister un tableau en php (c'est prévu pour).

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut
    Salut,

    Merci pour ta réponse mais n'étant pas un expert de cette fonction, je ne comprend pas ce qui ne va pas.

    1 / "Renvoyé sans traitement" , que veut tu dire ?
    En fait je ne sais pas à quoi sert le 3 ième paramètre de cette fonction ($out).

    2 / il faut que je mette : if (preg_match('/(\.|,)/', $prix, $matches)) { ?

    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    faut pas se compliquer la vie comme ça !
    Une autre piste qui répond à tous les cas de figures en 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $prix = '16.90';
    $dec  = (false !== strpos($prix, '.')) ? 2 : 0;
    $a    = number_format($prix, $dec);
     
    ?>
    adapté à ton bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for($i = 0; $i < $nbArticles; ++$i) {
       $libelle = $_SESSION['panier']['libelleProduit'][$i];
       $prix    = $_SESSION['panier']['prixProduit'][$i];
       $dec     = (false !== strpos($prix, '.')) ? 2 : 0;
       echo "<p>$libelle ".number_format($prix, $dec).' €</p>';
    }

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 77
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    faut pas se compliquer la vie comme ça !
    Une autre piste qui répond à tous les cas de figures en 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
     
    $prix = '16.90';
    $dec  = (false !== strpos($prix, '.')) ? 2 : 0;
    $a    = number_format($prix, $dec);
     
    ?>
    adapté à ton bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for($i = 0; $i < $nbArticles; ++$i) {
       $libelle = $_SESSION['panier']['libelleProduit'][$i];
       $prix    = $_SESSION['panier']['prixProduit'][$i];
       $dec     = (false !== strpos($prix, '.')) ? 2 : 0;
       echo "<p>$libelle ".number_format($prix, $dec).' €</p>';
    }
    Merci, effectivement je me faisais chié....

    Simple et efficace !

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Citation Envoyé par lebanner82 Voir le message
    Salut,

    Merci pour ta réponse mais n'étant pas un expert de cette fonction, je ne comprend pas ce qui ne va pas.

    1 / "Renvoyé sans traitement" , que veut tu dire ?
    En fait je ne sais pas à quoi sert le 3 ième paramètre de cette fonction ($out).

    2 / il faut que je mette : if (preg_match('/(\.|,)/', $prix, $matches)) { ?

    Merci d'avance
    1/ Le troisième paramètre (qu'on nomme habituellement $match) sert pour enregistrer les captures, il ne gênait pas mais tu n'en avait pas besoin.
    Je disais que dans ta condition, tu écrivais textuellement :" si je trouve un point ou une virgule, j'affiche le prix sans traitement particulier, sinon j'applique number_format". Or il fallait faire l'inverse.

    2/ oui

    C'était pour te répondre sur ces points mais la méthode de rawsrc est effectivement beaucoup plus simple et efficace.

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

Discussions similaires

  1. Problème avec fonctions et string/char
    Par vdumont dans le forum C++
    Réponses: 6
    Dernier message: 08/04/2006, 16h54
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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