Page 1 sur 2

petit problème sur header

Posté : 14 nov. 2007, 11:40
par jobart
sur le haut de ma page avant le html
j'ai
<?session_start();
if(isset($moni)==1){header('Location:index.php'); exit();}
if(isset($moni)==2){header('Location:index.php?page=membre'); exit();}
if(isset($moni)==3){header('Location:index.php?page=conextion'); exit();}
et je metsà la fin de mes fonctions
$moni=1;$moni=2;$moni=3;

mais cela ne marche pas, pourriez vous m'aiguiller pour ne pas mettre du javascript?

Posté : 14 nov. 2007, 11:51
par zeus
isset($moni)
est une instruction qui teste l'existence de la variable $moni et qui retourne true ou false

Donc, quand tu testes
isset($moni) == 2
c'est comme si tu écrivais
isset($moni) == true
Si ton but est de tester l'existence de la variable et de tester sa valeur, il faut faire 2 tests
if ( isset($moni) && ($moni == 2) )

Posté : 14 nov. 2007, 11:55
par ours-blanc-
je suis pas sur mais si tes variables $moni* ne sont pas déclarées en globales dans tes fonctions elles sont pas connues dans ton script.

Si tu veux récupérer leurs valeurs tu peux faire renvoyer à ta fonction la valeur de moni* comme ceci:

Code : Tout sélectionner

