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 :

probleme Test d'existance [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut probleme Test d'existance
    Bonjour tout le monde,

    alors voila mon problème :

    J'ai une base de donnée equipe composée d'un Id, Nom, Niveau, et Sexe.
    J'ai un formulaire d'ajout d'équipe ou je peux faire le choix avec le niveau et le sexe.

    j'ai 2 fonctions pour empêcher d'avoir le même niveau ET le même sexe,alors que le nom est toujours pareil.

    Mais lorsque j'envoie les données, au lieu de me les enregistrer lorsque l'équipe est bien valable, il passe directement dans la partie ou l'équipe est déjà existante.

    voici donc mon test :

    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
     
            require('fonctions.inc.php');
    	echo 'Enregistrement en cour...<br><br>';
    	$Niveau = htmlentities ($_POST['chxniveau']);
    	$Sexe = htmlentities ($_POST['chxsexe']);
     
     
      if ((check_Niveau_Equipe($Niveau)==false) && (check_Sexe($Sexe)==false)){
     
    			  mysql_connect ($db_server, $db_user, $db_pass);
     	  		  mysql_select_db($db);
    		      mysql_query("INSERT INTO Equipe(ID, Nom, Division, Sexe) VALUES ('', RADS, '$Niveau', '$Sexe' )")or die(mysql_error());;
    		      mysql_close();
     
    	  		  echo 'Enregistrement Terminer.<br><a href=Ajout_Equipe.php>Retour</a><br>';
    	  		  echo 'nom : ' . $Nom . '<Br>Division : ' . $Niveau . '<br>Sexe : ' . $Sexe;
    	   } else {
          		  echo 'Equipe existante. <a href=Ajout_Equipe.php>Retour</a>';
        	}
    et voici mes 2 fonctions

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?php
    // Savoir si l'Equipe existe deja
     
     
    function check_Niveau_Equipe($Division) {
      require ('config.php');
      $trouver_check_Niveau = false;
     
      mysql_connect($db_server, $db_user, $db_pass);
      mysql_select_db($db);
     
      $sql = 'SELECT `Division` FROM `equipe`' ;
      $result = mysql_query($sql);
     
      $num = mysql_numrows($result);
      mysql_close();
     
      $i = 0;
      while ($i < $num) {
        $laDivision = mysql_result ($result, $i, 'Division');
        if ($laDivision == $Division) {
          $trouver_check_Niveau = true;
        }
        $i++;
      }
     
      if ($trouver_check_Niveau == true) {
        return (TRUE);
      } else {
        return (FALSE);
      }
    }
    // -----------------------------------------------------------------------------
     
    // Savoir si l'Equipe existante est de meme sexe
     
     
    function check_Sexe( $Sexe ) {
      require ('config.php');
      $trouver_Sexe = false;
     
      mysql_connect($db_server, $db_user, $db_pass);
      mysql_select_db($db);
     
      $sql = 'SELECT `Sexe` FROM `equipe`' ;
      $result = mysql_query($sql);
     
      $num = mysql_numrows($result);
      mysql_close();
     
      $i = 0;
      while ($i < $num) {
        $lesexe = mysql_result ($result, $i, 'Sexe');
        if ($lesexe == $Sexe) {
          $trouver_Sexe = true;
        }
        $i++;
      }
     
      if ($trouver_Sexe == true) {
        return (TRUE);
      } else {
        return (FALSE);
      }
    }
    // -----------------------------------------------------------------------------
    J'ai déjà effectuer un autre test quasiment identique pour une autre partie du site et celui ci fonctionne très bien...alors je ne vois pas d'où peut venir le problème...j'ai vérifier tous les noms de tables et de variables et tout m'a l'air correct..

  2. #2
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    salut
    on dirait que c'est le même problème que quelqu'un d'autre avait eu il y a très peu
    Je n'ai pas le temps de me plonger dans le code, mais juste une remarque en passant

    attention quand on veut faire des "et" avec des "not".
    sématiquement "non A et non B " sécrit
    ! ( a && b )
    -> ! a || ! b

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    salut
    sématiquement "non A et non B " sécrit
    ! ( a && b )
    -> ! a || ! b
    ?????

  4. #4
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    ok je traduis

    mathématiquement

    non ( A et B)
    devient
    (non A OU non B)

    et non pas
    non A ET non B

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    salut
    on dirait que c'est le même problème que quelqu'un d'autre avait eu il y a très peu
    Je n'ai pas le temps de me plonger dans le code, mais juste une remarque en passant

    attention quand on veut faire des "et" avec des "not".
    sématiquement "non A et non B " sécrit
    ! ( a && b )
    -> ! a || ! b
    mon && m'a l'air parfaitement correct pourtant...il faut que les deux conditions soient réunies...donc dans les fonctions je retourne false quand je ne trouve pas de correspondance...et true s'il existe déjà...

  6. #6
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    ok je traduis

    mathématiquement

    non ( A et B)
    devient
    (non A OU non B)

    et non pas
    non A ET non B
    Je suis d'accord, mais relis ton message plus haut...

    sématiquement "non A et non B " sécrit
    ! ( a && b )
    Là, nan.

  7. #7
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    oui je suis d'accord ce n'était pas très clair

    kinkinhxc, ton raisonnement te semble juste pourtant c'est faux.
    Regarde cette table de correspondance
    (désolé présentation pourrie...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chkniveau ChkSex (! A ou  ! B) (!A  et ! B)
    1	1	FAUX	FAUX
    0	0	VRAI	VRAI
    1	0	VRAI	FAUX
    0	1	VRAI	FAUX
    d'ailleurs même "informatiquement"
    en écrivant non A et non B
    - si A te renvoie false, ce qui signifie que niveau le niveau n'existe pas encore, donc c'est bon...non A -> ça va te donner TRUE, tout va bien
    - Deuxième étape ...checkSexe, supposons que ça existe B -> te renvoie TRUE, "non B te renvoie FALSE"
    - Troisième étape A et B -> TRUE && FALSE -> FALSE
    Ce n'est pas ce que tu voulais


    si tu écris
    (!A et !B et ! C et !D )... ça signifie concrètement, il faut que tout soit faux pour rentrer dans ton IF..si un seul paramètre vaut true, tu passes dans le else...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    oui je suis d'accord ce n'était pas très clair

    kinkinhxc, ton raisonnement te semble juste pourtant c'est faux.
    Regarde cette table de correspondance
    (désolé présentation pourrie...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chkniveau ChkSex (! A ou  ! B) (!A  et ! B)
    1	1	FAUX	FAUX
    0	0	VRAI	VRAI
    1	0	VRAI	FAUX
    0	1	VRAI	FAUX
    d'ailleurs même "informatiquement"
    en écrivant non A et non B
    - si A te renvoie false, ce qui signifie que niveau le niveau n'existe pas encore, donc c'est bon...non A -> ça va te donner TRUE, tout va bien
    - Deuxième étape ...checkSexe, supposons que ça existe B -> te renvoie TRUE, "non B te renvoie FALSE"
    - Troisième étape A et B -> TRUE && FALSE -> FALSE
    Ce n'est pas ce que tu voulais


    si tu écris
    (!A et !B et ! C et !D )... ça signifie concrètement, il faut que tout soit faux pour rentrer dans ton IF..si un seul paramètre vaut true, tu passes dans le else...
    tu es sur de ce que tu écris?
    parce que dans mon if ce ne sont pas des "not" ce sont les conditions qui sont déjà définie
    exemple :

    ma table de vérité serait plutot

    A B || A & B
    1 1 || 1
    0 1 || 0
    1 0 || 0
    0 0 || 0

    A est a 1 quand check_sexe est a false, idem pour B avec check_Niveau_Equipe
    Juste ou pas?

  9. #9
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    oui je suis sûr, et non -> A correspond au résultat de ta fonction directement.
    ta table de vérité n'est pas ce que tu dis car tu ne fais pas
    A & B
    mais ! A et ! B (== false ça revient à faire un not)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    oui je suis sûr, et non -> A correspond au résultat de ta fonction directement.
    ta table de vérité n'est pas ce que tu dis car tu ne fais pas
    A & B
    mais ! A et ! B (== false ça revient à faire un not)
    donc je devrais m'y prendre comment?j'avais penser a quelques If mais ca va etre un peu lourd je trouve...

  11. #11
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    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
     
    // ce que tu veux c'est ce cas là
    chkniveau ChkSex (! A ou  ! B) 
    1	1	FAUX
    0	0	VRAI
    1	0	VRAI
    0	1	VRAI
     
    // qui correspond à , ça va tout le temps rentrer dans ton if, sauf si niveau & sexe ne sont pas bon tous les deux 
     
    // bref tu gardes tout pareil mais tu mets || au lieu du && dans ton if ;)
     
    // ou bien tu peux ecrire
    if ( !    (  checkNiveau &&  checkSex  )    )
    // qui est equivalent à
    if ( !  checkNiveau )  ||   (!  checkSex  )    )
    // mais qui n'est absolument pas equivalent à 
    if ( !    checkNiveau )  &&   (!  checkSex  )    )
     
    // le piège c'est que avec les "!" , il faut inverser les "et" et les "ou" quand on developpe l'expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // sinon tu peux faire encore plus simple en inversant le contenu de ton if...
    // comme ça tu ne te poses meme pas la question de la négation
    if (checkNiveau && checkSex)
    {
       die("erreur déjà utilisé");
    }
    // code d'insertion

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    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
     
    // ce que tu veux c'est ce cas là
    chkniveau ChkSex (! A ou  ! B) 
    1	1	FAUX
    0	0	VRAI
    1	0	VRAI
    0	1	VRAI
     
    // qui correspond à , ça va tout le temps rentrer dans ton if, sauf si niveau & sexe ne sont pas bon tous les deux 
     
    // bref tu gardes tout pareil mais tu mets || au lieu du && dans ton if ;)
     
    // ou bien tu peux ecrire
    if ( !    (  checkNiveau &&  checkSex  )    )
    // qui est equivalent à
    if ( !  checkNiveau )  ||   (!  checkSex  )    )
    // mais qui n'est absolument pas equivalent à 
    if ( !    checkNiveau )  &&   (!  checkSex  )    )
     
    // le piège c'est que avec les "!" , il faut inverser les "et" et les "ou" quand on developpe l'expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // sinon tu peux faire encore plus simple en inversant le contenu de ton if...
    // comme ça tu ne te poses meme pas la question de la négation
    if (checkNiveau && checkSex)
    {
       die("erreur déjà utilisé");
    }
    // code d'insertion
    Merci..ça avance un peu le problème, mais il en reste toujours un...
    en fait maintenant je peux bien enregistrer une première fois une équipe, mais si je veux enregistrer une équipe d'un même niveau mais de sexe different par la suite, il ne veut pas...

  13. #13
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    j'ai regardé ton code un peu plus en détail...il y a un gros soucis dans ta façon de faire en fait. Oublie toute la leçon sur les Et , les Ou et les Not, le problème est plus profond que ça
    niveau & sexe ne sont absolument pas liés....(j'avais cru lire que ça faisait des tests sur le nom aussi)..normal que ça ne marche pas.

    bref désolé de t'avoir lancé sur une fausse piste... voilà une bien meilleure façon de faire, et qui est juste et bien plus "optimisée" (tu ne parses pas toute la base en php... pour faire un test que sql peut faire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if ( verifExistePas ($niveau, $sexe)  )
         // insert
     
    function verifExistePas ($niveau, $sexe)
    {
        // pas syntaxiquement correct, mais tu devrais comprendre
         $liste = sqlquery("select * from equipe where sexe = '$sexe' and Division= '$niveau'" );
         $nbres = sqlNumRows();
         return ($nbres == 0);
    }
     
    // apres j'ai pas trop compris ton histoire de nom je penseque c'est plutot ça qu'il faut faire même
    //     $liste = sqlquery("select * from equipe where sexe = '$sexe' and Division= '$niveau' and nom = '$nom'" );

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Par défaut
    Citation Envoyé par Merfolk Voir le message
    j'ai regardé ton code un peu plus en détail...il y a un gros soucis dans ta façon de faire en fait. Oublie toute la leçon sur les Et , les Ou et les Not, le problème est plus profond que ça
    niveau & sexe ne sont absolument pas liés....(j'avais cru lire que ça faisait des tests sur le nom aussi)..normal que ça ne marche pas.

    bref désolé de t'avoir lancé sur une fausse piste... voilà une bien meilleure façon de faire, et qui est juste et bien plus "optimisée" (tu ne parses pas toute la base en php... pour faire un test que sql peut faire)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if ( verifExistePas ($niveau, $sexe)  )
         // insert
     
    function verifExistePas ($niveau, $sexe)
    {
        // pas syntaxiquement correct, mais tu devrais comprendre
         $liste = sqlquery("select * from equipe where sexe = '$sexe' and Division= '$niveau'" );
         $nbres = sqlNumRows();
         return ($nbres == 0);
    }
     
    // apres j'ai pas trop compris ton histoire de nom je penseque c'est plutot ça qu'il faut faire même
    //     $liste = sqlquery("select * from equipe where sexe = '$sexe' and Division= '$niveau' and nom = '$nom'" );
    effectivement ca m'a l'air beaucoup plus simple comme ceci...

    Pour ce qui est du Nom il n'y a pas de probleme... c'est tout le temps le meme nom d'equipe...je l'ai mis dans la table juste au cas ou il y aurait a ajouter un autre nom d'equipe...


    Edit : et bien un grand MERCI ca m'évitera d'attraper trop de cheveux gris...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/11/2005, 14h02
  2. probleme test presence d'un fichier(avec fso)
    Par pagez dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/08/2005, 15h24
  3. Test d'existence d'une valeur dans une table
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 29/12/2004, 10h38
  4. Création vue avec test d'existence
    Par yan77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/12/2004, 11h44
  5. test d'existence de table
    Par Ilùvatar dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 29/08/2004, 22h07

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