petit problème sur header

Eléphant du PHP | 76 Messages

14 nov. 2007, 11:40

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?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2007, 11:51

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) )
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 110 Messages

14 nov. 2007, 11:55

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".

Eléphant du PHP | 110 Messages

14 nov. 2007, 11:56

ha oui, scusez moi :oops: j'ai répondu trop vite. le isset est mal employé en effet.

Eléphant du PHP | 76 Messages

14 nov. 2007, 12:02

merci je comprends beaucoup mieux le isset :P

mais malheureusement rien ne se passe

la je ne comprends plus :cry:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 nov. 2007, 12:16

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();
    ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2007, 12:23

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
  }
?>
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 76 Messages

14 nov. 2007, 14:31

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";

}
?>
Modifié en dernier par jobart le 14 nov. 2007, 15:45, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2007, 15:11

si tu fait un var_dump($moni); juste après le session_start();, qu'est-ce qui est affiché ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 76 Messages

14 nov. 2007, 15:18

Notice: Undefined variable: moni in c:\program files\easyphp1-8\www\test\index.php on line 2
NULL

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2007, 15:25

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 ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 76 Messages

14 nov. 2007, 15:44

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.

Eléphant du PHP | 76 Messages

14 nov. 2007, 20:05

'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;
     
     
    }
  } 

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

14 nov. 2007, 20:10

Et si tu fait un var_dump($_SESSION['moni']); ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 76 Messages

14 nov. 2007, 21:02

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";

}

?>
Modifié en dernier par jobart le 15 nov. 2007, 09:16, modifié 1 fois.