if (fonctionMoni()==1) header.... elseif (fontion(Moni==2) header... ...
ou alors déclarer tes variables en global. regarde dans le manuel php la doc du mot clé "global".

Posté : 14 nov. 2007, 11:56
par ours-blanc-
ha oui, scusez moi :oops: j'ai répondu trop vite. le isset est mal employé en effet.

Posté : 14 nov. 2007, 12:02
par jobart
merci je comprends beaucoup mieux le isset :P

mais malheureusement rien ne se passe

la je ne comprends plus :cry:

Posté : 14 nov. 2007, 12:16
par Ryle
Il y a deux choses à faire. La premieère vérifier que ta variable existe, et c'est à ca que sert le isSet() et ensuite, tester la valeur de ta variable pour savoir vers quoi rediriger :
if (isSet($moni)) {
  if ($moni==1) {
    header('Location:...');
    exit();
  }
  if ($moni==2) {
    header('Location:...');
    exit();
  }
  ...
}
Tu pourrais également simplifier ce code en utilisant une structure switch/case à la place de la série de if :
if (isSet($moni)) {
  switch($moni) {
    case 1 : 
      header('Location:...');
      exit();
    case 2 :
      header('Location:...');
      exit();
    ...
}

Posté : 14 nov. 2007, 12:23
par zeus
Je pense que ours-blanc a mis le doigt sur un truc que je n'avais pas vu. :-k

Si la variable $moni est une variable de session, il faut tout d'abord la récupérer dans la variable superglobale $_SESSION. Sur certains serveur, ta syntaxe fonctionne, mais pas sur tous. Cette syntaxe est d'ailleurs déconseillée pour cette raison.
$moni = $_SESSION['moni'];
Le code que je te conseillerais serais le suivant
<?php
  session_start();

  // Si la variable est présente en session
  if ( isset( $_SESSION['moni'] ) )
  {
    // Récupération de la variable de session
    $moni = $_SESSION['moni'];

    // Réalisation d'une action en fonction de la valeur de $moni
    switch( $moni )
    {
      case 1:
        header('Location:index.php'); 
        exit();
        break;
      case 2:
        header('Location:index.php?page=membre'); 
        exit();
        break;
      case 3:
        header('Location:index.php?page=conextion'); 
        exit();
        break;
      default: // Cette action est réalisée si $moni n'est pas présente dans les choix proposés
        ...
        break;
    }
  }
  // La variable n'est pas présente en session
  else
  {
    // Code en cas d'erreur
  }
?>

Posté : 14 nov. 2007, 14:31
par jobart
merci, avec vous je suis en plein cours de switch() :D

le probème c'est que ça marche pas et je ne vois pas ma bétise
c'est peut être mon ossature?

je vous mets mon index

j'ai mon index.php
<?session_start();
if (isset($moni)) {
  switch($moni) {
    case 1 : 
      header('Location:index.php');
      exit();
       break; 
    case 2 :
      header('Location:index.php?ote=membre');
      exit();
       break; 
    
} 
}
//------------------------------------------------------------------------------
include("fonction.inc.php");
fonctionform.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<html>
<head>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<div id="global">
<div id="header">

</div>
<div id="menu">				
</div>
<div id="center">				
<?php
$page=$_GET['ote'];
if(!isset($page))
{
$page="accueil";
include "ote/$page.php";
#
}
// si la page est definie, alors, on l'inclut !
else
{
// on vérifie que la page existe
if(file_exists("ote/$page.php"))
{
include "ote/$page.php";
}
// La page demandée est introuvable, le serveur renvoie 404
else
{
echo "<font face='tahoma' size='2'><b>ATTENTION</b> : La page $page est introuvable sur notre serveur !
<bR>Veuillez contacter <a href='mailto:[email protected]'>Le webmaster</a></font>";
#
}
}
?>
</div>
<div id="footer">
<p></p>
</div>		
</div>
</body>
</html>

et par exemple le début de la page formulaire
<?
// on vide le tableau d'erreur
unset($message); 
// recupération des valeurs du formulaire
$prenom=$_POST['prenom'];
$nom=$_POST['nom'];
$adresse=$_POST['adresse'];
$code_postal=$_POST['code_postal'];
$ville=$_POST['ville'];
$telephone=$_POST['telephone'];
$portable=$_POST['portable'];
$mail=$_POST['mail'];
$mail2=$_POST['mail2'];
$pass=$_POST['passe'];
$pass2=$_POST['pass2']; 
// on verifie que le nom n'est pas vide avant de lancer la verification qui implique des requetes SQL
if(!empty($mail)) $dispomail =  verifDispomail($mail);
// on verifie que le password n'est pas vide
$validPassword = (!empty($pass));
// on vérifie le format de l'adresse email
$validmail = validEmail($mail);
$validmail2=validEmails($mail,$mail2);
// on verifie le format du code postal
$validnom = validnom($nom);
$validadresse=validadresse($adresse);
$validprenom=validprenom($prenom);
$validcode_postal=validcode_postal($code_postal);
$validville=validville($ville);
$validtelephone=validtelephone($telephone);
$validpass=validpass($pass);
$validdepass=validdepass($pass,$pass2);
if($dispomail && $validPassword &&$validpass&&$validdepass&& $validmail2 && $validmail&&$validnom&&$validprenom&&$validadresse&&$validville&&$validcode_postal) {
// si tous les criteres sont validés, on envoie un message de validation
#
if(!get_magic_quotes_gpc())
{
// si php n'est pas configuré pour le faire automatiquement, on ajoute des \ devant les '
$prenom=addslashes($prenom);
$nom=addslashes($nom);
$adresse=addslashes($adresse);
$code_postal=addslashes($code_postal);
$ville=addslashes($ville);
$telephone=addslashes($telephone);
$portable=addslashes($portable);
$mail=addslashes($mail);
$pass=addslashes(md5($pass));
}
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('skifun',$db);
$sql = "INSERT INTO membre(id_membre ,mail,pass_md5,nom,prenom,adresse,code_postal,ville,telephone,portable) VALUES( '','$mail' ,'$pass','$nom','$prenom','$adresse','$code_postal','$ville','$telephone','$portable')";
#
$re=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
#
mysql_close();
$_SESSION['login'] = $mail; 
// on vide les données pour éviter un doublon des données en cas de nouvelle soumission du formulaire
unset($_POST);
$moni=2;
}
else {
	// si les criteres ne sont pas tous validés, on envoie le(s) message(s) d'erreur correspondant(s)
	if(!$dispomail) $message["dispomail"] = "<script language=\"JavaScript\">alert(\"cette adresse email existe d\\351j\\340\");</script>";
	if(!$validnom) $message["nom"] = "#FF0000";
	if(!$validPassword) $message["pass1"] = "#FF0000";
if(!$validPass)	$message["pass"] = "mots de passe trop court";
		if(!$validdePass) $message["pass2"] = "un des mots de passe n'est pas le même";
	if(!$validEmail) $message["mail"] = "L'adresse email n'est pas correcte";
	if(!$validEmail2) $message["mail2"] = "Les 2 adresses sont pas semblables";
	if(!$validprenom) $message["prenom"] = "#FF0000";
  if(!$validville) $message["ville"] = "#FF0000";
if(!$validadresse) $message["adresse"] = "#FF0000";
if(!$validcode_postal) $message["code_postal"] = "#FF0000";
if(!$validpays) $message["pays"] = "#FF0000";
if(!$validtelephone) $message["telephone"] = "#FF0000";

}
?>

Posté : 14 nov. 2007, 15:11
par zeus
si tu fait un var_dump($moni); juste après le session_start();, qu'est-ce qui est affiché ?

Posté : 14 nov. 2007, 15:18
par jobart
Notice: Undefined variable: moni in c:\program files\easyphp1-8\www\test\index.php on line 2
NULL

Posté : 14 nov. 2007, 15:25
par zeus
Je pense que ours-blanc a mis le doigt sur un truc que je n'avais pas vu. :-k

Si la variable $moni est une variable de session, il faut tout d'abord la récupérer dans la variable superglobale $_SESSION. Sur certains serveur, ta syntaxe fonctionne, mais pas sur tous. Cette syntaxe est d'ailleurs déconseillée pour cette raison.
$moni = $_SESSION['moni'];
Est-ce que tu as suivis ce conseil ?

Posté : 14 nov. 2007, 15:44
par jobart
j'ai suivi ce conseil
i
f ( isset( $_SESSION['moni'] ) )
  {
    // Récupération de la variable de session
    $moni = $_SESSION['moni'];

    // Réalisation d'une action en fonction de la valeur de $moni
    switch( $moni )
    {
      case 1:
        header('Location:index.php'); 
        exit();
        break;
      case 2:
        header('Location:index.php?ote=menbre'); 
        exit();
        break;
      
    }
  } 
maintenant je suis bloqué sur index.php?ote=membre
avec l'erreur
Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.

Posté : 14 nov. 2007, 20:05
par jobart
'ai fais ceci, mais ça ne me redirige pas du premier coup je suis obligé de recliquer sur le submit Think


session_start();
  // Si la variable est présente en session
  if ( isset( $_SESSION['moni'] ) )
  {
    // Récupération de la variable de session
    $moni = $_SESSION['moni'];

    // Réalisation d'une action en fonction de la valeur de $moni
    switch( $moni )
    {
      case 1:
        header('Location:index.php'); unset($_SESSION['moni']);
        exit();
        break;
      case 2:
        header('Location:index.php?ote=membre');unset($_SESSION['moni']); 
        exit();
        break;
     
     
    }
  } 

Posté : 14 nov. 2007, 20:10
par zeus
Et si tu fait un var_dump($_SESSION['moni']); ?

Posté : 14 nov. 2007, 21:02
par jobart
il le voit alors quand je le mets comme ça , normal il est avant toutes les requetes et c'est pas bon ou sinon je le mets après l'insertion dans la base: il faut cliquer une2ième fois pour que le header marche. et si je le mets dans le else cela marche mais il est toujours là

c'est surtout ma structure pour que le header foctionne au bon moment
<?
$monis=2; 
$_SESSION['moni']=$monis; 
var_dump($_SESSION['moni']);
// on vide le tableau d'erreur
unset($message); 
// recupération des valeurs du formulaire
$prenom=$_POST['prenom'];
$nom=$_POST['nom'];
$adresse=$_POST['adresse'];
$code_postal=$_POST['code_postal'];
$ville=$_POST['ville'];
$pays=$_POST['pays'];
$telephone=$_POST['telephone'];
$portable=$_POST['portable'];
$mail=$_POST['mail'];
$mail2=$_POST['mail2'];
$pass=$_POST['passe'];
$pass2=$_POST['pass2']; 
// on verifie que le nom n'est pas vide avant de lancer la verification qui implique des requetes SQL
if(isset($mail)&&!empty($mail)) $dispomail =  verifDispomail($mail);
// on verifie que le password n'est pas vide
$validPassword = (!empty($pass));
// on vérifie le format de l'adresse email
$validmail = validEmail($mail);
$validmail2=validEmails($mail,$mail2);
// on verifie le format du code postal
$validnom = validnom($nom);
$validadresse=validadresse($adresse);
$validprenom=validprenom($prenom);
$validcode_postal=validcode_postal($code_postal);
$validville=validville($ville);
$validpays=validpays($pays);
$validtelephone=validtelephone($telephone);
$validpass=validpass($pass);
$validdepass=validdepass($pass,$pass2);
if($dispomail && $validPassword &&$validpass&&$validdepass&& $validmail2 && $validmail&&$validnom&&$validprenom&&$validadresse&&$validville&&$validcode_postal) {
// si tous les criteres sont validés, on envoie un message de validation
#
if(!get_magic_quotes_gpc())
{
// si php n'est pas configuré pour le faire automatiquement, on ajoute des \ devant les '
$prenom=addslashes($prenom);
$nom=addslashes($nom);
$adresse=addslashes($adresse);
$code_postal=addslashes($code_postal);
$ville=addslashes($ville);
$pays=addslashes($pays);
$telephone=addslashes($telephone);
$portable=addslashes($portable);
$mail=addslashes($mail);
$pass=addslashes(md5($pass));
}
$db = mysql_connect('localhost', 'root', '');
mysql_select_db('skifun',$db);
$sql = "INSERT INTO membre(id_membre ,mail,pass_md5,nom,prenom,adresse,code_postal,ville,pays,telephone,portable) VALUES( '','$mail' ,'$pass','$nom','$prenom','$adresse','$code_postal','$ville','$pays','$telephone','$portable')";
#
$re=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
#
mysql_close();

$_SESSION['login'] = $mail; 
// on vide les données pour éviter un doublon des données en cas de nouvelle soumission du formulaire
unset($_POST);

}
else {
	// si les criteres ne sont pas tous validés, on envoie le(s) message(s) d'erreur correspondant(s)
	if(!$dispomail) $message["dispomail"] = "<script language=\"JavaScript\">alert(\"cette adresse email existe d\\351j\\340\");</script>";
	if(!$validnom) $message["nom"] = "#FF0000";
	if(!$validPassword) $message["pass1"] = "#FF0000";
if(!$validPass)	$message["pass"] = "mots de passe trop court";
		if(!$validdePass) $message["pass2"] = "un des mots de passe n'est pas le même";
	if(!$validEmail) $message["mail"] = "L'adresse email n'est pas correcte";
	if(!$validEmail2) $message["mail2"] = "Les 2 adresses sont pas semblables";
	if(!$validprenom) $message["prenom"] = "#FF0000";
  if(!$validville) $message["ville"] = "#FF0000";
if(!$validadresse) $message["adresse"] = "#FF0000";
if(!$validcode_postal) $message["code_postal"] = "#FF0000";
if(!$validpays) $message["pays"] = "#FF0000";
if(!$validtelephone) $message["telephone"] = "#FF0000";

}

?>