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

PHP & Base de données Discussion :

boucle while ne fonctionne que partiellement


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Femme Profil pro
    en formation
    Inscrit en
    Septembre 2019
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : en formation

    Informations forums :
    Inscription : Septembre 2019
    Messages : 90
    Par défaut boucle while ne fonctionne que partiellement
    Bonjour et bonne année à tous.
    Je ne trouve pas la réponse à mon problème ou alors je n'arrive pas à mettre en place ce que je trouve.
    Je récupère les informations 'date de début, date de fin et chambre d'une tables MySQL.
    Si aucune information dans cette table je dois commencer par la chambre 101.
    Et c'est là que ça coince impossible de lui dire que lorsque le résultat $row['chambre'] est vide, d'affecter la valeur 101 à $numero.

    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
      function verif($name, $choicecity, $datedebut, $datefin){
          $host = 'localhost';
          $dbname = 'mabase';
          $username = 'root';
          $password = '';
          $dsn = "mysql:host=$host;dbname=$dbname"; 
          $pdo = new PDO($dsn, $username, $password);
          $sql="SELECT `debut`, `fin`, `chambre` FROM reservation WHERE `choicecity`='$choicecity'";   
          $stmt = $pdo->query($sql);  
     
          while($row = $stmt->fetch(PDO::FETCH_ASSOC)):
            $numero=($row['chambre']);       
            if ($numero==='') {$numero=101;
              $foo = $this->rec($name, $choicecity, $datedebut, $datefin, $numero, $pdo);}
            if ($numero==='101'){$numero=102;
              $foo = $this->rec($name, $choicecity, $datedebut, $datefin, $numero, $pdo);}
            if ($numero==='102'){$numero=103;
              $foo = $this->rec($name, $choicecity, $datedebut, $datefin, $numero, $pdo);}  
            if ($numero==='103'){$numero=104;
              $foo = $this->rec($name, $choicecity, $datedebut, $datefin, $numero, $pdo);}
            if ($numero==='104'){$numero=105;
              $foo = $this->rec($name, $choicecity, $datedebut, $datefin, $numero, $pdo);}
     
          endwhile;
      }
    Si je donne directement dans MySQL la valeur 101 à la première ligne les autres prennent les valeurs 102,103 ect

    id creation debut fin choicecity chambre nom mail
    9 01/01/2021 02/01/2021 03/01/2021 Albi 101 un un.free.fr
    20 01/01/2021 02/01/2021 03/01/2021 Albi 102 deux deux@free.fr
    21 01/01/2021 02/01/2021 03/01/2021 Albi 103 trois trois@free.fr

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2019
    Messages : 14
    Par défaut
    Hello,
    Je suis pas du tout dev' PHP mais en lisant ton code la solution me semble évidente.

    Tu n'auras jamais la valeur 101 à cause des tes conditions if.

    Si je traduis ton code tu dis que si numéro est vide alors 101
    puis tu passes sur ton second if qui dit que si numéro = 101 alors 102 et ainsi de suite...

    Il faudrait que tu casses ta boucle quand une condition est réalisée ou que tu passes par une variable intermédiaire en fonction de ton objectif.

    Je ne sais pas si le break c'est "propre" en php. sinon rajoute un booléen dans ta boucle while.

    En esperant t'avoir aidé !

  3. #3
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 502
    Par défaut Bonjour
    Bonjour,

    Quand la requête SQL ne trouve aucun résultat, ta boucle ne sera jamais parcourue.

    La solution consistes à utiliser rowCount pour retourner le nombre de lignes affectées par la requête ou bien Count avec fetchColumn comme c'est montré dans l'exemple.

Discussions similaires

  1. Itération boucle While ne fonctionne pas
    Par thibboss29 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/09/2016, 08h25
  2. Réponses: 1
    Dernier message: 19/06/2016, 14h23
  3. [OL-2013] Assurer un suivi ne fonctionne que partiellement, comment réparer ?
    Par Pierre2121 dans le forum Outlook
    Réponses: 0
    Dernier message: 09/11/2015, 10h19
  4. mon while ne fonctionne que sur le premier select !
    Par gangrenn dans le forum Langage
    Réponses: 6
    Dernier message: 02/08/2010, 10h34
  5. boucle While ne fonctionne pas ?
    Par beegees dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2006, 20h19

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