Redirection en php

Résolu
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   -  
vek59 Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   -
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

fr-darkrod Messages postés 422 Date d'inscription   Statut Membre Dernière intervention   23
 
Ajoutes "exit();" comme tu as fais avec ton 2 ième code :)
0
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
Merci fr-darkrod mais... pas mieux... :(
0
fr-darkrod Messages postés 422 Date d'inscription   Statut Membre Dernière intervention   23
 
0
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
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)
0
fr-darkrod Messages postés 422 Date d'inscription   Statut Membre Dernière intervention   23
 
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
0
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
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 ?
0
vek59 Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   44
 
La fonction header() doit être située avant tout affichage HTML.
0
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
Merci vek59, j'ai vu ça oui.

Comment rediriger dans mon cas alors ?
0
fr-darkrod Messages postés 422 Date d'inscription   Statut Membre Dernière intervention   23 > Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention  
 
Je viens de l'expliquer au dessus ...
0
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
Et moi, j'ai expliqué jusqu'au-dessus également pourquoi ma redirection ne peut pas être située avant tout affichage HTML. :)
0
vek59 Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   44
 
Ta redirection DOIT être au dessus de tout affichage HTML. Sinon, c'est mal fait.
0
astuces72 Messages postés 7769 Date d'inscription   Statut Membre Dernière intervention   1 641
 
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
:-)
-2
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
Arf! Simple, rapide et... efficace.

Ça fonctionne à merveille astuce72.

Merci !
0
vek59 Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   44
 
Cette chose n'est pas à faire.
0
fr-darkrod Messages postés 422 Date d'inscription   Statut Membre Dernière intervention   23
 
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>
0
Ehlana Messages postés 193 Date d'inscription   Statut Membre Dernière intervention   21
 
Impossible fr-darkrod, comme je l'expliquai, le code avec header() se trouve dans un div donc forcément dans le body...
0
vek59 Messages postés 118 Date d'inscription   Statut Membre Dernière intervention   44
 
@Ehlana : donc ton site est mal construit.
0