[RESOLU] Problème header sans exit

Eléphant du PHP | 385 Messages

27 janv. 2016, 15:30

Bonjour à tous,

Pourriez vous m'aider? voici mon problème

Code : Tout sélectionner

$requete = "SELECT NUM_PROJET FROM POP_PROJET WHERE NUM_PROJET ='".$num_projet."'"; $statement = oci_parse($conn, $requete); oci_execute($statement,OCI_COMMIT_ON_SUCCESS); $numrows = oci_fetch_all($statement, $res); if($numrows > 0){ $_SESSION['MESSAGE'] = T_("Le numéro de projet ne doit pas exister!"); header('Location: ajt_projet.php'); exit ; }
ici je regarde si un projet existe déjà si j'enlève le exit celui-ci me redirige vers une autre page avec un header plus bas je ne comprends pas comment cela est possible auriez-vous une explication?

Avatar du membre
Mammouth du PHP | 1609 Messages

27 janv. 2016, 15:40

Bonjour, cela est possible car la fonction header n'arrête pas l'exécution du script qui continue jusqu'au bout. Donc si tu as un autre header location et que le script passe dessus, il remplace le précédent.

Si aucune autre ligne ne doit être exécutée après un header location le plus simple reste de mettre un exit en suivant, rien d'anormal à cela.

PS : quand on fait un header location ce n'est pas le serveur qui fait la redirection, c'est le navigateur qui en interprétant le header demande la nouvelle page.
Développeur web depuis + de 20 ans

Eléphant du PHP | 385 Messages

28 janv. 2016, 17:35

Super merci je ne savais pas ça je me coucherais moins bête.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

29 janv. 2016, 00:35

D'une façon générale, dès qu'on ajoute dans son code un header("location:..."), il faut prendre l'habitude d'ajouter un exit immédiatement derrière.
Il n'y a aucune raison valable de ne pas mettre un exit vu qu'on demande une redirection immédiate vers une autre page, ça permet d'éviter des bugs :)
Quand tout le reste a échoué, lisez le mode d'emploi...