Redirection en php

Résolu
Bonjour,

Dans un script php, j'ai un formulaire d'identification basique par mdp.

	$_SESSION['ident'] = '';

	if (isset($_POST['submit']))
	{
		// bouton submit pressé, je traite le formulaire
		$pass  = (isset($_POST['pass']))  ? $_POST['pass']  : '';

		if ($pass == "kakaolait")
		{
			$_SESSION['ident'] = "ok"; // enregistrement de la variable de session
            header('Location: index1.php');
		}
		else
		{
			// une erreur de saisie ...?
			echo '<div font-weighErreur de connexion.</div>';
		}
	}; // fin if (isset($_POST['submit']))

	if (!isset($_POST['submit']))
	{
		// Bouton submit non pressé j'affiche le formulaire
		echo 'Veuillez entrer le mot de passe pour vous identifier :
        <form id="conn" method="post" action="">
            <input type="password" id="pass" name="pass">
            <input type="submit" id="submit" name="submit" value="Valider">
        </form>';
	}; // fin if (!isset($_POST['submit'])))


Dans mon index1.php, je vérifie que l'internaute est bien passé par le formulaire, qu'il n'a pas simplement tapé l'adresse de la page index1.php dans la barre d'adresse. C'est le cas si la variable de session ident est créée et a pour valeur 'ok' :

SESSION_START();
if (isset($_SESSION['ident']) AND $_SESSION['ident'] == "ok") // Si le membre s'est identifié
{
    // On affiche le site
 }
 else // Sinon, on retourne au formulaire
 {
     unset($_SESSION['ident']); // on détruit la variable de session d'identification
     header('Location: index.php');
     exit();
 }


Le souci c'est que j'ai une erreur, quand j'ai entré mon mot de passe 'kakaolait' :
Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdb/a/5/monsite/index.php:9) in /mnt/169/sdb/a/5/monsite/index.php on line 130

La ligne 130 correspondant à header('Location: index1.php'); après l'enregistrement de ma variable ident.

D'après ce que je lis un peu partout, le header ne doit rien avoir avant mais j'ai besoin de ma variable de session ident.

Je ne vois pas comment faire...

Quelqu'un pour m'aider ?

D'avance merci.

4 réponses

  1. Merci fr-darkrod mais... pas mieux... :(
    1. Je ne comprends pas comment la fonction ob_start() peut m'aider dans le cas présent.
      Je ne saisi pas ce que veut dire "démarre la tamporisation de sortie"...

      Et je ne sais pas si utiliser le javascript est judicieux (déconseillé dans la plupart des posts que j'ai vu)
    2. En faite tu as rien compris à ton message d'erreur :D il faut que tu exécutes ton code avant le code HTML :)

      //Ton CODE PHP avec les header()

      <!DOCTYPE html>
      <head>
      etc etc
    3. Je pense que j'ai bien compris mon message d'erreur. C'est p'têt toi qui n'a pas compris ma question. Ou p'têt moi qui ait mal formulé...

      Comme je l'ai écrit, j'ai bien vu un peu partout que header() doit être utilisé avant tout affichage chtemeuleu. Le truc c'est que, dans le cas présent, mon formulaire (et donc ma boucle if ; et donc ma redirection) s'affiche dans un <div> </div>.

      Donc ma question (et c'est celle que je posais initialement) est : comment faire ma redirection puisque je ne peux pas utiliser header() dans ce cas précis ?
  2. La fonction header() doit être située avant tout affichage HTML.
    1. Merci vek59, j'ai vu ça oui.

      Comment rediriger dans mon cas alors ?
    2. @EhlanaJe viens de l'expliquer au dessus ...
    3. Et moi, j'ai expliqué jusqu'au-dessus également pourquoi ma redirection ne peut pas être située avant tout affichage HTML. :)
    4. Ta redirection DOIT être au dessus de tout affichage HTML. Sinon, c'est mal fait.
  3. sly

    essaye ça:
    echo '<meta http-equiv="refresh" content="0;URL=index.php">'; 


    content=5 mettra 5 seconde avant chargement, 0 sera tout de suite
    :-)
    1. Arf! Simple, rapide et... efficace.

      Ça fonctionne à merveille astuce72.

      Merci !
    2. Cette chose n'est pas à faire.
    3. Utilises cette architecture :

      //Ton CODE PHP avec les header()

      <!DOCTYPE html>
      <html>

      <head>
      <Title>Mon site</title>
      </head>

      <body>
      Contenu de ta page
      </body>
      </html>
    4. Impossible fr-darkrod, comme je l'expliquai, le code avec header() se trouve dans un div donc forcément dans le body...
    5. @Ehlana : donc ton site est mal construit.