Redirection aprés verification formulaire [Résolu]

sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 28 avril 2009 à 22:26 - Dernière réponse : jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention
- 1 mai 2009 à 16:12
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
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention - 29 avril 2009 à 03:31
3
Merci
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>

Merci jreaux62 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de jreaux62
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 28 avril 2009 à 22:50
0
Merci
Salut,

Heu ... en lieu et place des echo.

Cordialement,

Kohntark -
Commenter la réponse de kohntark
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 28 avril 2009 à 23:04
0
Merci
J'ai déjà essayé et ça me mettait un message d'erreur.

Merci de votre aide

Seb
Commenter la réponse de sebing
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 28 avril 2009 à 23:09
0
Merci
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
Commenter la réponse de sebing
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 29 avril 2009 à 18:14
0
Merci
Merci pour votre aide.

Ça fonctionne très bien.

Encore merci

Seb
Commenter la réponse de sebing
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 29 avril 2009 à 21:35
0
Merci
Ça ne fonctionne pas, en fait il n'y a pas de démarrage de session.
Comment faire?
Merci

Seb
Commenter la réponse de sebing
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 29 avril 2009 à 21:39
0
Merci
C'est normal j'avais oublié <?php session_start(); ?>.

Tout fonctionne correctement.

Quelle tête en l'air

Merci encore

Seb
Commenter la réponse de sebing
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 30 avril 2009 à 08:37
0
Merci
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 -
Commenter la réponse de kohntark
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 30 avril 2009 à 14:46
0
Merci
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
Commenter la réponse de sebing
jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention - 1 mai 2009 à 11:50
0
Merci
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.
Commenter la réponse de jreaux62
sebing 144 Messages postés mercredi 3 février 2010Date d'inscription 3 novembre 2010 Dernière intervention - 1 mai 2009 à 12:08
0
Merci
Merci jreaux62 pour ces précisions.

Bon week end

Seb
Commenter la réponse de sebing
kohntark 3708 Messages postés lundi 5 juillet 2004Date d'inscription 27 avril 2012 Dernière intervention - 1 mai 2009 à 12:39
0
Merci
- 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 -
Commenter la réponse de kohntark
jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention - 1 mai 2009 à 15:59
0
Merci
@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')
Commenter la réponse de jreaux62
jreaux62 206 Messages postés vendredi 13 juin 2008Date d'inscription 24 octobre 2011 Dernière intervention - 1 mai 2009 à 16:12
0
Merci
@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 !
Commenter la réponse de jreaux62

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.