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 :

Compter le nombre de lignes retournées


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2018
    Messages : 48
    Points : 36
    Points
    36
    Par défaut Compter le nombre de lignes retournées
    Bonjour à tous,

    J'ai l'impression de me réveiller d'un long coma, tant le langage à utiliser en PHP et le site Developpez.com ont bien changés en quelques années :-) Je suis déjà pas mal fier d'avoir pu trouver mon chemin jusqu'à cette section.

    Je suis en train de faire évoluer un vieux site programmé au début des années 2000 et je dois vraiment être rouillé. Je tente de faire un simple count du nombre de lignes répondant à la requête pour l'afficher à l'utilisateur connecté

    Dans mes jeunes années j'utilisais un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $nb = mysql_num_rows($req);  
     
    if ($nb == 0) {  
     
       echo '<mark>Vous n\'avez aucune ligne enregistrée.</mark><br /><br />';  
    }
    if ($nb == 1) {  
     
       echo 'Vous avez une ligne enregistrée.<br /><br />';  
    }  
    else
       echo '<mark>Attention, vous avez <B>'.$nb.'</B> lignes enregistrées.</mark><br /><br />';
    Mais là je sèche pour l'intégrer à mon code ci-dessous.
    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
    <?php
    try
    {
    	// Connexion à la BD
    $bdd = new PDO('mysql:host=localhost;dbname=bdd;charset=utf8', '', '');
    }
    catch(Exception $e)
    {
    	// En cas d'erreur
            die('Erreur : '.$e->getMessage());
    }
     
    // Interrogation de la BD
    $reponse = $bdd->query('SELECT *
    from matable
    WHERE matable.login = \''.$_SESSION['login'].'\' 
    ORDER BY Date_debut');
     
    // Récupération des données	
     
     
    while ($donnees = $reponse->fetch())
     
    {
     
    ?>
                      </p>
                      <p><strong>Nom</strong> :<?php echo $donnees['Nom']; ?><br />
                      <strong>Date de début</strong> :<?php echo $donnees['Date_debut']; ?><br />
                      <strong>Date de fin</strong> :<?php echo $donnees['Date_fin']; ?><br />
     
     
                          <?php
    }
    $reponse->closeCursor(); // Termine le traitement de la requête?>

    Merci de votre aide

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 896
    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 896
    Points : 6 655
    Points
    6 655
    Par défaut
    Il suffit d'utiliser la méthode PDOStatement::fetchAll pour récupérer tous les résultats dans un tableau, puis de compter les éléments du tableau.

    Code php : 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
    <?php
    // on prépare la requête (on n'insère pas une variable directement dedans)
     
    $query = <<<'SQL'
    SELECT Nom, Date_debut, Date_fin
    FROM matable
    WHERE login = :login
    ORDER BY Date_debut
    SQL;
     
    $sth = $pdo->prepare($query);
    $sth->execute(['login' => $_SESSION['login']]);
     
    $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
    $nbRows = count($rows);
     
    if ($nbRows === 0) {
        $message = "Vous n'avez aucune ligne enregistrée.";
    } elseif ($nbRows === 1) {
        $message = "Vous avez une ligne enregistrée.";
    } else {
        $message = "Vous avez $nbRows lignes enregistrées.";
    }
    ?>
    <?= $message ?>
     
    <?php foreach($rows as $row): ?>
        <p>
            Nom: <?= $row['Nom'] ?><br/>
            Date de début: <?= $row['Date_debut'] ?><br/>
            Date de fin: <?= $row['Date_fin'] ?><br/>
        </p>
    <?php endforeach; ?>

    La méthode closeCursor n'est utile que lorsque tous les résultats de la requête non pas été relevés. Ce n'est pas le cas ici.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2018
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2018
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    Merci bien votre réponse et le temps passé dessus. Je vais prendre connaissance de votre code pour l'appliquer tout en le comprenant.
    Désolé aussi du délai, je n'ai pas vu passer de notification courriel, je suis peut-être bon pour une mise à jour de ce côté là aussi :-)

    Encore merci

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

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