Redirection en php

Résolu/Fermé
Ehlana Messages postés 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 - 19 déc. 2014 à 00:41
vek59 Messages postés 117 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 3 décembre 2015 - 3 janv. 2015 à 00:09
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.
A voir également:

4 réponses

fr-darkrod Messages postés 418 Date d'inscription vendredi 16 août 2013 Statut Membre Dernière intervention 14 novembre 2020 23
19 déc. 2014 à 00:44
Ajoutes "exit();" comme tu as fais avec ton 2 ième code :)
0
Ehlana Messages postés 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
19 déc. 2014 à 00:50
Merci fr-darkrod mais... pas mieux... :(
0
fr-darkrod Messages postés 418 Date d'inscription vendredi 16 août 2013 Statut Membre Dernière intervention 14 novembre 2020 23
19 déc. 2014 à 00:54
0
Ehlana Messages postés 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
19 déc. 2014 à 01:32
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 418 Date d'inscription vendredi 16 août 2013 Statut Membre Dernière intervention 14 novembre 2020 23
19 déc. 2014 à 02:45
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 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
19 déc. 2014 à 07:17
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 117 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 3 décembre 2015 43
19 déc. 2014 à 04:17
La fonction header() doit être située avant tout affichage HTML.
0
Ehlana Messages postés 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
19 déc. 2014 à 07:21
Merci vek59, j'ai vu ça oui.

Comment rediriger dans mon cas alors ?
0
fr-darkrod Messages postés 418 Date d'inscription vendredi 16 août 2013 Statut Membre Dernière intervention 14 novembre 2020 23 > Ehlana Messages postés 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022
19 déc. 2014 à 12:13
Je viens de l'expliquer au dessus ...
0
Ehlana Messages postés 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
21 déc. 2014 à 11:07
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 117 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 3 décembre 2015 43
3 janv. 2015 à 00:09
Ta redirection DOIT être au dessus de tout affichage HTML. Sinon, c'est mal fait.
0
astuces72 Messages postés 7722 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 17 avril 2024 1 637
Modifié par astuces72 le 19/12/2014 à 07:22
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 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
19 déc. 2014 à 07:43
Arf! Simple, rapide et... efficace.

Ça fonctionne à merveille astuce72.

Merci !
0
vek59 Messages postés 117 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 3 décembre 2015 43
20 déc. 2014 à 18:51
Cette chose n'est pas à faire.
0
fr-darkrod Messages postés 418 Date d'inscription vendredi 16 août 2013 Statut Membre Dernière intervention 14 novembre 2020 23
20 déc. 2014 à 19:35
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 192 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 5 octobre 2022 21
21 déc. 2014 à 11:05
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 117 Date d'inscription lundi 7 juillet 2014 Statut Membre Dernière intervention 3 décembre 2015 43
2 janv. 2015 à 23:14
@Ehlana : donc ton site est mal construit.
0