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 11/05/2007, 11h49   #1
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Par défaut [SQL] Résultat d'une requête SQL dans un tableau php et boucle while sur ce tableau

Voila je vous mets mon 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
$sql="SELECT `nom_CDS` FROM `chef_de_service`" or die (mysql_error());
$resultat=mysql_query($sql);
$use = mysql_fetch_assoc($resultat);//on stock la liste des nom de chef de service dans un tableau
		
$i=0;
while($user != $use[$i])) // on vérifie si le nom d'utilisateur entré est présent dans notre tableau
	{
	$i=$i+1;
	}
	if ($user = $use[$i])
		{
		$j=0;
		$sql2='SELECT Mot_de_passe FROM chef_de_service WHERE nom_CDS = '.$user.''or die (mysql_error());	
			$resultat2=mysql_query($sql); 
			$mdp = mysql_fetch_assoc($resultat2); //on stock le mot de passe correspondant à l'utilisateur si celui-ci existe.
			while($mot_de_passe != $mdp[$j])
			{
			$j=$j+1;
			}
			if ($mot_de_passe = $mdp[$j])
			{// si le nom d'utilisateur et le mot sont bons, on affiche la page cachée
				?>
etc...

Au fait j'ai un formulaire d'identification ou l'utilisateur doit entré son nom et son mot de passe pour pouvoir accéder aux pages suivantes. Je récupère donc la saisie de l'utilisateur
Code :
1
2
 $user = $_POST['user'];
    $mot_de_passe = $_POST['mot_de_passe'];
et je veux vérifier s'il est présent dans la base et de même pour le mot de passe. J'ai fait ce code mais il ne marche pas !! Pouvez-vous m'aidez svp ??

Voici l'erreur trouvé:
Citation:
Parse error: parse error in u:\pc\Lisa_Lovna\site php\new 3.php on line 25
A savoir que la ligne 25 est la ligne de mon while
Code :
1
2
 
while($user != $use[$i])) // on vérifie si le nom d'utilisateur entré est présent dans notre tableau
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 11h57   #2
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
Code :
$use = mysql_fetch_assoc($resultat);
renvoie les résultats de la requête un par un. Si tu veux vraiment un tableau il faut donc soit faire une boucle dessus genre :

Code :
while( $use[] = mysql_fetch_assoc($resultat))
A moins qu'il esite une fonction pour tout récupérer dans un tableau je ne la connait pas.
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 11h58   #3
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
Pour le parse error : tu as mis une parenthese en trop a la fin de ta ligne (tu en ouvres une pour le while et en fermes 2).

Et pour compléter ce que dit Asmodean, ton mysql_fetch_assoc() te retourne la première ligne de ton résultat sous forme d'un tableau associatif. Dans ton cas, ca te retournera un tableau associatif avec une seule clé : Nom_CDS.
donc tu fais ca

Citation:
Envoyé par Asmodean
Code :
while( $use[] = mysql_fetch_assoc($resultat))
et après tu récupère le nom du chef de service dans
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 13h45   #4
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Code :
while( $use[] = mysql_fetch_assoc($resultat))
Cette ligne permet de créer un tableau use[] avec tous les resultats de ma requête ?
Que dois-je mettre dans le while ?

Code :
1
2
3
4
5
6
while( $use[] = mysql_fetch_assoc($resultat))
                 {

             je dois mettre quelque-chose ici                 
                
                 }
Parce-que je dois comparé chaque élement du tableau avec la donnée du formulaire, c'est à dire avec $user car $user = $_POST['user'];


Je reste encore dans le flou
Merci pour vos réponses.
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h26   #5
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
Normalement juste le while permet de rentrer tous les résultats de la requête dans un tableau. Et il n'y a rien à mettre dans le while.

Code :
while( $use[] = mysql_fetch_assoc($resultat));
(ne pas oublier le ; à la fin)
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h41   #6
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Citation:
Envoyé par Asmodean
Normalement juste le while permet de rentrer tous les résultats de la requête dans un tableau. Et il n'y a rien à mettre dans le while.

Code :
while( $use[] = mysql_fetch_assoc($resultat));
(ne pas oublier le ; à la fin)

Ok donc grace à cette ligne de code j'obtiens un tableau $use[] avec le resultat de ma requête. Déjà une chose de faite merci!

Maintenant j'aimerais comparé chacune des données présentes dans le tableau avec la donnée entrée dans le formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
	$i=0;
	while($user != $use[i]) // on vérifie si le nom d'utilisateur entré est présent dans notre tableau
		{
		$i=$i+1;
		}
		if ($user = $use[$i]) // c'est à dire que l'élement à été trouvé
			{
                                       . . . 
                                       }
                          else // la donnée n'a pas été trouvé dans le résultat de la requête
                               {
 
                               }
Le code ci dessus convient-il ou non ?
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h44   #7
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Quel est l'intérêt de mettre l'ensemble des résultats dans un tableau puis de reparcourir ce tableau pour faire des tests Autant faire les tests lors du bouclage sur mysql_fetch_assoc...

Pour savoir si le nom existe en bas il faut que tu fasses directement ta requête avec le nom en filtre, si ta requête renvoie un enregistrement le nom existe sinon il n'existe pas. Pas besoin de charger toute la table et de comparer les enregistrements un par un...
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h48   #8
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
Ca me parait correct... Mais dans la requête ca aurait été aussi bien en fait.

Sinon attention a bien utilisé $i dans ton while et non $use[i].

Mais sinon si $use est bien un tableau a une dimension il existe la fonction in_array qui marche comme ça:

Code :
1
2
 
if( in_array($use,"Mon chef de service") ) ...
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h48   #9
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Merci Amara pour ta réponse mais je ne vois pas comment faire!
Je suis nooby dans le php et donc je ne comprends pas trop le terme filtre etc... Pourrait-tu me dire la méthode à adopté?
Merci beaucoup
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h52   #10
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Citation:
Envoyé par Asmodean
Ca me parait correct... Mais dans la requête ca aurait été aussi bien en fait.

Sinon attention a bien utilisé $i dans ton while et non $use[i].

Mais sinon si $use est bien un tableau a une dimension il existe la fonction in_array qui marche comme ça:

Code :
1
2
 
if( in_array($use,"Mon chef de service") ) ...
Sachant que $user = $_POST['user']; le code serait
Code :
if (in_array($use,$user ))
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h55   #11
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Je reformule ma question pour Amara car je pense que je ne m'exprime pas clairement du tout

Comment faire pour voir si la donnée du formulaire est présente dans le resultat de ma requête SQL sans passé par un tableau :
Code :
$sql="SELECT `nom_CDS` FROM `chef_de_service`" or die (mysql_error());
??

Je pense que c'est assez simple mais je bloque depuis un moment! Je n'arrive pas à voir apres une requete si une donnée appartient a ma base ou non.
Merci encore !
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h56   #12
Membre éclairé
 
Avatar de Asmodean
 
Inscription : février 2006
Messages : 311
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France

Informations forums :
Inscription : février 2006
Messages : 311
Points : 346
Points : 346
Envoyer un message via MSN à Asmodean
Voilà...

Mais comme l'a dit Amara avec le SQL ca serait plus simple.

Tu as juste a faire une requet du genre :

Code :
1
2
 
$sql="SELECT `nom_CDS` FROM `chef_de_service` WHERE nom_CDS='$user'" or die (mysql_error());
Et après avoir exécuté ta requête tu dois faire un :

Code :
1
2
3
4
5
 
if( mysql_fetch_array($resultat) )
{
//alors il est dedans
}
Asmodean est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 14h58   #13
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Merci Asmodean pour l'idée je vois tout à fait ce que tu veux dire! Je vais test ca de suite et si ca marche un grand grand merci à vous ! Et un grand merci pour l'aide apporté je vous redis ca dans 2 minutes.
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 15h00   #14
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Citation:
Envoyé par Asmodean
Voilà...

Mais comme l'a dit Amara avec le SQL ca serait plus simple.

Tu as juste a faire une requet du genre :

Code :
1
2
 
$sql="SELECT `nom_CDS` FROM `chef_de_service` WHERE nom_CDS='$user'" or die (mysql_error());
Et après avoir exécuté ta requête tu dois faire un :

Code :
1
2
3
4
5
 
if( mysql_fetch_array($resultat) )
{
//alors il est dedans
}
Je n'ai donc plus besoin du While() !!
Ca fait plaisir si ca marche !!
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 15h06   #15
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
MERCI !!!!!!!!!!!!!!!
Je sais pas quoi vous dire, depuis ce matin je suis dessus et en quelques minutes vous trouvez tout ! Heureux de faire partis du forum et de rencontrer des personnes comme vous!

Merci encore!!
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2007, 15h28   #16
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Asmodean a bien expliqué ce que je voulais dire avec mon histoire de filtre.

Il y a encore plus clean c'est d'utiliser mysql_num_rows une fois la requête exécutée (au lieu de faire un test sur mysql_fetch_array). Si ça retourne 0 c'est que aucun enregistrement ne correspond à la requête, donc le nom n'existe pas.

Bon courage pour la suite.
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara 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 19h16.


 
 
 
 
Partenaires

Hébergement Web