Redirection aprés verification formulaire [Résolu]

Signaler
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010
-
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
-
Bonjour,

J'ai trouvé un script pour faire un espace membre, mais j'aimerai que celui aprés authentification m'ouvre une page.
Voici le script:

//on appel les fonctions permettant la connection a la BDD
require_once("_admin/inc_func.php"); //chemin ou se trouve les includes des fonctions

//on vérifie si les éléments de l'identification on été transmis
if (!isset($_POST["login"]) && !isset($_POST["mdp"])){
    echo "ERREUR : les paramètres d'indentification n'ont pas été transmis, veuillez réessayer de vous identifier.";
    exit;
}

//on vérifie si les 2 champs on bien été rempli
if (empty($_POST["login"]) || empty($_POST["mdp"])){
    echo "ERREUR : l'un des champs du formulaires n'a pas été rempli, veuillez remplir les 2 champs s'il vous plais.";
    exit;
}   

$connexion= connexion(USER,PASS,SERVER);
//on regarde a qui appartient le login
$req="select ".PREFIX."mdp from ".PREFIX."login where ".PREFIX."login="".$_POST["login"]."";";

//on regarde a quel groupe d'utilisateur appartient le login
//et une fois que l'on sait a quel groupe il appartient on vérifie le mot de passe
if (nbligne($req)==1){
    $curseur=execreq($req,$connexion);
    $data=mysql_fetch_array($curseur);
    if (!(md5($_POST["mdp"])==$data[PREFIX."mdp"])){
        echo " ERREUR : votre mot de passe est éronné.";
        exit;
    }
}else{
    echo "ERREUR: vous n'êtes pas inscrit sur le site.";
    exit;
}

//on démarre une session et on y inscrit les variables de session correspondant a l'utilisateur

$_SESSION['login'] =$_POST["login"];
$_SESSION['identification']="ok";

echo "Vous êtes maintenant identifié
";
echo "page de test";

J'aimerai remplacer les "echo" par une page, ou dois je mettre le header?

Merci par avance

Seb

14 réponses

Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Bonjour,
"headers already sent" : NE PAS METTRE DE CODE HTML (echo ..., balises, ... espace) avant un header(location ...) ou un session_start.

DONC :

Page verification.php :
<?php
$messageerreur = '';
//on appel les fonctions permettant la connection a la BDD
require_once("_admin/inc_func.php"); //chemin ou se trouve les includes des fonctions
//on vérifie si les éléments de l'identification on été transmis
if (!isset($_POST["login"]) && !isset($_POST["mdp"])){
    $messageerreur .=  " ERREUR : les paramètres d'indentification n'ont pas été transmis, veuillez réessayer de vous identifier.";
    header('Location: identification.php');
    exit;
}
//on vérifie si les 2 champs on bien été rempli
if (empty($_POST["login"]) || empty($_POST["mdp"])){
    $messageerreur . =  "ERREUR : l'un des champs du formulaires n'a pas été rempli, veuillez remplir les 2 champs s'il vous plait.";
    header('Location: identification.php');
    exit;
}  
$connexion= connexion(USER,PASS,SERVER);
//on regarde a qui appartient le login
$req="select ".PREFIX."mdp from ".PREFIX."login where ".PREFIX."login="".$_POST["login"]."";";
//on regarde a quel groupe d'utilisateur appartient le login
//et une fois que l'on sait a quel groupe il appartient on vérifie le mot de passe
if (nbligne($req)==1){
    $curseur=execreq($req,$connexion);
    $data=mysql_fetch_array($curseur);
    if (!(md5($_POST["mdp"])==$data[PREFIX."mdp"])){
        $messageerreur .=  " ERREUR : votre mot de passe est éronné.";
    header('Location: identification.php');
        exit;
    }
}else{
    $messageerreur . =  "ERREUR: vous n'êtes pas inscrit sur le site.";
    exit;
}
//on démarre une session et on y inscrit les variables de session correspondant a l'utilisateur
$_SESSION['login']= $_POST["login"];
$_SESSION['identification']="ok";
header('Location: http://amk78.free.fr/');
?>

