IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Espace membre en PHP qui ne fonctionne pas


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Espace membre en PHP qui ne fonctionne pas
    Bonjour à tou-te-s,
    J'avais un site internet qui se faisait vieux, le code au fil des mises à jour était illisible... bref je me suis lancé dans la refonte totale de mon site, l'occasion de me mettre complétement à jour niveau html5 et PHP aussi tant qu'à faire.

    Problème, je n'arrive pas à mettre en place mon espace membre.

    Je voudrais avoir sur la page index un formulaire de connexion qui s'affiche si l'on n'est pas connecté et sinon une redirection vers l'espace membre, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    session_start();
     
    if(isset($_SESSION['utilisateur'])){
    	header("Location: membre.php");
    	exit;
    }
    ?>
    <!DOCTYPE HTML>
    <html>
    	<head>
    		[...]
    	</head>
    	<body>
            [...]
    		<form action="connexion.php" method="post">
    		<label for="pseudo">Pseudo</label>
    		<input type="text" name="pseudo" value=""/>
    		<br />
    		<label for="mdp">Mot de passe</label>
    		<input type="password" name="mdp" value=""/>
    		<br />
    		<input type="submit" value="Se connecter"/>
    	     </form>
    	[...]
    	</body>
    </html>
    En validant le questionnaire j'arrive sur une page intermédiaire de connexion qui connecte la personne et l'envoi à l'espace membre. Si le pseudo ou mot de passe manquant ou incorrect on redirige vers index.html en spécifiant la raison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    session_start();
     
    include_once 'includes/config.php';
     
    if (empty($_POST['pseudo'])){
    	header("Location: index.php?c=0");
    	exit;
    }
     
    if (empty($_POST['mdp'])){
    	header("Location: index.php?c=1");
    	exit;
    }
     
    if(isset($_POST['pseudo']) AND isset($_POST['mdp'])){
    	// On vérifie que le pseudo existe bien dans la base
    	$y = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE login = ?');
    	$y->execute(array($_POST['pseudo']));
    	$x = $y->fetch();
    	if ($x[0] == 0){
    		echo 'Ce pseudo n\'existe pas';
    	}
    	else{
    		$e = $bdd->prepare('SELECT passwd FROM membres WHERE login = ?');
    		$e->execute(array($_POST['pseudo']));
    		$rep = $e->fetch();
    		$passe = sha1($_POST['mdp']);
    		if ($passe == $rep['passwd']){
    			$_SESSION['utilisateur'] = $_POST['pseudo'];
    			header("Location: membre.php");
    			exit;
    		}
    		else{
    			header("Location: index.php?c=2");
    			exit;
    		}
    	}
    }
    ?>
    Mon problème est que rien ne se passe. La partie inscription va bien insérer un nouvel enregistrement dans la base de données mais si l'utilisateur veut se connecter il arrive sur connexion.php qui est une page blanche sans aucun code. Que le pseudo, mot de passe soient renseignés ou non qu'ils soient justes ou non même résultat...

    Merci par avance pour votre aide

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.
    Mon problème est que rien ne se passe. La partie inscription va bien insérer un nouvel enregistrement dans la base de données mais si l'utilisateur veut se connecter il arrive sur connexion.php qui est une page blanche sans aucun code. Que le pseudo, mot de passe soient renseignés ou non qu'ils soient justes ou non même résultat...
    Das ist das Chaosssss !...

    - Vous parlez d'une partie "inscription et insertion dans la base"... Ce que vous avez exposé est une routine de connexion pas d'inscription.
    - Pourquoi nous égarer avec cela ?... (s'il sagit d'une routine de connexion, nous supposons que votre table "membres" est bien construite !)

    J'essaie de reformuler votre gloubi-boulga :

    - Un membre INSCRIT (ses pseudo et mdp ont été précédemment enregistrés) essaie de se connecter.
    - index.php lui affiche un FORM car sa session n'est pas renseignée (absence de $_SESSION['utilisateur']) Il se passe donc bien quelquechose...
    - le membre tape ses identifiants, et là PAGE BLANCHE...

    Si c'est bien cela, il faudrait nous dire ce que fait " include_once 'includes/config.php' ; "...
    Je suppose que c'est votre routine de connexion à votre Bdd. Mais celle-ci a t-elle bien fonctionné ?...
    Retournez vous un code erreur ?...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par iakou Voir le message
    Bonjour.

    Si c'est bien cela, il faudrait nous dire ce que fait " include_once 'includes/config.php' ; "...
    Je suppose que c'est votre routine de connexion à votre Bdd. Mais celle-ci a t-elle bien fonctionné ?...
    Retournez vous un code erreur ?...
    Oui c'est bien ça, l'inscription marche bien, les données s'enregistrent bien dans la BDD.

    Au moment de se connecter on remplit le formulaire et rien ne se passe, page blanche...

    Voici le code du config.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    	$bd_nom_serveur='';
    	$bd_login='';
    	$bd_mot_de_passe='';
    	$bd_nom_bd='';
     
    try{
    	$bdd = new PDO('mysql:host='.$bd_nom_serveur.';dbname='.$bd_nom_bd, $bd_login, $bd_mot_de_passe);
    	$bdd->exec("SET CHARACTER SET utf8");
    	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    }
     
    catch(PDOException $e){
    	echo 'Erreur : '.$e->getMessage();
    	echo 'N° : '.$e->getCode();
    }
    ?>
    Bien évidemment les variables sont renseignées.
    Je n'ai aucune erreur, aucun affichage et si je regarde le code de la page rien non plus.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Oui c'est bien ça, l'inscription marche bien, les données s'enregistrent bien dans la BDD.
    Le code de config.php que vous venez de donner, n'est qu'une connexion à votre bdd ! Rien d'autre !...

    Vous n'avez rien écrit dans votre base !...

    Voici mon raisonnement :
    - vous remplissez le formulaire et soumettez.
    - les variables "pseudo" et "mdp" sont transmis à connexion.php en POST
    - Vous tentez alors de vous connecter à votre bdd. (hélas je ne sais pas si cela a fonctionné, car je n'y entends rien à PDO...)
    - En supposant que la connexion ait fonctionné, muni de vos 2 identifiants vous partez ensuite à l'assaut de votre table "membres" !...

    Il faudrait d'une façon ou d'une autre être sûr que votre connexion à la bdd fonctionne !
    Faites un echo suivi d'un exit, par exemple !...
    Comme cela on saura au moins que config.php fonctionne, et que l'erreur est plus bas dans les instructions de lecture...

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Avant tout merci de prendre le temps de vous pencher sur le problème...

    Le config.php ne contient effectivement que la connexion à la BDD. Cette dernière fonctionne puisque lorsque je me sers du fichiers config.php sur ma page inscription.php les données du formulaires sont effectivement enregistrées dans ma base de données.

    Je me retrouve alors avec un utilisateur inscrit dans la base de données qui est sur la page index.php et renseigne son pseudo et mot de passe.
    Lorsqu'il valide le formulaire les deux champs sont envoyés vers connexion.php qui procède ainsi :
    - on fait appelle à config.php pour se connecter à la base
    - on vérifie que les champs du formulaires étaient bien remplis
    - si on a un pseudo et un mot de passe on va chercher si le pseudo existe dans la base...
    - s'il existe on regarde si le mot de passe correspond au pseudo concerné

    - si ça correspond bien on crée une session

    Dans toute cette procédure, si on échoue (pseudo manquant ou inexistants, mot de passe manquant ou inexistants, pas de correspondance...) on renvoi vers index.php
    Si on réussi on renvoi vers membre.php

    La redirection ne se fait pas puisque je reste sur connexion.php avec aucun affichage et aucun code généré.
    Mais la session n'est pas créée non plus puisque si je vais sur index.php le message "Bonjour $_SESSION['utilisateur'] !" m'affiche "Bonjour !"

    Je suis un peu perdu. L'inscription marche mais pas de connexion possible, quelque chose bloque

  6. #6
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Je comprends mieux :
    - Vous avez une procédure distincte d'inscription (inscription.php).
    - Donc vous êtes certain que votre connexion fonctionne, puisque vous l'utilisez déjà avec succès ailleurs.

    Cela coince dès la connexion effectuée, j'ai l'impression que vous passez à travers tout le code jusqu'au point d'orgue " ?> "

    J'ai déjà lu des discussions confuses au sujet de la fonction empty()... voilà ce qu'en dit PHP Manual :
    Détermine si une variable est considérée comme vide. Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE. La fonction empty() ne génère pas d'alerte si la variable n'existe pas.
    Supposons que vos variables POST n'existent pas, et que le test "empty()" ne déclenche pas (c'est également une supposition) : Vous ne retournerez pas au FORM via l'instruction header("location").
    En séquence vous faites ensuite ISSET, et comme elles n'existent pas vous allez au point d'orgue!

    Il est possible que vos POST n'existent pas !

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par iakou Voir le message
    Il est possible que vos POST n'existent pas !
    Pour le savoir j'ai modifié mon code en y insérant des traceurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?php
    include_once 'includes/config.php';
    echo '--- controle des variables POST---';
    echo 'PSEUDO : '.$_POST['pseudo'].'<br>';
    echo 'MOTDEPASSE : '.$_POST['mdp'].'<br>';
    echo '---fin contrôle des variables POST---<br>';
    
    
    
    if (empty($_POST['pseudo']))
    {
    	echo '1-la variable pseudo n\'est pas vide<br>';
    	header("Location: index.php?c=0");
    	exit;
    }
    
    if (empty($_POST['mdp']))
    {
    	echo '2-la variable mdp n\'est pas vide<br>';
    	header("Location: index.php?c=1");
    	exit;
    }
    
    if(isset($_POST['pseudo']) AND isset($_POST['mdp']))
    	{
    		echo '3-les variables pseudo et mdp sont déclarées<br>';
    		// On vérifie que le pseudo existe bien dans la base
    		$y = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE login = ?');
    		$y->execute(array($_POST['pseudo']));
    		$x = $y->fetch();
    		if ($x[0] == 0)
    		{
    			echo 'Ce pseudo n\'existe pas';
    		}
    		else
    		{
    			echo '4-le pseudo existe dans la base et on va vérifier le mdp<br>';
    			$e = $bdd->prepare('SELECT passwd FROM membres WHERE login = ?');
    			$e->execute(array($_POST['pseudo']));
    			$rep = $e->fetch();
    			$passe = sha1($_POST['mdp']);
    			if ($passe == $rep['passwd'])
    			{
    				echo '5-les mdp (envoyé formulaire et récupéré ds la bdd) correspondent<br>';
    				$pseudo = $_POST['pseudo'];
    				$_SESSION['utilisateur'] = $pseudo;
    				header("Location: membre.php");
    				exit;
    			}
    			else
    			{
    				echo '6-les mdp ne correspondent pas<br>';
    				header("Location: index.php?c=2");
    				exit;
    			}
    		}
    	}
    ?>
    Je lance la connexion en renseignant les deux champs pseudo et motdepasse et j'arrive sur la page connexion.php qui n'est plus vide comme avant, je vois mes traceurs :
    PSEUDO : monpseudo
    MODEPASSE : monmdp
    ---fin contrôle des variables POST---
    3-les variables pseudo et mdp sont déclarées
    4-le pseudo existe dans la base et on va vérifier le mdp
    5-les mdp (envoyé formulaire et récupéré ds la bdd)correspondent

    apparemment le code réagit plutôt pas mal, par contre pas de session créée et pas de redirection effectuée.

  8. #8
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Votre instruction session_start(); est partie en vacances... (probablement lors de l'écriture des traceurs)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['utilisateur'] = $pseudo;
    ne peut donc pas s'exécuter, mais je ne sais si cela peut empêcher le header("location") qui suit...

    En revanche, je ne comprends tjs pas. Cela aurait dû fonctionner avant, l'instruction session_start étant alors bien présente ???....

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    peut etre que c'était un oubli mais même en la rajoutant je n'ai rien...

  10. #10
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Bonjour.

    Que disent les logs Apache ?...
    Vous devez aussi avoir un répertoire tmp (c'est là où sont enregistrées les sessions)...
    Comme vous êtes en "refonte" vous avez peut-être modifié qqchose dans l'environnement...

    Cdlt

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Comme précisé, attention que session_start(); doit se trouver sur toutes les pages qui ont besoin de récupérer les informations de session (donc théoriquement : toutes les pages !)

    De plus, vos redirections ne peuvent fonctionner vu que vous faites des "echo". Toutes les utilisations de la fonction header() doit se faire sans qu'aucun output (affichage) n'ait été fait ! Un simple espace blanc en début de fichier peut complètement annuler la bonne marche de cette fonction, soyez très prudent avec ça.
    Préférez faire un die() avant le header location afin de contrôler vos variables, de sorte que vous n'oublierez pas de le retirer par la suite.

    Vous devriez d'ailleurs afficher votre session aux différentes étapes, ainsi vous verrez si vous assignez correctement vos variables. Vous saurez également si vous n'avez tout simplement pas oublié le session_start() quelque part ;-)

  12. #12
    Inactif  
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 374
    Points : 479
    Points
    479
    Par défaut
    Il avait placé des echo pour tracer : être sûr des variables $_POST et des routines SQL (c'est fait !)
    Mais AVANT ces tests il y avait bien session_start(), or cela ne fonctionnait pas !...
    Donc, c'est bien un pb de SESSION...

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai tout repris au départ.
    A présent j'ai un formulaire de connexion sur la page d'accueil, et lorsqu'on soumet le formulaire cela recharge la même page.

    Maintenant je peux dire que la connexion marche puisque je peux afficher un message de bienvenue personnalisé avec le pseudo du visiteur.

    Par contre lorsque je passe à une autre page je n'ai plus le message personnalisé...
    Pourtant j'ai bien mon session_start(); au début de la page.

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    J'ai repris l'encodage des pages qui étaient en UTF8 sous Notepad++

    Après l'avoir passé en UTF8 (sans BOM) ça a l'air de fonctionner...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/12/2008, 14h18
  2. [MySQL] Session php qui ne fonctionne pas
    Par tiph02 dans le forum PHP & Base de données
    Réponses: 42
    Dernier message: 04/06/2008, 11h49
  3. formulaire php qui ne fonctionne pas
    Par kate59 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/04/2008, 13h40
  4. Code php qui ne fonctionne pas
    Par bachir008 dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2007, 10h17
  5. Réponses: 4
    Dernier message: 08/02/2007, 20h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo