Problème if else header

Résolu
bryce78 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -  
bryce78 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis en train de réaliser un site avec une partie où l'utilisateur qui se logue est renvoyé sur une page bien précise, celle qui correspond à cet utilisateur. Pour cela je souhaite utiliser un if, else if et header mais je n'y parvient pas.

Voici mon code:


<?php
require("conf.php");

/*-----------------------------------------------------------------*/
/* PROGRAMME PRINCIPAL */
/*-----------------------------------------------------------------*/

// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>".$sql_bdd."</b> sur le serveur <b>".$sql_server."</b><br>Vérifiez les paramètres du fichier conf.php"; exit;}
if (isset($_POST['pseudo_membre']) and isset($_POST['passe_membre'])) {

$pseudo_membre=$_POST['pseudo_membre'];
$passe_membre=$_POST['passe_membre'];

// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX.HTM
$requete=mysql_select_db($sql_bdd,$db_link);
$requete=mysql_query("select pseudo,passe from membre where pseudo=\"$pseudo_membre\" and passe=\"$passe_membre\"") or die(mysql_error());


// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
{

header("Location:$url_erreur");}


else { if($pseudo=="usinage")
header("Location:inter-atelier.php");}
else { if($pseudo=="logistique")
header("Location:inter_logistique.php");}
else { if($pseudo=="moulage")
header("Location:inter-atelier.php");}
else { if($pseudo=="lambda")
header("Location:atelier.php");}
else { if($pseudo=="peinture")
header("Location:inter-atelier.php");}



// DECONNEXION MYSQL
mysql_close($db_link);
?>




Lorsque le pseudo et le passe sont juste, c'est toujours la page inter-atelier.php qui s'affiche.

Je ne comprends pas pourquoi.

Merci de votre aide


3 réponses

Meoran Messages postés 1562 Date d'inscription   Statut Membre Dernière intervention   207
 
salut,

les if se placent avant l'accolade

else if ($pseudo=="usinage") {
0
bryce78 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Merci de ta réponse Meoran, mais ça ne fonctionne toujours pas.

Voici mon code avec les modifs dont tu parles:



<?php
require("conf.php");

/*-----------------------------------------------------------------*/
/* PROGRAMME PRINCIPAL */
/*-----------------------------------------------------------------*/

// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>".$sql_bdd."</b> sur le serveur <b>".$sql_server."</b><br>Vérifiez les paramètres du fichier conf.php"; exit;}
if (isset($_POST['pseudo_membre']) and isset($_POST['passe_membre'])) {

$pseudo_membre=$_POST['pseudo_membre'];
$passe_membre=$_POST['passe_membre'];

// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX.HTM
$requete=mysql_select_db($sql_bdd,$db_link);
$requete=mysql_query("select pseudo,passe from membre where pseudo=\"$pseudo_membre\" and passe=\"$passe_membre\"") or die(mysql_error());


// SI AUCUN ENREGISTREMENT NE CORRESPOND
if(mysql_num_rows($requete)==0)
{

header("Location:$url_erreur");}


else if($pseudo=="usinage"){
header("Location:inter-atelier.php");}
else if($pseudo=="logistique"){
header("Location:inter_logistique.php");}
else if($pseudo=="moulage"){
header("Location:inter-atelier.php");}
else if($pseudo=="lambda"){
header("Location:atelier.php");}
else if($pseudo=="peinture"){
header("Location:inter-atelier.php");}

}

// DECONNEXION MYSQL
mysql_close($db_link);
?>





et voici le message d'erreur que j'obtiens:



( ! ) Notice: Undefined variable: pseudo in C:\wamp\www\login.php on line 29
Call Stack
# Time Memory Function Location
1 0.0007 378000 {main}( ) ..\login.php:0

( ! ) Notice: Undefined variable: pseudo in C:\wamp\www\login.php on line 31
Call Stack
# Time Memory Function Location
1 0.0007 378000 {main}( ) ..\login.php:0

( ! ) Notice: Undefined variable: pseudo in C:\wamp\www\login.php on line 33
Call Stack
# Time Memory Function Location
1 0.0007 378000 {main}( ) ..\login.php:0

( ! ) Notice: Undefined variable: pseudo in C:\wamp\www\login.php on line 35
Call Stack
# Time Memory Function Location
1 0.0007 378000 {main}( ) ..\login.php:0

( ! ) Notice: Undefined variable: pseudo in C:\wamp\www\login.php on line 37
Call Stack
# Time Memory Function Location
1 0.0007 378000 {main}( ) ..\login.php:0



Une autre idée?

Merci!
0
bryce78 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Pardon, la ligne 29 correspond au premier else if
0
Meoran Messages postés 1562 Date d'inscription   Statut Membre Dernière intervention   207
 
Re,

l'erreur est on ne peut plus clair, la variable pseudo n'est pas défini... Et il a raison où la définis tu dans ton code ?? ^^

Tu fais une requête sql, tu récupères le résultat mais il faut le rendre exploitable avant de l'utiliser ;)

$array = $requête->fetch();

if (empty($array)) {
...
}
else if ($array['pseudo'] == 'usinage') {
...
}
...
0
Meoran Messages postés 1562 Date d'inscription   Statut Membre Dernière intervention   207
 
Et puis prendre l'habitude de regarder la doc des fonctions que l'on utilise fréquemment pour en apprendre un peu plus sur leurs valeurs de retour par exemple...

http://fr2.php.net/manual/fr/function.mysql-query.php
0
bryce78 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
Merci encore Meoran pour tes conseils, mais je suis débutant et je ne comprends pas très bien.

Peux-tu être un peu plus clair?

Que faut-il mettre entre le if (empty($array)) { et le else if...

A quel endroit dans mon code ci-dessus dois-je insérer $array = $requête->fetch();

if (empty($array)) {

Merci
0
Meoran Messages postés 1562 Date d'inscription   Statut Membre Dernière intervention   207
 
Salut,

récupérer un pseudo dans ta base de données ne créer pas pour autant une variable $pseudo dans ton code php.

Le $array = $requête->fetch(); permet de récupérer ce pseudo dans un tableau.

Fait un print_r($array) juste après le fetch, tu verras ce qu'il contient concrètement ;)

SInon le code :


$requete=mysql_query("select pseudo,passe from membre where pseudo=\"$pseudo_membre\" and passe=\"$passe_membre\"") or die(mysql_error());


$array = $requête->fetch();

print_r($array);

if (empty($array)) {
header("Location:$url_erreur");
}
else if ($array['pseudo'] == 'usinage') {
header("Location:inter-atelier.php");
}
etc etc...
0
bryce78 Messages postés 27 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bon je viens de trouver la solution!!!

Voici le code modifié:



<?php
require("conf.php");

/*-----------------------------------------------------------------*/
/* PROGRAMME PRINCIPAL */
/*-----------------------------------------------------------------*/

// CONNEXION A LA BASE DE DONNEE
$db_link = @mysql_connect($sql_serveur,$sql_user,$sql_passwd);

if (isset($_POST['pseudo_membre']) and isset($_POST['passe_membre'])) {

$pseudo_membre=$_POST['pseudo_membre'];
$passe_membre=$_POST['passe_membre'];

// ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
// MOT DE PASSE SAISIS A LA PAGE INDEX.HTM
$requete=mysql_select_db($sql_bdd,$db_link);
$requete=mysql_query("select pseudo,passe from membre where pseudo=\"$pseudo_membre\" and passe=\"$passe_membre\"") or die(mysql_error());


// SI AUCUN ENREGISTREMENT NE CORRESPOND

if(mysql_num_rows($requete)==0)
{

header("Location:$url_erreur");}


elseif($pseudo_membre=="usinage"){
header("Location:inter-atelier.php");}
elseif($pseudo_membre=="logistique"){
header("Location:inter_logistique.php");}
elseif($pseudo_membre=="moulage"){
header("Location:inter-atelier.php");}
elseif($pseudo_membre=="lambda"){
header("Location:atelier.php");}
elseif($pseudo_membre=="peinture"){
header("Location:inter-atelier.php");}
}


// DECONNEXION MYSQL
mysql_close($db_link);
?>


Merci encore!
0