Et dans la page identification.php :
<html>
.....

<form method ="post" action="verification.php">
.......... (formulaire d identification : login et mdp)
</form>
<?php
// affichage du message d'erreur eventuel apres soumission
echo @$messageerreur; ?>

</html>
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Heu ... en lieu et place des echo.

Cordialement,

Kohntark -
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

J'ai déjà essayé et ça me mettait un message d'erreur.

Merci de votre aide

Seb
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

Le message d'erreur était le suivant:
Warning: Cannot modify header information - headers already sent
by (output started at
/mnt/102/sda/5/7/xxx/espace_membres/identification_valid.php:8) in /mnt/102/sda/5/7/xxx/espace_membres/identification_valid.php on line 56

Voici la ligne que j'avais mise à la place des echo:
header('Location: http://amk78.free.fr/');

Merci encore

Seb
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

Merci pour votre aide.

Ça fonctionne très bien.

Encore merci

Seb
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

Ça ne fonctionne pas, en fait il n'y a pas de démarrage de session.
Comment faire?
Merci

Seb
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

C'est normal j'avais oublié <?php session_start(); ?>.

Tout fonctionne correctement.

Quelle tête en l'air

Merci encore

Seb
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Tout fonctionne correctement.

=>
Je ne sais pas trop comment tu as modifié le script mais il y a des choses qui ne peuvent pas fonctionner :
Tous les $messageerreur ne servent à rien et ne seront jamais affiché

$_SESSION['login']=$_POST["login"];
$_SESSION['identification']="ok";
header('Location: http://amk78.free.fr/');
=>
La session n'étant pas démarrée les 2 premières lignes ne servent à rien. Si tu mets un session_start avant le header plantera.

En fait je pense que tu pourrais faire bien plus simple.

Cordialement,

Kohntark -
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

Bonjour Kohntar,

Si j'enlève $messageerreur, la requête ne marche pas., jreaux62 peux tu m'expliquer à quoi sert $messageerreur.
Que me conseils tu Kohntar?
Merci de vos aides, j'ai pas fini aprés je vais essayer de faire des redirections par rapport à des groupes (c'est pas gagné!!!)

Bonne journée

Merci encore

Seb
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
Bonjour,
je me suis contenté de restructurer ton code (mais sans chercher a l'optimiser)
Je répète :
NE PAS METTRE DE CODE HTML (affichage d'echo ..., balises, ... espace) avant un header(location ...)
Donc :
- comme tu veux faire des redirection, toutes cette portion de code PHP doit se faire imperativement AVANT tout affichage html, donc avant la balise <html> .....
- comme dans ce traitement, tu souhaites pouvoir afficher des messages d'erreur, j'ai mis cette variable $messageerreur pour "stocker" les messages, et pouvoir APRES les afficher dans le code html.
Messages postés
144
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
3 novembre 2010

Merci jreaux62 pour ces précisions.

Bon week end

Seb
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
- comme dans ce traitement, tu souhaites pouvoir afficher des messages
d'erreur, j'ai mis cette variable $messageerreur pour "stocker" les
messages, et pouvoir APRES les afficher dans le code html.

=> J'ai peut être loupé quelque chose mais je ne vois pas comment $messageerreur pourrait être affichée sur une autre page appelée par un header.
-> cette variable sera toujours vide (ou plus exactement non définie)

Cordialement,

Kohntark -
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
@Kohntark :

$messageerreur est ici prévu pour être affiché dans la MEME page (formulaire et traitement sur la meme page)

En effet, si l'affichage d'un message d'erreur est prévu pour être affiché dans une AUTRE page (après une redirection, par exemple), on doit utiliser une variable "transportable", par exemple :
- SESSION['messageerreur'] = $messageerreur;
- ou dans la redirection :
header('location : lapage.php?messageerreur=$messageerreur')
Messages postés
195
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 octobre 2011
27
@Kohntark :
je viens de relire le message où j'ai mis le code "corrigé"
Je n'avais en effet pas fait attention qu'il y avait 2 pages différentes !
Mea Culpa, tu as eu parfaitement raison de me reprendre.

@sebing :
lis le message ci-dessus !