Version complète: sur le forum Webmaster Hub : bug PHP ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
patdembe
Imaginez que dans INDEX.PHP, vous avez les instructions suivantes :
<?php
session_start();
$_SESSION ['test'] = 'OK';
header('location:print.php');
$_SESSION['test'] = 'NOT OK';
?>


Et dans PRINT.PHP, il y a simplement :
<?php
session_start();
echo $_SESSION['test'];
?>

A votre avis, quel sera le resultat de l'echo ?
'OK', évidemment...
Eh bien non, vous obtennez 'NOT OK' !!!
wacko.gif

Quelqu'un a une explication ???
Anonymus
Ce qui est étonnant, c'est que ton header marche :
header('location:print.php');
J'aurais plutot vu ca comme ceci :
header('Location: print.php');

Sinon, il faut savoir que le header n'empèche pas l'exécution du script qui se trouve derrière, d'où l'utilité d'exécuter die() après header smile.gif
patdembe
Merci !

Avec die(), on obtiens en effet un résultat plus conforme aux attentes...
smile.gif
f_trt
C'est normal pour moi
header('location:print.php');
ne veut pas dire fin du script le script continue a s'executer il faut pour être sur a mon avis toujours faire

header('location:print.php');
exit;

A+
patdembe
Salut !

dire que le script continue ou s'interrompt après header n'est pas vraiment vrai.
Ainsi, les echos qui suivent ce header ne sont pas pris en compte, les appels mysql non plus. Par contre, les opérations sur les variables sessions,elles, le seront.

Ok, si on met die() ou exit; le problème est réglé, mais tout cela ne me semble pas très logique...
header('location... '); n'est si un branchement inconditionnel (goto), ni un appel de sous-routine.

Alors, c'est quoi exactement ???
f_trt
Les echo c'est normal vu le header envoyé le navigateur ne prendra plus rien en compte par contre les appels mysql je te fais confiance si tu le dis c'est que tu as essayé moi j'aurais parié qu'il se ferait quand même donc je prend note aussi de toute façon j'ai pris l'habitude de me servir de header comme si c'etait une branchement et donc je fais tjrs un exit derrière il n'empêche que ce que tu soulèves est bon a savoir pour éviter de chercher un jour.
patdembe
Pris d'un doute, je viens de réessayer : tu as raison, les opérations mysql sont exécutées après le header('location...) !
Kent
De plus il y'a un espace entre SESSION et [

CODE
$_SESSION ['test'] = 'OK';
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.