Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2007, 09h19   #1
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
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 :
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();
?>
urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 10h05   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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).
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 10h12   #3
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
Citation:
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.
Citation:
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.

Citation:
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.
urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 10h16   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2007, 10h17   #5
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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 :
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]
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 11h37   #6
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
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 :
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 :
Notice: Undefined variable: maillost in c:\program files\
comme quoi la variable maillost est indéfinie !!!

Pourquoi tant de haine !
urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 11h47   #7
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
Je crains que tes déclarations ne soient incorectes syntaxiquement. En clair, l'affectation d'une variable c'est = et non != ou ==
Code php :
1
2
3
$maillost != 'Perdu ;o('; // je declare ma variable : ben non
...
$maillost == 'gagné !!! ;o)'; // la non plus
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 13h45   #8
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
Oups, pas vu !!!

J'ai donc modifier de cette mannière
Code :
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.
urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 13h51   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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 !!
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h03   #10
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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é.
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h07   #11
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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 :
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
   }
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h10   #12
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
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+
urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h17   #13
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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"
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h21   #14
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
Citation:
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 :
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.
urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h25   #15
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
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.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 14h28   #16
Membre confirmé
 
Inscription : mai 2006
Messages : 196
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 196
Points : 278
Points : 278
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 :
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 .
meliandah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 17h03   #17
Nouveau Membre du Club
 
Avatar de urbalk
 
Inscription : novembre 2005
Messages : 135
Détails du profil
Informations personnelles :
Localisation : France, Moselle (Lorraine)

Informations forums :
Inscription : novembre 2005
Messages : 135
Points : 38
Points : 38
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.

urbalk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web