probleme de boucle(il sort tjrs de la boucle)

Petit nouveau ! | 6 Messages

07 sept. 2010, 13:59

bonjour;
j'ai un probleme de boucle,quand j'entre les login et les mots de passe tout le temps m'affiche ""'Check your login and / or password'""

<html>
<head>
<body bgcolor="#99ccff">
<a href="file:///C|/wamp/www/Flan/index.html"></a>
 
</body>
 
<?php
session_start();
 
 
 
echo "<center>";
$x=mysql_connect('localhost','root','');
mysql_select_db('application',$x);
$v1=$_POST['Login'];
 
$v2=$_POST['Password'];
 
 
 
$trouv=0;
$req="select * from authentification";
$res=mysql_query($req);
while($lig=mysql_fetch_array($res))
{   
   if($lig['Login']==$v1 && $lig['Password']==$v2 )
   { if( $lig ['statut']=='admin')
       $trouv=1;
	  else if($lig ['statut']=='user')
	   $trouv=2;
	  else
	   $trouv=0;
   } 
 
   
}   
	if($trouv==1)
	{ 
 
	  echo "<script >alert(\"Vous etes admin!\" );
        </script> "; 
 
	
	 header("location:index.php");
	  
	}
    else if ($trouv==2)
    {    echo "<script >alert(\"Vous etes user!\" );
        </script> "; 
	     header("location:index.php");
      
    }
	else{ 
	//echo "<html>";
	//echo "<head>";
	echo "<script>";
	echo "alert('Check your login and / or password')";
	echo "</script>";
	//echo "</head>";
	//echo "</html>";
	//echo "<b><font color=\"red\"> LOGIN OU MOT DE PASSE INCORRECT </font></b> <BR/><BR/>"; 
 
 
 
	//header("location:index.html");
	}
	 
 
	
?>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=file:///C|/wamp/www/projet/index.html">	
</head>  
</html>
et je savais pas ou reside le probleme, et vu que je suis nouvelle a la programmation PHP n'hesitez pas de me repondre svp je serai amplement reconnaissante.
Bien cordialement
Kaoutar

Eléphant du PHP | 50 Messages

07 sept. 2010, 15:48

Bonjour,

il faut que tu mettes un exit après tes header sinon la suite du code est exécutée
http://php.net/manual/fr/function.header.php

Petit nouveau ! | 6 Messages

07 sept. 2010, 16:24

je n'ai pas compris comment faire un exit apres header s'il vous plait explicite un peu votre idée je serai amplement reconnaissante.
Bien cordialement

Eléphant du PHP | 50 Messages

07 sept. 2010, 16:32

Il y a un petit exemple dans le lien que je t'ai fourni :
<?php
header("Location: http://www.example.com/"); /* Redirection du navigateur */

/* Assurez-vous que la suite du code ne soit pas exécutée une fois la redirection effectuée. */
exit;
?>

Petit nouveau ! | 6 Messages

07 sept. 2010, 16:53

d'accord merci

Petit nouveau ! | 6 Messages

08 sept. 2010, 11:58

Bonjour;
j'ai ajouté "exit" apres le header mais j'ai toujours le meme probleme :(

Mammouth du PHP | 19672 Messages

08 sept. 2010, 14:18

Salut,
ton problème est complètement logique.

Tu dois ralentir le rythme cérébral et tenter de te représenter ce qui se passe lors du déroulement de ton code.

Indices : si dans ta base de données il n'y avait qu'un seul utilisateur enregistré et que celui-ci avait le statut « admin» ou « user », ça fonctionnerait. Là, tu as au moins le dernier de la liste qui n'est ni l'un ni l'autre. Dans ta boucle, tu testes toutes les lignes de la table, donc à chaque tour, tu réinitialise la valeur de $trouv selon ce qui est trouvé. La boucle ne s'arrêtera pas parce qu'une valeur a été assignée à $trouv, elle s'arrêtera quand toutes les lignes auront été testées.

Tu pourrais de beaucoup te simplifier la vie en modifiant ta requête SQL : au lieu de demander toutes les lignes de la table, si tu demandais la valeur du statut là où le login correspond et le mot de passe correspond aussi ? Là, tu n'aurais 0 ou 1 résultat (1 à condition que tu aies mis un index UNIQUE sur ta colonne Login, sinon tu pourrais avoir plusieurs lignes de résultat pour chaque utilisateur utilisant le même login.)

Essaye de reformuler cette requête et reviens avec le résultat ;)

PS : je signale au passage que ça, c'est de la base de programmation, il est inutile de poster dans PHP avancé, ce n'est pas une honte de poster dans PHP Débutant, on a tous commencé par là et personne te traitera de minable parce que tu débutes.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: