Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/11/2006, 22h30   #1
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
Par défaut Conserver les données passées en POST

Salut,
j'ai ce formulaire de contact :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<FORM action="includes/fr/mailcontact.php" method="POST">
 
<INPUT type="hidden" name="Subject" value="Contact">
 
 
<?php echo $contact_email; ?><INPUT name="Mail" size="30" class="inputboxweb" ><br>
<?php echo $contact_objet; ?> <INPUT name="Objet " size="30" class="inputboxnews"><br>
 
<?php echo $contact_mess; ?> <br>
<TEXTAREA cols="40" name="Message" rows="6" class="inputboximages"></TEXTAREA><br><br>
<CENTER><INPUT type="submit" value="<?php echo $contact_envoyer; ?>" class="inputboxaudio"> <INPUT type="reset" value="<?php echo $contact_annuler; ?>" class="inputboxvideo"></CENTER>
 
</FORM>
Ce code est donc envoyé avec mailcontact.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
$TO = "contact@****.com";
 
 
 
$DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!";
 
 
$headers  = "From: Anonymous on $SERVER_NAME 
<$mail>\n";
$headers .= "Message de Reedle";
 
$message = "";
 
while (list($key, $val) = each($HTTP_POST_VARS)) { 
	$message .= "$key : $val\n"; 
} 
 
$message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
 
mail($TO, $subject, $message, $headers); 
	// En : Send mail
	// Fr : Envoi du mail 
 
if(! $exit_page)
	$exit_page = $DEFAULT_EXIT_PAGE;
 
Header("Location: ".$exit_page);
 
// Exit -> $exit_page
 
?>
Mais entre les 2 je voudrais mettre un autre page (verifier.php) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
session_start();
if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
   { 
  header('Location: mailcontact.php');
}
   unset($_SESSION['cryptreload']);
   } 
  else {
       header('Location: ../../contact.php?message=Code incorrect!');
       $_SESSION['cryptreload']= true;
       }
?>
Qui donc va vérifier si un code est correct ou non. Tout marche sauf un petit (énorme) problème, toutes les données du formulaire sont perdus en chemin ( faut croire que le chemin est long^^).
Enfin, plus sérieusement, comment faire pour que les données ne soit pas perdus?

Merci de votre aide.
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 22h35   #2
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Il faut créer la session sur la page intermédiaire et après la récupérer sur la dernière page

Tu n'as qu'à faire un
Code :
$_SESSION['post'] = $_POST
Ca gardera tout le contenu de post dans une seul variable de sessions
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 22h56   #3
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
Il faut mettre sa dans verifier.php ? si oui je ne vois pas comment , car j'ai essayé et j'ai des FATAL ERROR
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h09   #4
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
dans le fichier intermédiaire oui :
Code :
1
2
3
4
5
 
session_start();
$_SESSION['post'] = $_POST;
print_r($_SESSION['post']);
print_r($_POST);
Les print_r c'est juste pour vérifier qu'il y a bien quelque chose
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h20   #5
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
J'ai mit sa :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
session_start();
$_SESSION['post'] = $_POST;
print_r($_SESSION['post']);
print_r($_POST);
session_start();
 
if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
   { 
  header('Location: mailcontact.php');
}
   unset($_SESSION['cryptreload']);
   } 
  else {
       header('Location: ../../contact.php?message=Code incorrect!');
       $_SESSION['cryptreload']= true;
       }
 
?>
Et j'ai ca :
Citation:
Parse error: syntax error, unexpected '}' in /home/recherche/www/includes/fr/verifier.php on line 13
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h27   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Problème très complexe
N'aurais-tu pas par hasard un } en trop ou mal placé vers la ligne... 13 (traduction du message d'erreur) ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h31   #7
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Au passage : ne mets pas d'espaces dans un champ GET.
=> n'écris pas :
Code :
header('Location: ../../contact.php?message=Code incorrect!');
mais plutôt :
Code :
header('Location: ../../contact.php?message='.urlencode('Code incorrect!'));
Autre chose : il est conseillé de mettre un exit() ou un die() juste après une redirection, sinon tu vas droit à l'erreur "headers already sent"...
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h36   #8
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
j'ai mit ca :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start();
$_SESSION['post'] = $_POST;
print_r($_SESSION['post']);
print_r($_POST);
 
session_start();
 
if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
   { 
  header('Location: mailcontact.php');
exit()
 
   unset($_SESSION['cryptreload']);
}
  else {
       header('Location: ../../contact.php?message=Code incorrect!');
       $_SESSION['cryptreload']= true;
       }
 
?>
Et le résultat :
Citation:
Parse error: syntax error, unexpected T_UNSET in /home/recherche/www/includes/fr/verifier.php on line 14
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h39   #9
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Et le ';' après exit() ?
Au passage :
1) exit() termine le script. Donc ton unset ne sera jamais réalisé.
2) Pourquoi mets-tu 2 session_start() ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h43   #10
Membre émérite
 
Inscription : juin 2002
Messages : 1 013
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 1 013
Points : 959
Points : 959
je mettrais un ; derrière l'instruction exit()
et je ne mettrais qu'un seul session_start

edit : oups grillé par vg33
francis m est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h45   #11
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
J'ai mi ca :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
session_start();
$_SESSION['post'] = $_POST;
print_r($_SESSION['post']);
print_r($_POST);
 
 
if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
   { 
  header('Location: mailcontact.php');
 
   unset($_SESSION['cryptreload']);
exit();
}
  else {
       header('Location: ../../contact.php?message=Code incorrect!');
       $_SESSION['cryptreload']= true;
exit();
       }
 
 
?>
Et j'ai ca:
Citation:
Array ( [Subject] => Contact [Mail] => contact@*.com [Objet_] => llfdekf [Message] => jklds [code] => 5KDCR ) Array ( [Subject] => Contact [Mail] => contact@*.com [Objet_] => llfdekf [Message] => jklds [code] => 5KDCR )
Warning: Cannot modify header information - headers already sent by (output started at /home/recherche/www/includes/fr/verifier.php:4) in /home/recherche/www/includes/fr/verifier.php on line 10
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h48   #12
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
kevinf, je vais encore être désagréable... 490 messages, et tu ne sais pas encore que tu ne dois rien envoyer au navigateur avant les headers, sinon tu as une erreur ?
L'erreur, c'est tes 2 print_r() qui affichent le contenu de tes tableaux. Les headers sont donc envoyés automatiquement par php, il est donc impossible de les modifier ensuite.
=> supprime tes print_r(), et laisse la magie opérer
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2006, 23h52   #13
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
Le message part mais sans les données POST...
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h00   #14
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Quel est ton script de départ modifié ? Et ton script d'arrivée ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h06   #15
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
J'ai ce formulaire de contact :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<FORM action="includes/fr/verifier.php" method="POST">
 
<INPUT type="hidden" name="Subject" value="Contact">
 
 
<?php echo $contact_email; ?><INPUT name="Mail" size="30" class="inputboxweb" ><br>
<?php echo $contact_objet; ?> <INPUT name="Objet " size="30" class="inputboxnews"><br>
 
<?php echo $contact_mess; ?> <br>
<TEXTAREA cols="40" name="Message" rows="6" class="inputboximages"></TEXTAREA><br><br>
  <img src="crypt/cryptographp.php"><br>
  Recopier le code:<br><input type="text" name="code"><br>
<CENTER><INPUT type="submit" value="<?php echo $contact_envoyer; ?>" class="inputboxaudio"> <INPUT type="reset" value="<?php echo $contact_annuler; ?>" class="inputboxvideo"></CENTER>
 
</FORM>
Ensuite la page verifier.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start();
$_SESSION['post'] = $_POST;
 
 
 
if ($_SESSION['cryptcode'] == md5($_POST['code']) and (!$_SESSION['cryptreload']))
   { 
  header('Location: mailcontact.php');
 
   unset($_SESSION['cryptreload']);
exit();
}
  else {
       header('Location: ../../contact.php?message=Code incorrect!&lang=fr');
       $_SESSION['cryptreload']= true;
exit();
       }
 
 
