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 :

instruction condition if - else [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut instruction condition if - else
    Bonjour,
    j'ai créé un formulaire qui doit envoyé des informations dans la base de donnée. Si je fais un simple INSERT INTO ca marche sans probleme, mais j'ai du utilisé des if et des else pour éviter des répétitions de nom et des truc pour obligé la personne à remplir un champs.

    Déjà une chose, lorsque je valide le formulaire, il n'y a aucune erreur et en vérifiant dans la base de donnée, rien n'a été rajouté.

    Voici mon formulaire MEMBRE.PHP
    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
    <form method="POST" action="membre.php">
    <table>
    <tr>
            <td><strong>SOCIETE ou NOM : </strong></td>
            <td><input type="text" name="societe" /></td>
    </tr>
    <tr>
            <td><strong>ADDRESSE : </strong></td>
            <td><input type="text" name= "adresse" /></td>
    </tr>
    <tr>
            <td><strong>CODE POSTAL : </strong></td>
            <td><input type="text" name="cp" /></td>
    </tr>
    <tr>
            <td><strong>VILLE : </strong></td>
            <td><input type="text" name="ville" /></td>
    </tr>
    </table>
    <input type="submit" value="Valider" />
     
    </form>

    et la page de traitement (MEMBRE.PHP même page):

    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
    <?php
    // on vérifie que la variable Valider est créé et on vérifie bien qu'elle corresponde au bouton Valider
    if (isset($_POST['Valider']) && $_POST['Valider'] == 'Valider')
    {
            // on vérifie que la variable societe est créé et qu'elle contient bien une valeur
        if ((isset($_POST['societe']) && !empty($_POST['societe'])))
            {
            // connection à la base
            $db = mysql_connect("localhost","root", "");
            mysql_select_db("mabase", $db);
            //on compte tous les éléments du tableau, si une variable n'est pas affecté alors count renvoit 0 dans l'unique but de vérifier que le nom de société n'existe pas déjà
            $req = mysql_query('SELECT count (*) FROM test WHERE T1_1= "'.addslashes($_POST['societe']).'"');
            $data = mysql_fetch_array($req);
                    // dans le cas où le nom de société n'existe pas encore
                    if ($data[0] == 0)
                    {
                    $query = 'INSERT INTO test(T1_0, T5_1, T1_1, T1_2, T1_3, T1_4) VALUES ("","","'.addslashes($_POST['societe']).'", "'.addslashes($_POST['adresse']).'", "'.addslashes($_POST['cp']).'", "'.addslashes($_POST['ville']).'")';
                    echo "Les informations ont été enregistré dans la base de donnée";
                    mysql_query($query);
                    }
                    // si le nom de société existe déjà
                    else
                    {
                    echo "Une société portant le même nom existe déjà";
                    }
            }
            //Si le champ SOCIETE n'est pas remplie.
            else
            {
            echo "Vous devez saisir un nom de société";
            }
    }
     
    ?>

    Je ne vois absolument pas où est mon erreur. Dans la table test le champ société est défini à obligatoire. Voila pourquoi j'ai précisé dans le code php qu'il affiche cette remarque si l'utilisateur ne rempli pas le champ SOCIETE du formulaire or ca n'a pas l'air de fonctionner. Rassurez moi EMPTY permet bien de voir qu'une variable a été affecté et en l'occurance qu'une champ a été rempli ?


    Merci pour votre aide


    PS: je précise que les noms de mes champs sont bien de la forme T1_1, T1_2, T1_3 etc...

  2. #2
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Pour moi ton erreur se situe à ce niveau là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['Valider']) && $_POST['Valider'] == 'Valider')
    Dans ton formulaire le bouton submit n'a pas de name, donc il n'est pas transmis ( en tout cas pas sous le nom 'Valider')

    De plus, je ne voispas trop pourquoi tu fais ce test. Pour vérifier que le formulaire est bien soumis ???

  3. #3
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    Salut,

    Il faudrait plutot faire quelque chose de ce genre:

    Ton formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="post"...>
    ...
    ...
    <input type="submit" name="validation" value="Valider" /> 
    </form>
    et dans ton php, ton test ressemblerait à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ( isset($_POST['validation'] )
    {
    ...
    ...
    ...
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  4. #4
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    En fait tu te complique la vie... .. .

    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
    // on vérifie que la variable societe est créé et qu'elle contient bien une valeur
    if (isset($_POST['societe']) && !empty($_POST['societe']))
    {
          // connection à la base
          $db = mysql_connect("localhost","root", "");
          mysql_select_db("mabase", $db);
          
          // récupération préparation des données
          $societe = mysql_real_escape_string($_POST['societe']);
          
          if(isset($_POST['adresse']) && !empty($_POST['adresse']))
                $adresse = mysql_real_escape_string($_POST['adresse']);
                      else
                            $adresse = '';
          
          if(isset($_POST['cp']) && !empty($_POST['cp']))
                $cp = mysql_real_escape_string($_POST['cp']);
                      else
                            $cp = '';
          
          if(isset($_POST['ville']) && !empty($_POST['ville']))
                $ville = mysql_real_escape_string($_POST['ville']);
                      else
                            $ville = '';
          
          //on va chercher si la societe est déja enregistrée
          $req = mysql_query('SELECT T1_0 FROM test WHERE T1_1=\''.$societe.'\'');
          //si mysql_num_rows renvoit 0 la société n'existe pas déjà
          
          if (mysql_num_rows($req) === 0)
          {
                $query = 'INSERT INTO test(T1_0, T5_1, T1_1, T1_2, T1_3, T1_4) VALUES ("","","'.$societe.'", "'.$adresse.'", "'.$cp.'", "'.$ville.'")';
                
                if(mysql_query($query))
                      echo 'Les informations ont été enregistré dans la base de donnée';
                            else
                                  echo 'Une erreur est survenue les informations n\'ont pas été enregistré dans la base de donnée';
          } 
          else echo 'Une société portant le même nom existe déjà'; // si le nom de société existe déjà
    }
    else echo 'Vous devez saisir un nom de société';
    
    @ tchaOo°

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    bonjour

    merci pour les réponses j'ai rajouter un name au submit de mon formulaire et maintenant ca marche mieux.

    Pour moi ton erreur se situe à ce niveau là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    if (isset($_POST['Valider']) && $_POST['Valider'] == 'Valider')

    Dans ton formulaire le bouton submit n'a pas de name, donc il n'est pas transmis ( en tout cas pas sous le nom 'Valider')

    De plus, je ne voispas trop pourquoi tu fais ce test. Pour vérifier que le formulaire est bien soumis ???
    je fait ce test pour être sure que la personne a bien cliquer sur le bouton Valider, tu trouves que c'est facultatif ce test ?


    Sinon maintenant le seul problème dans mon code c'est qu'il insère même quand le nom de société qui se trouve dans T1_1 est le même.
    En plus du message qui dit que les informations ont été enregistré, j'obtiens cette erreur sur la ligne d'en dessus.

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\apachefriends\xampp\htdocs\www\membre.php on line 58

    Que signifie l'erreur ? est-ce que je n'ai pas bien su utilisé la fonction mysql_fetch_array() ?

    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
    $req = mysql_query('SELECT count (*) FROM test WHERE T1_1= "'.addslashes($_POST['societe']).'"');
            $data = mysql_fetch_array($req);
                    // dans le cas où le nom de société n'existe pas encore
                    if ($data[0] == 0)
                    {
                    $query = 'INSERT INTO test(T1_0, T5_1, T1_1, T1_2, T1_3, T1_4) VALUES ("","","'.addslashes($_POST['societe']).'", "'.addslashes($_POST['adresse']).'", "'.addslashes($_POST['cp']).'", "'.addslashes($_POST['ville']).'")';
                    echo "Les informations ont été enregistré dans la base de donnée";
                    mysql_query($query);
                    }
                    // si le nom de société existe déjà
                    else
                    {
                    echo "Une société portant le même nom existe déjà";
                    }
            }
            //Si le champ SOCIETE n'est pas remplie.
            else
            {
            echo "Vous devez saisir un nom de société";
            }


    [EDIT] Sinon pour KANKRELUNE> Merci je vais tester ton code.

    [EDIT2] OK ca marche du tonerre ton code, mais est-ce que c'est possible que le echo qui dit qu'il faut saisir un nom de société apparaîsse au moment où on clique sur valider, parceque lorsque j'arrive sur la page membre.php le message d'affiche déjà: normal me dirais-tu.


    D'ailleurs j'ai une question pour toi, c'est normal que tu ne mettes pas des accolade apres else ?

  6. #6
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Citation Envoyé par Henry9
    OK ca marche du tonerre ton code, mais est-ce que c'est possible que le echo qui dit qu'il faut saisir un nom de société apparaîsse au moment où on clique sur valider, parceque lorsque j'arrive sur la page membre.php le message d'affiche déjà: normal me dirais-tu.
    Ok dans ce cas remet ta condition...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (isset($_POST['valider'])) 
    {
        le code
    }
    J'ais viré la comparaison sur $_POST['valider']... que valider soit égale à "valider", "pwet" ou "la reine d'angleterre" importe peut... .. .

    Citation Envoyé par Henry9
    D'ailleurs j'ai une question pour toi, c'est normal que tu ne mettes pas des accolade apres else ?
    Je ne met pas d'accolade pour les instructions simples... question d'habitude, de préférence, d'indentation du code et de gain de place... mais ça ne change rien... .. .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(...)
    {
       // du code
       // encore du code
    }
    else // instruction unique
     
    if(...)
      // instruction unique
         else
             // instruction unique
    et ainsi de suite... .. .

    @ tchaOo°

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 147
    Par défaut
    merci pour tes explications très clair.

    Sinon y a un truc qui me chiffone encore dans le code que tu as fait, à quoi ca sert de préparer les données ? N'est-ce pas suffisant de faire seulement une vérification du champs SOCIETE car c'est le champ obligatoire mais les autres champs sont facultatifs alors pourquoi les vérifier/préparer aussi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          if(isset($_POST['adresse']) && !empty($_POST['adresse']))
                $adresse = mysql_real_escape_string($_POST['adresse']);
                      else
                            $adresse = '';

    tu stockes les données du champ adresse du formulaire saisie par l'utilisateur dans une variable $adresse. Mais pourquoi ne pas mettre directement les données dans le INSERT INTO comme ce que j'avais fait ?
    -> est-ce pour des raisons de sécurité ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req = mysql_query('SELECT T1_0 FROM t1 WHERE T1_1=\''.$societe.'\'');
          //si mysql_num_rows renvoit 0 la société n'existe pas déjà
     
          if (mysql_num_rows($req) === 0)
          {	
                $query = 'INSERT INTO t1(T1_0, T5_1, T1_1, T1_2, T1_3, T1_4) VALUES ("","","'.$societe.'", "'.$adresse.'", "'.$cp.'", "'.$ville.'")';

  8. #8
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Citation Envoyé par Henry9
    est-ce pour des raisons de sécurité ?
    Tout à fait... il ne faut JAMAIS faire confiance aux données soumises par un utilisateur ($_GET,$_POST ou $_COOKIE)... je traite donc les données soumise en les passant dans mysql_real_escape_string()... .. .

    un peu de lecture

    @ tchaOo°

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 26/05/2008, 06h18
  2. Ma condition if / else ne fonctionne pas
    Par kryogen dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 11/10/2007, 18h39
  3. condition (if/else) qui ne fonctionne pas
    Par oceane751 dans le forum Langage
    Réponses: 8
    Dernier message: 24/07/2007, 23h58
  4. Condition if/else et région répétée
    Par craac dans le forum Langage
    Réponses: 6
    Dernier message: 10/04/2007, 11h20

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