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 :

signaler si un enregistrement existe dans la BD


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut signaler si un enregistrement existe dans la BD
    Bonjour,
    j'ai un script php que j'utilise pour insérer des données dans ma BD mysql à partir de mon application android.
    j'aimerais modifier ce script de telle sorte qu'il m'indique que l'enregistrement que je suis entrain d'effectuer existe déjà dans la table en question.
    Comment faire?
    ci-dessous mon code php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php 
    $id_o = isset($_REQUEST['idoffre']) ? $_REQUEST['idoffre'] : '';
    $id_c = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
    mysql_connect("localhost","root","");
    mysql_select_db("mabase");
    $sql=mysql_query("INSERT INTO candidature (idoff,idc) VALUES(" . $id_o . "," . $id_c . ")") ;
    if(!$sql)echo "Error in query: ".mysql_error();
    mysql_close();
    ?>

  2. #2
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonjour.

    Ben t'as pas trop le choix, tu dois faire une requête SELECT au préalable sur les critères qui te permettent de définir si l'enregistrement existe déjà ou pas (idoff et idc dans ton cas).

    Si cette requête ne renvoie pas de résultat tu fait ton INSERT sinon, tu affiche un message d'erreur ce genre de chose ...

    Par exemple tu peux te servir d'un COUNT :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT COUNT(*)
    FROM candidateur
    WHERE idoff = '...' AND id_c = '...';

    Tu insert si ça te renvoie 0 sinon message d'erreur ... tu peux aussi te servir de la fonction mysql_num_rows() ce genre de choses (j'ai une préférence pour le COUNT dans ce genre de situation).

    Autre remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $id_o = isset($_REQUEST['idoffre']) ? $_REQUEST['idoffre'] : '';
    $id_c = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
    Ces contrôles ne sont pas suffisants, si jamais isset renvoie false, ta requête va tenter d'insérer les valeurs '', c'est pas top ...

    Il faut pas non plus hésiter à se servir de mysql_real_escap_string(), pour se protéger des injections même si elles sont peu probables c'est une bonne habitude à prendre.

    Cordialement,
    Idriss

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    J'ai essayé cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    $id_o = isset($_REQUEST['idoffre']) ? $_REQUEST['idoffre'] : '';
    $id_c = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
    mysql_connect("localhost","root","");
    mysql_select_db("tmjob");
    $sql=mysql_query("SELECT idoff,idc FROM candidature WHERE idoff=" . $id_o . " AND idc=" . $id_c . " ");
    if(!$sql)echo "Error in query: ".mysql_error();
    if(mysql_num_rows($result) > 0)
    $sql=mysql_query("INSERT INTO candidature (idoff,idc) VALUES(" . $id_o . "," . $id_c . ")") ;
    else
    echo 0; // for incorrect login response
    mysql_close();
    ?>
    mais cela n'a pas résolu le problème

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Re bonjour.

    Hum, là ton script ne fait l'insertion que si le tuple existe déjà dans ta table candidature...
    Donc s'il n'existe pas ça n'insert pas. Et pas oublier toutes les remarques

    Vérifie ta condition et ne pas oublier toutes les remarques au dessus

    Idriss

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Mysql me retourne cette erreur: Query was empty
    voilà mon script, merci de me le corriger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php 
    $id_o = isset($_REQUEST['idoffre']) ? $_REQUEST['idoffre'] : '';
    $id_c = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
    mysql_connect("localhost","root","");
    mysql_select_db("tmjob");
    $sql=mysql_query("SELECT COUNT(*) FROM candidature
    WHERE idoff=" . $id_o . " AND idc=" . $id_c . " ");
    $result = mysql_query($query) or die("Error : " . mysql_error());
    if(mysql_num_rows($result) > 0)
    echo 0; 
    else
    $sql=mysql_query("INSERT INTO candidature (idoff,idc) VALUES(" . $id_o . "," . $id_c . ")");
    ?>

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Comme dit précédemment ces contrôles ne sont pas suffisants et tu risque de faire des insert vides ... quand on a une erreur il faut investiguer un minimum :

    - utiliser un debugger et faire du pas à pas, ou à défaut de debugger, débugger à la main en affichant les valeurs des variables, etc
    - afficher les requêtes incriminés et les exécuter à la main dans un client MySQL si les erreurs ne t’apparaissent pas flagrantes ...

    Idriss

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Mais je suis entrain de tester sur le navigateur, j'ai pas passé à la compilation sous android

  8. #8
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Citation Envoyé par analystedodo Voir le message
    Mais je suis entrain de tester sur le navigateur, j'ai pas passé à la compilation sous android
    À aucun moment on ne parle de ton client sous Android, le bug à lieu sur ton script PHP, il faut debugger ton script PHP, rien à voir avec ton application Java. Je t'ai déjà donné la méthode pour ça

    - utiliser un debugger et faire du pas à pas, ou à défaut de debugger, débugger à la main en affichant les valeurs des variables, etc
    - afficher les requêtes incriminés et les exécuter à la main dans un client MySQL si les erreurs ne t’apparaissent pas flagrantes ...
    En PHP, tu as bien des debugger qui existent, xdebug par exemple et qui sont intégrables à des EDI comme NetBeans ou Eclipse. Bon après, si tu débutes tu peux te contenter de debugger avec des echo, des print_r, des var_dump, des error_log ce genre de choses ... ces fonctions sont déjà très efficaces

    Quoiqu'il en soit, je te conseil d'afficher ta requête, ça te permettra à la fois de voir les valeurs de $id_o et $id_c mais aussi de faire copier/coller de cette requête dans un client MySQL afin de l'exécuter manuellement et de comprendre ce qui ne va pas.

    Bref, l'erreur est en plus très claire...

    Idriss

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    J'ai testé 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
    <?php 
    $id_o = isset($_REQUEST['idoffre']) ? $_REQUEST['idoffre'] : '';
    $id_c = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
    mysql_connect("localhost","root","");
    mysql_select_db("tmjob");
    $query="SELECT COUNT(*) FROM candidature
    WHERE idoff=" . $id_o . " AND idc=" . $id_c . " ";
    $result = mysql_query($query) or die("Error : " . mysql_error());
    if(mysql_num_rows($result) > 0)
    echo 0; 
    else
    echo 1;
    ?>
    ça me retourne 0 quelque soit les valeurs que je saisis.
    Il faut pas non plus hésiter à se servir de mysql_real_escap_string(), pour se protéger des injections même si elles sont peu probables c'est une bonne habitude à prendre.
    comment je peux me servir de mysql_real_escap_string() ?

  10. #10
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    ça me retourne 0 quelque soit les valeurs que je saisis.
    La requête COUNT(*) retournera systématiquement 1 enregistrement contenant le nbre d'enregistrements répondant au WHERE, donc une valeur de 0 à X. Avec ton if ( mysql_num_rows( ) > 0 ) echo 0 tu auras donc toujours 0 affiché.
    => Le traitement de cette requête n'a aucun sens.

    Comme indiqué par ok.Idriss tu as 2 possibilités :
    1. SELECT ... + mysql_num_rows( )
    2. SELECT COUNT(*) AS n ... + mysql_fetch_assoc( ) + echo $row['n']
    C'est l'un ou l'autre, pas les 2 à la fois, et de préférence le 2.

    comment je peux me servir de mysql_real_escap_string() ?
    C'est écrit dans la doc PHP. Tu veux le lien ?

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Merci pour vos explications je commence à saisir le problème.
    Merci de m'expliquer la deuxième solution

  12. #12
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par analystedodo Voir le message
    Merci pour vos explications je commence à saisir le problème.
    Merci de m'expliquer la deuxième solution
    Le mieux est que tu exécutes la requête ci-dessous dans un client MySQL type phpMyAdmin. Tu comprendras mieux.

    SELECT COUNT(*)
    FROM candidature
    WHERE idoff = (cequetuveux) AND idc = (cequetuveux)


    Pense à remplacer (cequetuveux) par des valeurs cohérentes.

  13. #13
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Oui ça je l'ai déjà testé sur phpmydmin et ça marche (il me renvoie 1 lorsque j'ai testé avec un enregistrement existant et 0 avec un enregistrement non existant dans ma table)

  14. #14
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par analystedodo Voir le message
    Oui ça je l'ai déjà testé sur phpmydmin et ça marche (il me renvoie 1 lorsque j'ai testé avec un enregistrement existant et 0 avec un enregistrement non existant dans ma table)
    Voilà, il ne te reste plus qu'à récupérer le resultat du COUNT(*) avec mysql_fetch_*( ) et le traiter.

  15. #15
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Voilà, il ne te reste plus qu'à récupérer le resultat du COUNT(*) avec mysql_fetch_*( ) et le traiter.
    Où mettre mysql_fetch_*( ) ??

  16. #16
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Il a voulu désigner par mysql_fetch_* l'ensemble des fonctions MySQL qui te permettent de traiter le résultat d'une requête sous une forme voulue : mysql_fetch_array(), mysql_fetch_assoc(), ...

    Bref, t'as un manuel en ligne des fonctions PHP et des tutoriels ici même, faut chercher un peu plus

    Idriss

  17. #17
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php 
    $id_o = isset($_REQUEST['idoffre']) ? $_REQUEST['idoffre'] : '';
    $id_c = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
    mysql_connect("localhost","root","");
    mysql_select_db("tmjob");
    $query="SELECT COUNT(*) FROM candidature
    WHERE idoff=" . $id_o . " AND idc=" . $id_c . " ";
    $result = mysql_query($query) or die("Error : " . mysql_error());
    (mysql_fetch_array($result));
    ?>
    Mais ça n'a rien retourné

  18. #18
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par analystedodo Voir le message
    (mysql_fetch_array($result));
    Euh c'est censé faire quoi ça ?

    mysql_fetch_array( ) retourne un enregistrement.
    Ici le retour de mysql_fetch_array( ) n'est pas récupéré,
    Et donc n'est pas traité.

    Exemples d'utilisation de mysql_fetch_array( ) : http://fr.php.net/mysql-fetch-array

  19. #19
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonjour.

    Là il faut clairement se documenter un minimum :

    http://php.developpez.com/cours/?page=sgbd#mysql
    http://eusebius.developpez.com/phpmysql-base/
    Le Manuel PHP en ligne
    ...

    Merci de faire un effort de recherche...

  20. #20
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    mais je dois utiliser mysql_fetch_quoi alors???
    svp je suis bloquée

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/05/2011, 08h16
  2. Vérifier si un enregistrement existe dans une table
    Par developpeur_débutant dans le forum PL/SQL
    Réponses: 4
    Dernier message: 08/06/2010, 13h05
  3. Réponses: 3
    Dernier message: 22/01/2009, 10h07
  4. verifier si un enregistrement existe dans une table
    Par niceen dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/04/2008, 22h37
  5. [MySQL] connaitre si un enregistrement existe dans la table
    Par namstou3 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2008, 18h14

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