petit problème sur header

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : petit problème sur header

par zeus » 16 nov. 2007, 12:25

J'ai rien compris à ce dernier message ... :-k

Il est normal qu'il ne voit la variable de session qu'après validation ... mais je ne comprend pas la suite :-/

par jobart » 16 nov. 2007, 11:51

il le voit après avoir valider ,normal donc je suis obliger de cliquer une 2ième fois

par zeus » 16 nov. 2007, 11:09

Et quel est le résultat de ce var_dump() dans le bon script ? ;)

par jobart » 16 nov. 2007, 10:06

parce que je viens de m'en apercevoir bétise du débutant :oops:

par zeus » 14 nov. 2007, 21:41

pourquoi est-ce que tu essayes de faire le var_dump() dans le script de validation alors que le problème se situe dans la redirection :?:

par jobart » 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";

}

?>

par zeus » 14 nov. 2007, 20:10

Et si tu fait un var_dump($_SESSION['moni']); ?

par jobart » 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;
     
     
    }
  } 

par jobart » 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.

par zeus » 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 ?

par jobart » 14 nov. 2007, 15:18

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

par zeus » 14 nov. 2007, 15:11

si tu fait un var_dump($moni); juste après le session_start();, qu'est-ce qui est affiché ?

par jobart » 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";

}
?>

par zeus » 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
  }
?>

par Ryle » 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();
    ...
}