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 :

Vérifier l'existance d'un enregistrement dans un table


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut Vérifier l'existance d'un enregistrement dans un table
    Bonjour à tous,

    J'ai longtemps cherché et j'ai énormément lu de réponses concernant ce sujet et malgré tout, je n'y arrive toujours pas !

    Au bout de deux heures... Je craque !

    Lorsque le formulaire est posté, la page de vérification doit s'assurer que l'activité entrée existe bien. Sinon, il renvoie une erreur...

    Je n'arrive pas à faire ce "petit" excercice qui est de rechercher un enregistrement.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $spe1=$_POST['spe1'];
    $q = 'SELECT COUNT(*) FROM activite WHERE activite = '.$spe1.'';
    $res = mysql_query($q);
     
    if (mysql_result($res, 0) == 0) {
     
      echo 'erreur';
     
    } else echo 'on continue';
    Et voici la réponse de PHP

    Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\wamp\www\DjibRestos\traitement\action_modif.php on line 19
    Call Stack
    # Time Memory Function Location
    1 0.0013 149024 {main}( ) ..\action_modif.php:0
    2 0.0139 162824 mysql_result ( ) ..\action_modif.php:19
    J'aimerais bien savoir et surtout comprendre où ça coince.

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Analyse simplement l'erreur, tu ne passeras pas 2h a debuguer :

    mysql_result() expects parameter 1 to be resource, boolean given
    En français : le 1er paramètre de la fonction mysql_result() ne convient pas (booleen au lieu de ressource).
    - le premier paramètre est : $res
    - si tu regardes ce que vaux $res var_dump($res); tu trouveras très certainement FALSE.
    - d'ou vient $res ? c'est le résultat de mysql_query.
    - dans quelle cas mysql_query() renvoit FALSE ? C'est assez évident, c'est quand il y a une erreur dans la requête.
    - comment debuguer ?
    Afficher la requête echo $q;Afficher les erreurs mysql : echo mysql_error();

    Mais bon on voit déjà 2 erreurs : tu ne vérifies pas si la valeur existe et tu ne la protege pas :

    si c'est un entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = 'SELECT COUNT(*) FROM activite WHERE activite = '.intval($_POST['$spe1']);
    si c'est du texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $q = 'SELECT COUNT(*) FROM activite WHERE activite = "' . mysql_real_escape_string($_POST['$spe1']) .'"';
    Au passage, l'extension mysql_ est obsolète, utilise PDO ou mysqli.
    Et ne nomme pas tes colonnes et tes tables avec le même nom.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut Code de connexion
    Sabotage,

    L'une des erreurs renvoyées est qu'il ne trouve pas la base de données. J'ai d'ailleurs rencontré la même erreur pour la création de session. J'avais donc crée deux includes avec les différentes manières de se connecter il est évident que j'aurais préféré en garder une seule (la première)

    Voici le code de la première, avec PDO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=djibrestos', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    ?>
    Voici le code de la seconde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php 
    mysql_connect("localhost", "root", "");
    mysql_select_db("djibrestos");
    	?>
    J'essaie donc de réussir mon code, celui de trouver un enregistrement, avec la première connexion.

    J'ai essayé de changé la variable $bdd mais rien n'y fait.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    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
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("djibrestos");
    if (isset($_POST['spe1']))
    {
    $spe1=$_POST['spe1'];
    $q = 'SELECT COUNT(*) FROM activite WHERE activite = '.$spe1.'';
     
     
     if( mysql_num_rows ($q) > 0 ){
     
      echo 'on continue';
     
    } 
    else 
    { echo 'erreur';
    }
    mysql_close(); 
    }
    ?>

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Février 2012
    Messages : 164
    Par défaut Erreur d'affichage ?
    Merci Chaker176 mais ça n'a pas marché !

    J'ai réussi avec ce 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
     
    <div>
    <?php
    echo $spe1;
     $reponse_act = $bdd->prepare('SELECT COUNT (*) AS verif FROM activite WHERE nom_activite= '.$spe1.'');
     
    while ($donnees_act = $reponse_act->fetch())
    {
    ?>
    <p>- coucou  <?php //echo 'jeanpierre'; //$donnees_act['verif'];?></p>
    <?php
     }
     ?>
     
    <?php 
    $reponse_act->closeCursor();
    ?>
      </div>
    Enfin réussir est un grand mot...

    Me direz-vous, à quoi servent les mots coucou Jeanpierre ect ? Tout simplement parce que Php ne me retourne aucune erreur mais surtout il me retourne rien du tout sauf le résultat de la variable mais tout ce qui se trouve dans la boucle, il ne me l'affiche pas... Donc... Problème !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca ne sert à rien de lancer des connexions avec différents mode. Non pas parce que cela fait deux connexions mais parce qu'il n'y a que la connexion correspondant au reste de ton code (PDO / mysql / mysqli) qui pourra être utilisée.

    En PDO ton code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $sth = $bdd->prepare('SELECT COUNT (*) AS verif FROM activite WHERE nom_activite= :spe');
    $sth->execute(array(':spe'=>$_POST['spe1']));
     
    while ($row = $sth->fetch()) {
          echo '<p>valeur : ' . $row['verif'] .'</p>';
    }
    Et quand tu debug, active les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $bdd = new PDO('mysql:host=localhost;dbname=djibrestos', 'root', '');
    $bdd->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
    Et si tu as encore une erreur, donne la
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. Réponses: 7
    Dernier message: 31/08/2012, 18h42
  2. [AC-2007] Requête pour vérifier la présence d'un enregistrement dans une table.
    Par Mat08 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 22/09/2011, 18h06
  3. Réponses: 3
    Dernier message: 09/08/2010, 14h38
  4. [Débutant]Vérifier existance d'un enregistrement dans une table
    Par fabiolous dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/04/2007, 12h01
  5. [MySQL] Vérifier l'existence d'un nom dans une table
    Par joselito dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/01/2007, 22h49

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