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 :

Question + Petit probléme avec COUNT


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut Question + Petit probléme avec COUNT
    Bonjour!
    j'ai une question a propos d'utilisation de mysql avec php:
    es ce que c'est possible de se connecter une seule fois a la base de données et faire plusieurs requêtes (dans une même page) ? car j'ai déja essayé ça mais ça marche pas ! il faut que je me connecte a la base de données avant chaque requêtes !
    aussi, je voudrais utiliser COUNT pour compter le nombre de personnes inscrits dans mon site mais je sais pas comment afficher le resultat , voila mon code aidez moi a le corrigé svp !
    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
    // Connexion à la base de données
    try
    {
    $bd = new PDO('mysql:host=localhost;dbname=net', 'root', '');
    }
    catch(Exception $e)
    {
    die('Erreur : '.$e->getMessage());
    }
    $selinsc = $bd->query('SELECT COUNT (*) AS nbi FROM membres ');
    $nbins=$selinsc->fetch();
    echo"LES INSCRIS: ".$nbins['nbi'];
    ?>
    comme erreur il m'affiche
    Fatal error: Call to a member function fetch() on a non-object on line 46
    qui est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $nbins=$selinsc->fetch();

  2. #2
    Membre averti
    Avatar de crozet.magenta
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2012
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 208
    Points : 374
    Points
    374
    Par défaut
    es ce que c'est possible de se connecter une seule fois a la base de données et faire plusieurs requêtes (dans une même page) ?
    Oui c'est possible et c'est ce qu'il faut faire. si ça ne marche pas c'est surement que dans ton code tu réaffectes la variable qui contient l'objet PDO ou que tu fermes la connexion

    Pour l'erreur Fatal error: Call to a member function fetch() on a non-object on line 46 vérifie si ta requête renvoie bien quelque chose

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    Voila 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
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    if ($erreur)
    {// Connexion à la base de données
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=net', 'root', '');
    }catch(Exception $e)
    {
    die('Erreur : '.$e->getMessage());
    }
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO minichat (date_message,pseudo, message)VALUES(NOW(),?, ?)')or die(print_r($bdd->errorInfo()));
    $req->execute(array($_SESSION['pseudo'], $_POST['message']));
    // Redirection du visiteur vers la page du minichat
     
    }else{echo"<h3> VOTRE MESSAGE NE DOIT PAS ETRE VIDE !</h3>";}
    /*$bdd->closeCursor();*/
     
     
    $reponse = $bdd->query('SELECT date_message,pseudo, message FROM minichat ORDER
    BY id_chat DESC LIMIT 0, 10')or die(print_r($bdd->errorInfo()));
    // Affichage de chaque message (toutes les données sont protégéespar htmlspecialchars)
    while ($donnees = $reponse->fetch())
    {
    echo '<strong>'. htmlspecialchars($donnees['pseudo']) .' </strong><em>(' . htmlspecialchars($donnees['date_message']) .')</em> :::> ' . htmlspecialchars($donnees['message']) . '<br><hr>';
    }
     
    $bdd->closeCursor();
    ?>
    et ça m'affiche comme erreur dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $reponse = $bdd->query('SELECT date_message,pseudo, message FROM minichat ORDER
    BY id_chat DESC LIMIT 0, 10')or die(print_r($bdd->errorInfo()));
    Notice: Undefined variable: bdd
    Fatal error: Call to a member function query() on a non-object
    sachant que c'est je fais coupier coller le code de la premiere connexion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=net', 'root', '');
    }catch(Exception $e)
    {
    die('Erreur : '.$e->getMessage());
    }
    et je l’insère avant la deuxième requête ça marche sans aucun problème !

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    C'est sur la requête qu'il faut appliquer closeCursor() - après avoir récupérer les données -, pas sur la connexion !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req->closeCursor();
    //...
    //...
    $reponse->closeCursor();

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    Ok ! mais j'ai deux erreurs :
    Notice: Undefined variable: bdd
    Fatal error: Call to a member function query()
    dans cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT date_message,pseudo, message FROM minichat ORDER BY id_chat DESC LIMIT 0, 10');

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Ben c'est normal vu que ta connexion $bdd est dans la condition "if ($erreur)..."
    et que ta seconde requête est en dehors de cette condition. Fais attention à tes accolades.
    En indentant son code on évite plus facilement de telles erreurs

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    Donc, il faut connecter une nouvelle fois ?

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Si tu laisse ton code et les conditions avec les accolades comme cela, oui.

    Mais en fait ce n'est pas une nouvelle fois car tant que tu ne rentre pas dans la condition if($erreur) la connexion n'est pas faite, et donc c'est normal que la variable de connexion $bdd n'existe pas pour la dernière requête.

    Maintenant si ton code nécessite dans tous les cas une connexion tu peux effectuer cette connexion en dehors de ta condition. Par exemple :

    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
    try
    {// Connexion à la base de données
        $bdd = new PDO('mysql:host=localhost;dbname=net', 'root', '');
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
     
    if ($erreur)
    {
        // Insertion du message à l'aide d'une requête préparée
        $req = $bdd->prepare('INSERT INTO minichat (date_message,pseudo,   message) VALUES(NOW(),?,?)') or die(print_r($bdd->errorInfo()));
     
        $req->execute(array($_SESSION['pseudo'], $_POST['message']));
        // Redirection du visiteur vers la page du minichat
     
    }
    else
    {
        echo "<h3> VOTRE MESSAGE NE DOIT PAS ETRE VIDE !</h3>";
    }
     
     
    $reponse = $bdd->query('SELECT date_message, pseudo, message FROM minichat ORDER BY id_chat DESC LIMIT 0, 10') or die(print_r($bdd->errorInfo()));
     
    // Affichage de chaque message (toutes les données sont protégéespar htmlspecialchars)
    while ($donnees = $reponse->fetch())
    {
        echo '<strong>'.htmlspecialchars($donnees['pseudo']).'</strong><em> '. htmlspecialchars($donnees['date_message']).'</em> '. htmlspecialchars($donnees['message']).'<br>';
    }
     
    $reponse->closeCursor();
    ?>
    Bon j'ai nettoyé un peu ton code. Par certain que je n'ai rien oublié. Fais attention et fais preuve d'un minimum d'organisation pour la présentation de ton code sinon c'est illisible et pas facile à débugguer.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 338
    Points : 0
    Points
    0
    Par défaut
    Merci bien ça marche maintenant !

Discussions similaires

  1. petit problème avec un COUNT()
    Par ctobini dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/12/2007, 17h53
  2. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 13h47
  3. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 19h45
  4. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 10h10
  5. Access/SQL : Problème avec Count
    Par Taurëndil dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/01/2005, 16h49

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