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 :

[Conception] Pb boucle if else dans formulaire


Sujet :

PHP & Base de données

  1. #1
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut [Conception] Pb boucle if else dans formulaire
    Bonjour,

    Je recontre un petit pb avec une boucle if else.

    Dans un formulaire de renvoie de login/mdp une personne entre sont adresse mail pour lui retourner son login et mdp perdu.

    la premiere partie de la boucle (IF) fonctionne.
    la deuxième (ELSE) ne fonctionne pas et je ne comprends pas pourquoi

    Merci de votre aide.
    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
     
    <?php
    include_once ('fichierdeconf.php');
    echo '<br>';echo '<font color=red>';
    echo 'titre de la page :FICHIER ESSAIS A METTRE AU PROPRE';
    echo '<br>';echo '</font>';
     
    // recuperation de la variable 
    if(isset($_POST['maillost']))      $maillost=$_POST['maillost']; else      $maillost="";
     
    // affichage de la variable passée par POST
    echo $maillost; 
     
    // creation de la croquette
    $sql = "SELECT  email,login,mdp 
    		FROM associations
    		WHERE email = '$maillost' 
    		";
    // envoie de la croquette
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
     
    // boucle pour lire la table dans la DB
    while($data = mysql_fetch_assoc($req)) 
        {
        // affichage des infos contenue dans la table
    	echo 'DONNEES RETOURNEES PAR LA DB';
    	// declaration de la variable maillost
    	$var_maillost = $maillost;
    	// SI la valeur de la variable $maillost est EGALE a la variable passée via POST j'affiche (juste pour la prog)les infos.
    	if ($var_maillost == $data['email']) 
    	{ 
    		echo $data['email'];echo '<br>';
    		echo $data['login'];echo '<br>';
    		echo $data['mdp'];echo '<br>';
    		// toutes les infos sont OK j'envoie tout par e-mail
    		//*************inserer script d'envoie de mail *********
    		// include_once ('postmail.php');
    	}
    	// AUTREMENT les infos n'existent pas dans la table
    	else {
    	// j'affiche un message d'erreur
    	print ("Aucun Login et mot de passe pour cette adresse mail");
    	// j'insere un fichier de redirection sur la page acceuil
       	include('return.htm');
    	//je quitte ce script
    	exit(); 
    	} 
    	echo $data['mdp'];
    // fin du while		
    	}
    // fermeture de la connection 
    mysql_close();
    ?>

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Je suppose que dans ta base de données tu n'auras qu'un seul login/mot de passe pour une adresse email donnée?
    Donc il faut plutot qu'après ta requete dans la base tu regardes si tu as bien un résultat qui est retourné avec mysql_num_rows(). Si oui alors tu fais un fetch pour envoyer l'email, sinon tu indiques qu'il n'y a pas de réponses.

    Et si ton else ne marche pas c'est surement parce que tu passes toujours dans le if (parce que l'adresse email est bien dans ta base).

  3. #3
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    Je suppose que dans ta base de données tu n'auras qu'un seul login/mot de passe pour une adresse email donnée?
    Oui.
    Donc il faut plutot qu'après ta requete dans la base tu regardes si tu as bien un résultat qui est retourné avec mysql_num_rows(). Si oui alors tu fais un fetch pour envoyer l'email, sinon tu indiques qu'il n'y a pas de réponses.
    Je vais jeter un oeil de ce coté la.

    Et si ton else ne marche pas c'est surement parce que tu passes toujours dans le if (parce que l'adresse email est bien dans ta base).
    Même si je rentre une adresse e-mail non présente dans la table le if-else ne fonctionne pas.

    merci.

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Normal qu'il ne fonctionne pas parce que si tu rentres une adresse présente, tu as un résultat donc ton fetch_assoc_array() retourne le résultat. Par contre pour une adresse non présente tu n'as aucun résultat et le fetch_assoc_array() te retourne alors false, donc tu ne rentres pas dans la boucle et donc pas du tout dans le if/else.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    salut

    D'abord, une remarque en passant : il manque une ' dans ton include_once ('fichierdeconf.php') au début du script. C'est probablement une faute de copie, mais on se sait jamais

    Ensuite, tu recherches les associations ayant un email égal à $maillost. Donc comme ton if vérifie que l'email trouvé est égal à maillost, il est toujours vérifié
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // creation de la croquette ;)
    $sql = "SELECT  email,login,mdp 
    	FROM associations
    	WHERE email = '$maillost' 
    	";
    //...
    $var_maillost = $maillost;
    if ($var_maillost == $data['email']) 
    {}
    [hors propos] J'aime bien l'idée d'utiliser des croquettes mysql [/hors propos]

  6. #6
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    Bonjour,

    [hors propos ON] croquette... ce jours la ma fille de 2 ans 1/2 ma fais mourrir de rire !!! Aujourd'hui, c'est a coup de ROQUETTE que je vais finir ce bout de script qui me rend dingue !!![hors propos OFF]

    Depuis hier am je cherche une solution en vain...
    voici mon bout de 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
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    echo '*******************************************************************';echo '<br>';
    // variable qui passe par POST
    $sc = 'testg@test.fr';
     
    // connection
    $mysql_link = mysql_connect("localhost", "root", "_o_");
     
    // creation de la croquette
    $requete = "SELECT * 
    			FROM associations
    			WHERE email = '$sc'
    			";
     
    // envoi de la croquette
    $result = mysql_db_query("annonceurs", $requete);
     
    // boucle while pour lire la table
    while ($voir = mysql_fetch_array($result))
     
    if(empty($voir['email'])) // SI $voir['email'] est VIDE
        {
    	$maillost != 'Perdu ;o('; // je declare ma variable 
    	echo $maillost; // affichage de la variable
        }
    else  // SINON 
    	{
    	$maillost == 'gagné !!! ;o)';
    	echo $maillost;
    	}
    echo '<br>';
    //end while
     
    // fermeture
         mysql_close();
    ?>
    Je n'arrive pas a attribuer une valeur à la variable maillost après le while sur la table.
    Dans l'etat, le script me renvois même une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Notice: Undefined variable: maillost in c:\program files\
    comme quoi la variable maillost est indéfinie !!!

    Pourquoi tant de haine !

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je crains que tes déclarations ne soient incorectes syntaxiquement. En clair, l'affectation d'une variable c'est = et non != ou ==
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $maillost != 'Perdu ;o('; // je declare ma variable : ben non
    ...
    $maillost == 'gagné !!! ;o)'; // la non plus

  8. #8
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    Oups, pas vu !!!

    J'ai donc modifier de cette mannière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // boucle while pour lire la table
    while ($voir = mysql_fetch_array($result))
     
    if(empty($voir['email'])) // SI $voir['email'] est VIDE
        {
    	$maillost = "Perdu ;o("; // je declare ma variable 
    	echo $maillost; // affichage de la variable
        }
    else  // SINON 
    	{
    	$maillost = "gagné !!! ;o)";
    	echo $maillost;
    	}
    mais le problème est toujours là !
    Quand la variable '$sc' est présente dans la table le script retourne bien "gagné !!! ;o)" par contre quand la variable '$sc' n'existe pas dans la table, la variable '$maillost' ne prend aucne valeur...

    merci de ton aide.

  9. #9
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Pk n'y a-t-il aucun ";" apres ton while?

    J'en déduis qu'on revient encore sur le problème dont je t'ai parlé précédemment:

    Tu regardes dans ta BDD si le champ est présent. S'il y est, tu fais un while pour fetcher les résultats
    => deja la c'est bizarre, logiquement tu auras UN seul résultat, donc le while ne sert a rien, si tu en as plus d'un c'est que tu as un probleme de conception a l'inscription

    Ensuite, tu fais un while pour récupérer, or si t'as aucune donnée sur cet email dans la base, tu récupères rien, donc ton $mailhost il vaudra "au mieux" FALSE.

    Enfin, comme tu as pas de ; apres ton while, il prend le if/else comme étant l'unique instruction de ton while, donc quand il sort du while directement (aucun résultat, condition fausse des le debut) il passe completement le if/else

    Deux solutions :
    1/ ajoutes un ; apres le while
    2/ utilises mysql_num_rows !!

  10. #10
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par koopajah
    Pk n'y a-t-il aucun ";" apres ton while?
    Non seulement il n'y a pas de ";", mais en plus il n'y a pas de {} autour de l'ensemble if else.

    Et comme le dit koopajah, si tu n'as pas aucun résultat, tu ne rentres pas dans le while et donc $maillost n'est pas affecté.

  11. #11
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Ben en fait j'avais pensé que l'absence d'accolades était volontaire, pour permettre de fetcher tous les résultats (de toute facon y en a un seul ou 0).

    Je me repete mais dans ce genre de cas un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(mysql_num_rows() >= 1 ) // ou ==1
       {
       //   je fetche parce que j'ai mon resultat
       }
    else 
       {
       //pas de resultat
       }

  12. #12
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    Ok n'en jetez plus la coupe est pleine !!!

    j'ai passé mon am et ma soirée d'hier sur ce petit truc, j ai regarder du coté de pas mal de fonction (if else, switch case, foreach), je crois que je suis en train de me noyer dans ... un verre d'eau !

    j'ai bien compris ou etait mon pb seulement je n'arrive pas à le solutionner.

    là, j'essais avec '$num_rows = mysql_num_rows($result);' qui a au moin le merite de me retourner une valeur 1 si l'adresse existe dans la table 0 si ce n'est pas le cas.

    j'ai donc avancer un peu.

    Je vous remercie tous les2 pour vos conseils.

    a+

  13. #13
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    As tu, simplement, rajouté un ";" apres ton while (sur la meme ligne exactement) ???

    et remplace ton "if empty blablabla" par if($voir == true)

    ca veut dire "si c'est true, j'ai récupéré un résultat donc un email, sinon j'ai rien récupéré donc pas d'email"

  14. #14
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    As tu, simplement, rajouté un ";" apres ton while (sur la meme ligne exactement) ???
    Oui, aucun changement.
    Par contre cela a l'air de fonctionner:
    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
     
    // envoi de la croquette
    $result = mysql_db_query("annonceurs", $requete);
     
    // 2 valeurs possibles pour $num_rows
    // --> 1 l'adresse est présente dans la table.
    // --> 0 l'adresse n'existe pas dans la table.
    $num_rows = mysql_num_rows($result);
    echo "$num_rows Rows";
    //  SI $num_rows retourne 1 
    if($num_rows == 1)
        {
    	$maillost = "Gagné ;o)"; // je declare ma variable 
    	echo $maillost; // affichage de la variable
        }
    else  // SINON --> $num_rows retourne 0
    	{
    	$maillost = "Perdu ;o("; // je donne un autre valeur a ma variablema variable 
    	echo $maillost;
    	}
    echo '<br>';
    je test ca dans le script final et post.

  15. #15
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    en plus du ";" il faut changer la condition sur le if comme je t'ai dit plus haut.

    le principal reste que ca marche et mysql_num_rows() est plus propre dans ton cas.

  16. #16
    Membre averti

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Points : 319
    Points
    319
    Par défaut
    Il faut bien coder et n'hésite pas à aérer ton code, à rajouter des parenthèses inutile pour PHP mais utile pour ta relecture, car je ne vois aucune accolade pour ton WHILE ?? Aussi un petit détail insouciant qui doit être la base de tes problème : a savoir le COMMENTAIRE à côter de ton else, si tu met bout à bout ton else tu vois pas le souci ? ta structure d'instruction est en commentaire pour PHP, j'ai déjà eu ce problème ^^

    Essaye cela :
    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
     
    // boucle while pour lire la table
    while ( $voir = mysql_fetch_array( $result ) )
    {
         if(   !( isset( $voir['email'] ) )   ) /* SI $voir['email'] est VIDE */
         {
    	  $maillost = "Perdu ;o("; // je declare ma variable 
    	  echo $maillost; // affichage de la variable
        }
         else  /* SINON */
         {
              $maillost = "gagné !!! ;o)";
              echo $maillost;
         }
    }
    Et remplace les empty par isset pour les résultats de requêtes pour voir, car VIDE ne veut pas dire NON DEFINI .

  17. #17
    Membre régulier Avatar de urbalk
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 135
    Points : 71
    Points
    71
    Par défaut
    merci à tous de votre aide.

    Ce script fonctionne maintenant avec envoi de mail etc...

    Si ca interresse qq un, je le mets sur le forum ou en mp.


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

Discussions similaires

  1. Récupération $_FILES dans formulaire en boucle
    Par AurelienNF dans le forum Langage
    Réponses: 6
    Dernier message: 27/09/2011, 16h58
  2. [AC-2007] test if then else dans boucle for next
    Par markuus dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/08/2011, 11h41
  3. [AC-2000] Boucle lors de certains déplacements dans formulaire
    Par yves210420 dans le forum IHM
    Réponses: 1
    Dernier message: 26/06/2011, 17h39
  4. [PHP 5.0] boucle et checkbox dans un formulaire
    Par Kuchiki Byakuya dans le forum Langage
    Réponses: 4
    Dernier message: 23/03/2010, 23h45
  5. [Conception] Ecrire le contenu d'un formulaire dans un fichier
    Par omeada dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 27
    Dernier message: 26/04/2007, 16h35

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