?>
Et enfin mailcontact.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
 
$TO = "contact@*.com";
 
 
 
$DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!&lang=fr";
 
 
$headers  = "From: Anonymous on $SERVER_NAME 
<$mail>\n";
$headers .= "Message de Reedle";
 
$message = "";
 
while (list($key, $val) = each($HTTP_POST_VARS)) { 
	$message .= "$key : $val\n"; 
} 
 
$message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
 
mail($TO, $subject, $message, $headers); 
	// En : Send mail
	// Fr : Envoi du mail 
 
if(! $exit_page)
	$exit_page = $DEFAULT_EXIT_PAGE;
 
Header("Location: ".$exit_page);
 
// Exit -> $exit_page
 
?>
Tout ces codes m'envoi bien le mail mais sans auccun champ du formulaire de contact.php.

Avant je n'avait pas le fichier verifier.php et tout marchait bien.
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h09   #16
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Point positif : Tes post sont en sessions
Tu retires les print_r et sur la dernière page tu les récupères avec par exemple :
Code :
$_SESSION['post']['message']
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h10   #17
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
1) $HTTP_POST_VARS est déprécié. Tu dois utiliser $_POST.
2) Tes données ne sont plus en POST (elles ne sont transmises ainsi qu'au script de traitement indiqué dans le action de ton form).
C'est pour cela que kerod te demandait de mettre tes données en session.
Il suffit donc de remplacer dans ta page mailcontact.php tous tes $HTTP_POST_VARS par $_SESSION['post'].
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h19   #18
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
Donc j'ai mis ca , j'ai pas tout compris :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
$TO = "contact@*.com";	
$DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!&lang=fr";
 
 
$headers  = "From: Anonymous on $SERVER_NAME 
<$mail>\n";
$headers .= "Message de Reedle";
 
$message = "";
 
while (list($key, $val) = each($_SESSION['post'])) { 
	$message .= "$key : $val\n"; 
} 
 
$message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
 
mail($TO, $subject, $message, $headers); 
	// En : Send mail
	// Fr : Envoi du mail 
 
if(! $exit_page)
	$exit_page = $DEFAULT_EXIT_PAGE;
 
Header("Location: ".$exit_page);
 
// Exit -> $exit_page
 
?>
Et:
Citation:
Warning: Variable passed to each() is not an array or object in /home/recherche/www/includes/fr/mailcontact.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at /home/recherche/www/includes/fr/mailcontact.php:13) in /home/recherche/www/includes/fr/mailcontact.php on line 26
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h25   #19
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
ARGHH !
Et le session_start() ?
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2006, 00h27   #20
Membre actif
 
Avatar de kevinf
 
Développeur informatique
Inscription : juin 2005
Messages : 839
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2005
Messages : 839
Points : 165
Points : 165
Je l'avais mis et ca marchait pas :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
session_start() 
$TO = "contact@*.com";	
$DEFAULT_EXIT_PAGE = "../../contact.php?message=Message bien envoyé!&lang=fr";
 
 
$headers  = "From: Anonymous on $SERVER_NAME 
<$mail>\n";
$headers .= "Message de Reedle";
 
$message = "";
 
while (list($key, $val) = each($_SESSION['post'])) { 
	$message .= "$key : $val\n"; 
} 
 
$message .= "\nSent by ".gethostbyaddr($REMOTE_ADDR). " ($REMOTE_ADDR)\n";
 
mail($TO, $subject, $message, $headers); 
	// En : Send mail
	// Fr : Envoi du mail 
 
if(! $exit_page)
	$exit_page = $DEFAULT_EXIT_PAGE;
 
Header("Location: ".$exit_page);
 
// Exit -> $exit_page
 
?>
Et:
Citation:
Parse error: syntax error, unexpected T_VARIABLE in /home/recherche/www/includes/fr/mailcontact.php on line 3
__________________
KevinF
kevinf est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h10.


 
 
 
 
Partenaires

Hébergement Web