Redirection aprés verification formulaire

Résolu
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010 - 28 avril 2009 à 22:26
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 - 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

14 réponses

jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
29 avril 2009 à 03:31
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>
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 avril 2009 à 22:50
Salut,

Heu ... en lieu et place des echo.

Cordialement,

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

Merci de votre aide

Seb
0
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
28 avril 2009 à 23:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebing Messages postés 144 Date d'inscription mercredi 3 février 2010 Statut Membre Dernière intervention 3 novembre 2010
29 avril 2009 à 18:14
Merci pour votre aide.

Ça fonctionne très bien.

Encore merci

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

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

Tout fonctionne correctement.

Quelle tête en l'air

Merci encore

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

Bon week end

Seb
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
1 mai 2009 à 12:39
- 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 -
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
1 mai 2009 à 15:59
@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')
0
jreaux62 Messages postés 195 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 octobre 2011 32
1 mai 2009 à 16:12
@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 !
0
Rejoignez-nous