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 :

Connexions - Deux tables


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut Connexions - Deux tables
    Bonsoir,

    Voilà ce que j'aimerais faire :

    Un formulaire de connexion mais assez différents des autres :

    - Connexion via 2 tables (fournisseur et client) cela peut-il se faire où il faut faire 2 bloc de connexion distinct sachant que le nom des champs sont les mêmes ?

    - Si ses identifiants de connexion (email et mdp) sont correcte alors une question secrète s'affiche (la question qu'il a choisis lors de l'inscription) avec la réponse secrète (qu'il a choisis lors de l'inscription).

    - Si la valeur de sa réponse = à la réponse qu'il a indiqué lors de son inscription alors SESSION créer et redirection vers une page en fonction de son rang (Client : client.php ou fournisseur : fournisseur.php).

    Table Client :
    id, email, password, question, rep, rang
    Table fournisseur :
    id, email, password, question, rep, rang.

    Vous allez me dire mais pourquoi avoir créer deux table, pour les distinguer mais aussi le fait que leurs champs sont différents.

    En prenant cette exemple :

    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
    <?
    // LE CHANTIER
     
        $message='';
        if (empty($_POST['email']) || empty($_POST['password']) ) // Oublie d'un champ
        {
            $message = '<p>une erreur s\'est produite pendant votre identification.
    	Vous devez remplir tous les champs</p>
    	<p>Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
        }
        else //// on vérifie si le membre a bien son compte activé (si son rang vaut 1 ou est supérieur à 1) on check le mot de passe
        {
     
           $reponse = mysql_query("SELECT id, email, password, rang  FROM clients and fournisseur WHERE email = $_POST['email'] AND rang => 1") or die(mysql_error()); 
     while($data = mysql_fetch_array($reponse)) 
     
    	if ($data['password'] == md5($_POST['password'])) // Acces OK !
    	{
     
    // Affichage de la question 
     
    $message = 'Connexion reussie, mais avant de pouvoir accéder à notre espace, merci de répondre à votre question : '.$data['question'].' 
    <br><form action="connexion.php" method="post">
    		<br>Réponse : <input type="text" name="rep"/>
    <INPUT type="submit" value="Envoyer"></form>';  
     
    else // Acces pas OK !
    	{
    	    $message = '<p>Une erreur s\'est produite 
    	    pendant votre identification.<br /> Le mot de passe ou lemail
                entré n\'est pas correcte.</p><p>Cliquez <a href="./connexion.php">ici</a> 
    	    pour revenir à la page précédente
    	    <br /><br />Cliquez <a href="./index.php">ici</a> 
    	    pour revenir à la page d accueil</p>';
    	}
     
    if ($_POST['rep']) == $data['rep'])) // si la reponse donner correspond à celle qu'il a choisit lors de l'inscription alors on creer les sessions
        {
           $message = '<p>Bienvenue '.$data['email'].', 
    			vous êtes maintenant connecté!</p>
    			<p>Cliquez <a href="./index.php">ici</a> 
    			pour revenir à la page d accueil</p>';
     
    // Puis redirection en fonction du statut (comment ?)
     
        }
     
    else // erreur reponse !
    	{
    	    $message = '<p>La réponse que vous avez donné n'est pas correcte.</p>';
    	}
    }
    
        echo $message.'</div></body></html>';
    ?>

    Mon code est mal ingenter mais du coup avec tout ses if et ses else je sais pas comment procéder !
    merci

    On m'a parler des jointures,
    Je dois faire une requête de ce type ?

    SELECT email, password, id, rang, rep, question FROM Client, Fournisseur
    WHERE Client.email=Fournisseur.email, Client.password=Fournisseur.password, Client.id=Fournisseur.id, Client.rang=Fournisseur.rang, Client.rep=Fournisseur.rep, Client.question=Fournisseur.question

    merci

  2. #2
    Membre actif Avatar de stephanegib2
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2011
    Messages : 152
    Points : 233
    Points
    233
    Par défaut
    Bonjour,

    Dans ton cas tu ne pourra pas faire de jointure, à part si il y a un lien entre la table client et fournisseur.
    Pour la syntaxe des jointures avec mysql : http://dev.mysql.com/doc/refman/5.0/fr/join.html

    sinon tu devra faire 2 requetes. une pour client et si il y a pas de resultat une pour fournisseur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par stephanegib2 Voir le message
    tu devra faire 2 requetes. une pour client et si il y a pas de resultat une pour fournisseur.


    Une solution simple est aussi de demander dans le formulaire (avec des boutons radio) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vous êtes : O Client  O Fournisseur
    Et choisir la table en fonction du choix.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message


    Une solution simple est aussi de demander dans le formulaire (avec des boutons radio) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Vous êtes : O Client  O Fournisseur
    Et choisir la table en fonction du choix.
    Merci stephanegib,
    ok pour pas de jointure,

    jreaux => j'ai fais 2 requête, sachant que l'admin , rang 3, apparaitra soit dans la table client ou fournisseur inutile de recreer une 3ème table je pense...

    J'ai essayer de structurer sa, mais je pense que ce n'est pas bon !

    Voilà mon code, merci à vous

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    <code type="php"><?
    // LE CHANTIER
     
        $message='';
        if (empty($_POST['email']) || empty($_POST['password']) ) // Oublie d'un champ
        {
            $message = '<p>une erreur s\'est produite pendant votre identification.
    	Vous devez remplir tous les champs</p>
    	<p>Cliquez <a href="./connexion.php">ici</a> pour revenir</p>';
        }
        else //// on vérifie si le membre a bien son compte activé (si son rang vaut 1) on check le mot de passe
        {
     
           $req_clients = mysql_query("SELECT id, email, password, rang  FROM clients WHERE email = $_POST['email'] AND rang = 1") or die(mysql_error()); 
     while($data = mysql_fetch_array($req_clients)) 
     
     $req_fournisseur = mysql_query("SELECT id, email, password, rang  FROM fournisseur WHERE email = $_POST['email'] AND rang => 2") or die(mysql_error()); 
     
     while($data = mysql_fetch_array($req_fournisseur))
    while($data = mysql_fetch_array($req_clients))
     
    	if ($data['password'] == md5($_POST['password'])) // Acces OK !
    	{
     
    // Affichage de la question 
     
    $message = 'Connexion reussie, mais avant de pouvoir accéder à notre espace, merci de répondre à votre question : '.$data['question'].' 
    <br><form action="connexion.php" method="post">
    		<br>Réponse : <input type="text" name="rep"/>
    <INPUT type="submit" value="Envoyer"></form>';  
     
    else // Acces pas OK !
    	{
    	    $message = '<p>Une erreur s\'est produite 
    	    pendant votre identification.<br /> Le mot de passe ou lemail
                entré n\'est pas correcte.</p><p>Cliquez <a href="./connexion.php">ici</a> 
    	    pour revenir à la page précédente
    	    <br /><br />Cliquez <a href="./index.php">ici</a> 
    	    pour revenir à la page d accueil</p>';
    	}
     
    if ($_POST['rep']) == $data['rep'])) // si la reponse donner correspond à celle qu'il a choisit lors de l'inscription alors on creer les sessions
        {
     
        // Création des sessions
     
        $_SESSION['email'] = $data['email'];
    	    $_SESSION['level'] = $data['membre_rang'];
    	    $_SESSION['id'] = $data['membre_id'];
     
           $message = '<p>Bienvenue '.$data['email'].', 
    			vous êtes maintenant connecté!</p>
    			<p>Cliquez <a href="./index.php">ici</a> 
    			pour revenir à la page d accueil</p>';
     
     
    // Si la réponse est correcte, redirection en fonction du statut (comment ?)
     
    if ($data['rang'] == 1))
     {
    <meta http-equiv="refresh" content="3; URL=client.php">
        }
     
        if ($data['rang'] == 2))
     {
    <meta http-equiv="refresh" content="3; URL=fournisseur.php">
        }
     
        if ($data['rang'] == 3))
        {
    <meta http-equiv="refresh" content="3; URL=admin.php">
        }
     
    else // erreur reponse !
    	{
    	    $message = '<p>La réponse que vous avez donné n'est pas correcte.</p>';
    	}
    
        echo $message.'</div></body></html>';
    ?></code>
     
    Une requête client, une requête fournisseur ! 
     
    Sachant qu'il n'y aura pas de table admin, enfait un client peux avoir le rang 3 ou un fournisseur.
     
    J'ai essayer de dépapouiller sa, la structure n'est pas bonne je pense mais l'idée est là ! ^^

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    pourquoi faire une connexion "en deux temps" ?
    1/ "email" + "mot de passe"
    2/ "question secrète"
    Normalement, la "question secrète" ne sert qu'en cas de "perte du mot de passe".

    PRINCIPE de Connexion :
    1/ Formulaire : indiquez "email" + "mot de passe" + bouton "envoyer"
    2/ Traitement :
    $rang_user = 0;
    - requête1 dans la table client :
    -> si on trouve un enregistrement : OK, c'est un client : on récupère $rang_user = $row1['rang'];
    -> sinon :
    --- requête2 dans la table fournisseur :
    ---> si on trouve un enregistrement : OK, c'est un fournisseur : on récupère $rang_user = $row2['rang'];
    ---> sinon : ni client ni fournisseur (erreur)
    -> sinon : ni client ni fournisseur (erreur)
    3/ Redirection vers la bonne page, en fonction du rang (0, 1, 2 ou 3)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Voilà à quoi ça peut ressembler (FORMULAIRE + TRAITEMENT dans la même page) :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    <?php session_start();
    // initialisation
    $message_erreur = '';
    $valid_connect 	= false;
    // Si envoyé : TRAITEMENT DU FORMULAIRE DE CONNEXION (dans la même page que le formulaire !)
    if(isset($_POST['envoiconnexion'])) 
    {
        $_SESSION['user_id'] 	= 0;
        $_SESSION['user_rang'] 	= 0;
    	// récupération des données envoyées
    	$email_recu 	= (isset($_POST['email'])? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password'])? 	mysql_real_escape_string(trim($_POST['password'])) : '';
     
    	// on vérifie si le membre a bien son compte activé
        if ($email_recu=='' || $password_recu=='' ) // Oublie d'un champ
        {
            $message_erreur = '<p>Vous devez remplir tous les champs</p>';
    		$valid_connect 	= false; // non
     
        } else {
     
    		// 1/ recherche dans la table "clients"
    		$req_clients = "SELECT id, rang  FROM clients WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    		$res_clients = mysql_query($req_clients) or die(mysql_error()); 
    		$nbr_clients = mysql_num_rows($res_clients); // nombre de lignes trouvées 
     
    		if ($nbr_clients == 1){ // un client trouvé !
    			$row_clients = mysql_fetch_row($res_clients);
    				// enregistrement en SESSION
    				$_SESSION['user_id'] 	= $row_clients['id']; 
    				$_SESSION['user_rang'] 	= $row_clients['rang'];
    				$valid_connect = true; // ok
    		} else {
     
    			// 2/ recherche dans la table "fournisseurs"
    			$req_fournis = "SELECT id, rang  FROM fournisseur WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    			$res_fournis = mysql_query($req_fournis) or die(mysql_error()); 
    			$nbr_fournis = mysql_num_rows($res_fournis); // nombre de lignes trouvées 
    			if ($nbr_fournis == 1){ // un fournisseur trouvé !
    				$row_fournis = mysql_fetch_row($res_fournis);
    				$_SESSION['user_rang'] = $row_fournis['rang'];
    				// enregistrement en SESSION
    				$_SESSION['user_id'] 	= $row_fournis['id']; 
    				$_SESSION['user_rang'] 	= $row_fournis['rang'];
    				$valid_connect = true; // ok
     
    			} else { // ni client, ni fournisseur !
    				$message_erreur = '<p>Aucun résultat trouvé avec ces paramètres.</p>';
    				$valid_connect = false; // non
    			}
    		}
    	}
     
    	// redirection en fonction du rang
    	switch ($_SESSION['user_rang']) {
    		case 1: // CLIENT
    			header('location : client.php');
    			break;
    		case 2: // FOURNISSEUR
    			header('location : fournisseur.php');
    			break;
    		case 3: // ADMIN
    			header('location : admin.php');
    			break;
    		case 0: // pas trouvé !
    		default: // par defaut
    			$valid_connect = false; // non
    			// on reste sur la page (affichage formulaire + message d'erreur)
    	}
    } // fin traitement du formulaire.
     
    // AFFICHAGE DU FORMULAIRE
    if ($valid_connect === false)
    {
    ?>
    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr-fr" dir="ltr">
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Connexion</title>
    </head>
    <body>
     
    <h1>Connexion :</h1>
     
    <?php // message d'erreur ?
    if ($message_erreur != '') { ?>
    	<p><?php echo $message_erreur; ?></p>
    <?php } ?>
     
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    	<p>
    		<label for="idemail">Votre email : </label>
    		<input id="idemail" type="text" name="email" value=""/>
    	</p>
    	<p>
    		<label for="idpassword">Votre Mot de passe : </label>
    		<input id="idpassword" type="password" name="password" value=""/>
    	</p>
    	<p>
    		<input type="submit" name="envoiconnexion" value="envoyer"/>
    	</p>
    </form>
     
    </body>
    </html>
    <?php
    } // fin affichage formulaire de connexion
    ?>
    PS : j'ai viré la "question secrète" de la connexion, comme expliqué plus haut.

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,
    pourquoi faire une connexion "en deux temps" ?
    1/ "email" + "mot de passe"
    2/ "question secrète"
    Normalement, la "question secrète" ne sert qu'en cas de "perte du mot de passe".

    PRINCIPE de Connexion :
    1/ Formulaire : indiquez "email" + "mot de passe" + bouton "envoyer"
    2/ Traitement :
    $rang_user = 0;
    - requête1 dans la table client :
    -> si on trouve un enregistrement : OK, c'est un client : on récupère $rang_user = $row1['rang'];
    -> sinon :
    --- requête2 dans la table fournisseur :
    ---> si on trouve un enregistrement : OK, c'est un fournisseur : on récupère $rang_user = $row2['rang'];
    ---> sinon : ni client ni fournisseur (erreur)
    -> sinon : ni client ni fournisseur (erreur)
    3/ Redirection vers la bonne page, en fonction du rang (0, 1, 2 ou 3)
    Merci vraiment , je vais pouvoir regarder sa
    Je voulais mettre la question secrète pour rajouter une sécurité en plus lors de l'identification, mais je pense que je vais mettre cela de coté

    Par contre j'ai une erreur en insérant ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	// récupération des données envoyées
    	$email_recu 	= (isset($_POST['email'])? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password'])? 	mysql_real_escape_string(trim($_POST['password'])) : '';
    Parse error: syntax error, unexpected ';' in /home/projecth/public_html/vinicom.fr/connexion_ok.php on line 18

  8. #8
    Invité
    Invité(e)
    Par défaut
    Erreurs de parenthèses... un grand classique !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$email_recu 	= (isset($_POST['email']))? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password']))? 	mysql_real_escape_string(trim($_POST['password'])) : '';
    Si j'ai mis ce code, c'est AUSSI et SURTOUT pour que tu le lises et le COMPRENNES.

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Erreurs de parenthèses... un grand classique !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$email_recu 	= (isset($_POST['email']))? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password']))? 	mysql_real_escape_string(trim($_POST['password'])) : '';
    Si j'ai mis ce code, c'est AUSSI et SURTOUT pour que tu le lises et le COMPRENNES.
    Effectivement ! ^^

    J'ai regardé ton code,

    En testant les sessions, l'email n’apparait pas ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <? echo'<b>'.stripslashes(htmlspecialchars($_SESSION['email'])).''; ?></b>
    J'ai le message aucun résultat trouvé avec ce paramètre (ok) mais lorsque je veux me connecté avec un identifiant d'un des deux tables, aucun message d'erreur et rien ne se passe, aucune session créer et redirection non effectuer ^^

    case 0: // pas trouvé !
    default: // par defaut

    En dessous de case 0 tu a oublé un break non ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    -> As-tu bien <?php session_start(); au début de chaque fichier ?

    -> mets des echo ...; dans ton script pour tester, vérifier, contrôler (transmission de variable,...)

    -> remplace PARTOUT <? par <?php

    Et redonne-nous ton code actuel.
    Dernière modification par Invité ; 17/05/2012 à 08h37.

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    -> As-tu bien <?php session_start(); au début de chaque fichier ?

    -> mets des echo ...; dans ton script pour tester, vérifier, contrôler (transmission de variable,...)

    -> remplace PARTOUT <? par <?php

    Et redonne-nous ton code actuel.
    Oui j'ai bien mis <?php session_start();
    J'ai fais un test pour afficher les variables email_reçu, password_reçu et j'ai bien l'email et le mot de passe qui s'affiche pourtant, après soumission du formulaire.
    Remplacement des balises PHP ok.

    J'ai aussi mis le div après le header car sauf erreur de ma part il ne faut pas qu'il y ai de html avant un header.

    merci à toi

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    <?php 
    session_start();
     
    include('includes/haut.php'); 
    include('includes/menu_g.php'); 
    include('includes/menu_d.php'); 
    ?>
     
    <?php
    $message_erreur = '';
    $valid_connect 	= false;
    // Si envoyé : TRAITEMENT DU FORMULAIRE DE CONNEXION (dans la même page que le formulaire !)
    if(isset($_POST['envoie_connexion'])) 
    {
        $_SESSION['id'] 	= 0;
        $_SESSION['level'] 	= 0;
    	// récupération des données envoyées
    	$email_recu 	= (isset($_POST['email']))? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password']))? 	mysql_real_escape_string(trim($_POST['password'])) : '';
     
    	// on vérifie si le membre a bien son compte activé
        if ($email_recu=='' || $password_recu=='' ) // Oublie d'un champ
        {
            $message_erreur = '<p>Vous devez remplir tous les champs</p>';
    		$valid_connect 	= false; // non
     
        } else {
     
    		// 1/ recherche dans la table "clients"
    		$req_clients = "SELECT id, rang  FROM vinicom_clients WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    		$res_clients = mysql_query($req_clients) or die(mysql_error()); 
    		$nbr_clients = mysql_num_rows($res_clients); // nombre de lignes trouvées 
     
    		if ($nbr_clients == 1){ // un client trouvé !
    			$row_clients = mysql_fetch_row($res_clients);
    				// enregistrement en SESSION
    				$_SESSION['id'] 	= $row_clients['id']; 
    				$_SESSION['level'] 	= $row_clients['rang'];
    				$valid_connect = true; // ok
    		} else {
     
    			// 2/ recherche dans la table "fournisseurs"
    			$req_fournis = "SELECT id, rang  FROM vinicom_fournisseurs WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    			$res_fournis = mysql_query($req_fournis) or die(mysql_error()); 
    			$nbr_fournis = mysql_num_rows($res_fournis); // nombre de lignes trouvées 
    			if ($nbr_fournis == 1){ // un fournisseur trouvé !
    				$row_fournis = mysql_fetch_row($res_fournis);
    				$_SESSION['level'] = $row_fournis['rang'];
    				// enregistrement en SESSION
    				$_SESSION['id'] 	= $row_fournis['id']; 
    				$_SESSION['level'] 	= $row_fournis['rang'];
    				$valid_connect = true; // ok
     
    			} else { // ni client, ni fournisseur !
    				$message_erreur = '<p>Aucun résultat trouvé avec ces paramètres.</p>';
    				$valid_connect = false; // non
    			}
    		}
    	}
     
    	// redirection en fonction du rang
    	switch ($_SESSION['level']) {
    		case 1: // CLIENT
    			header('location : client.php');
    			break;
    		case 2: // FOURNISSEUR
    			header('location : fournisseur.php');
    			break;
    		case 3: // ADMIN
    			header('location : admin.php');
    			break;
    		case 0: // pas trouvé !
    		default: // par defaut
    			$valid_connect = false; // non
    			// on reste sur la page (affichage formulaire + message d'erreur)
    	}
    } // fin traitement du formulaire.
    ?>
     
    <?php
    // AFFICHAGE DU FORMULAIRE
    if ($valid_connect === false)
    {
    ?>
     
      <div id="centre_page"> 
     
    <h1>Connexion :</h1>
     
    <?php // message d'erreur ?
    if ($message_erreur != '') { ?>
    	<p><?php echo $message_erreur; ?></p>
    <?php } ?>
     
    <?php 
    // Transmission de variable : test
    echo $email_recu;
    echo $password_recu;
    ?>
     
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    	<p>
    		<label for="idemail">Votre email : </label>
    		<input id="idemail" type="text" name="email" value=""/>
    	</p>
    	<p>
    		<label for="idpassword">Votre Mot de passe : </label>
    		<input id="idpassword" type="password" name="password" value=""/>
    	</p>
    	<p>
    		<input type="submit" name="envoie_connexion" value="envoyer"/>
    	</p>
    </form>
     
    <?php
    } // fin affichage formulaire de connexion
    ?>
      </div>
     
    <?php include('includes/bas.php'); ?>

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Brian35 Voir le message
    En testant les sessions, l'email n’apparait pas ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <? echo'<b>'.stripslashes(htmlspecialchars($_SESSION['email'])).''; ?></b>
    C'est une plaisanterie ???

    Vas-y, fais-moi rire :
    => peux-tu nous montrer à QUELLE LIGNE tu définis $_SESSION['email'], stp ?

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    C'est une plaisanterie ???

    Vas-y, fais-moi rire :
    => peux-tu nous montrer à QUELLE LIGNE tu définis $_SESSION['email'], stp ?
    J'avais définit de la sorte mais j'avais oublier de précisé ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // enregistrement en SESSION (CLIENTS)
    				$_SESSION['id'] 	= $row_clients['id']; 
                                    $_SESSION['email'] 	= $row_clients['email']; 
    				$_SESSION['level'] 	= $row_clients['rang'];
     
    // enregistrement en SESSION (FOURNISSEURS)
    				$_SESSION['id'] 	= $row_fournis['id']; 
                                    $_SESSION['email'] 	= $row_fournis['email']; 
    				$_SESSION['level'] 	= $row_fournis['rang'];
    Enfin bref j'avais enlever sa dans le code précédent en testant les variables comme tu m'avais demander =)

    Merci

  14. #14
    Invité
    Invité(e)
    Par défaut
    Et tu le mets où, ce bout de code ?

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Comme cela ?

    Au niveau de la strcuture du script, si j'ai bien compris on fonctionne comme sa ^^

    On récupère tout d'abord POST[email] et POST[password] du formulaire, on les stocks chacun dans une variable à savoir ici email_recu et password_recu,
    On regarde si le membre a bien rempli tout les champs, ensuite on fais une requête en testant si la colonne email et password du membre de la table vaut bien email_recu, password_recu , si le client est trouvé on enregistre les sessions SINON on regarde si le membre ne fait pas parti de la table fournisseur, si le membre appartient à une des tables alors on enregistre les sessions et on le redirige en fonction de son rang sinon message d'erreur disant que le client n'a pas été trouvé


    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    <?php 
    session_start();
     
    include('includes/haut.php'); 
    include('includes/menu_g.php'); 
    include('includes/menu_d.php'); 
    ?>
     
    <?php
    $message_erreur = '';
    $valid_connect 	= false;
    // Si envoyé : TRAITEMENT DU FORMULAIRE DE CONNEXION (dans la même page que le formulaire !)
    if(isset($_POST['envoie_connexion'])) 
    {
        $_SESSION['id'] 	= 0;
        $_SESSION['email'] 	= 0;
        $_SESSION['level'] 	= 0;
    	// récupération des données envoyées
    	$email_recu 	= (isset($_POST['email']))? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password']))? 	mysql_real_escape_string(trim($_POST['password'])) : '';
     
    	// on vérifie si le membre a bien son compte activé
        if ($email_recu=='' || $password_recu=='' ) // Oublie d'un champ
        {
            $message_erreur = '<p>Vous devez remplir tous les champs</p>';
    		$valid_connect 	= false; // non
     
        } else {
     
    		// 1/ recherche dans la table "clients"
    		$req_clients = "SELECT id, rang  FROM vinicom_clients WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    		$res_clients = mysql_query($req_clients) or die(mysql_error()); 
    		$nbr_clients = mysql_num_rows($res_clients); // nombre de lignes trouvées 
     
    		if ($nbr_clients == 1){ // un client trouvé !
    			$row_clients = mysql_fetch_row($res_clients);
    				// enregistrement en SESSION
    				$_SESSION['id'] 	= $row_clients['id']; 
                                    $_SESSION['email'] 	= $row_clients['email']; 
    				$_SESSION['level'] 	= $row_clients['rang'];
    				$valid_connect = true; // ok
    		} else {
     
    			// 2/ recherche dans la table "fournisseurs"
    			$req_fournis = "SELECT id, rang  FROM vinicom_fournisseurs WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    			$res_fournis = mysql_query($req_fournis) or die(mysql_error()); 
    			$nbr_fournis = mysql_num_rows($res_fournis); // nombre de lignes trouvées 
    			if ($nbr_fournis == 1){ // un fournisseur trouvé !
    				$row_fournis = mysql_fetch_row($res_fournis);
    				$_SESSION['level'] = $row_fournis['rang'];
    				// enregistrement en SESSION
    				$_SESSION['id'] 	= $row_fournis['id']; 
                                    $_SESSION['email'] 	= $row_fournis['email']; 
    				$_SESSION['level'] 	= $row_fournis['rang'];
    				$valid_connect = true; // ok
     
    			} else { // ni client, ni fournisseur !
    				$message_erreur = '<p>Aucun résultat trouvé avec ces paramètres.</p>';
    				$valid_connect = false; // non
    			}
    		}
    	}
     
    	// redirection en fonction du rang
    	switch ($_SESSION['level']) {
    		case 1: // CLIENT
    			header('location : client.php');
    			break;
    		case 2: // FOURNISSEUR
    			header('location : fournisseur.php');
    			break;
    		case 3: // ADMIN
    			header('location : admin.php');
    			break;
    		case 0: // pas trouvé !
    		default: // par defaut
    			$valid_connect = false; // non
    			// on reste sur la page (affichage formulaire + message d'erreur)
    	}
    } // fin traitement du formulaire.
    ?>
     
    <?php
    // AFFICHAGE DU FORMULAIRE
    if ($valid_connect === false)
    {
    ?>
     
      <div id="centre_page"> 
     
    <h1>Connexion :</h1>
     
    <?php // message d'erreur ?
    if ($message_erreur != '') { ?>
    	<p><?php echo $message_erreur; ?></p>
    <?php } ?>
     
    <?php 
    // Transmission de variable : test
    echo $email_recu;
    echo $password_recu;
    ?>
     
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    	<p>
    		<label for="idemail">Votre email : </label>
    		<input id="idemail" type="text" name="email" value=""/>
    	</p>
    	<p>
    		<label for="idpassword">Votre Mot de passe : </label>
    		<input id="idpassword" type="password" name="password" value=""/>
    	</p>
    	<p>
    		<input type="submit" name="envoie_connexion" value="envoyer"/>
    	</p>
    </form>
     
    <?php
    } // fin affichage formulaire de connexion
    ?>
      </div>
     
    <?php include('includes/bas.php'); ?>

  16. #16
    Invité
    Invité(e)
    Par défaut
    OUVRE LES YEUX !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT id, rang  FROM vinicom_clients ...."
    Il ne manque pas quelque chose ?

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    email ^^ yes un oublie

    Idem pour la requête fournisseur,

    mais ça ne change en rien mon problème !
    Les sessions ne s'enregistre pas, (en les testant avec id, email rien ne s'affiche) donc la redirection non plus

    merci

  18. #18
    Invité
    Invité(e)
    Par défaut
    1/ avant un header('location:...), on ne doit pas afficher de code html. Donc, tes 3 include('...') sont mal placés.
    2/ Je t'ai déjà écrit 99% du code.
    3/ dire "ça ne marche pas" ne suffit pas à comprendre le problème !

    Si tu ne sais pas tester en mettant des echo ... dans le code pour savoir à quel moment ça ne va plus, je ne peux pas le faire à ta place.

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2012
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 52
    Points : 11
    Points
    11
    Par défaut
    Mes includes je veux bien mais il y a le fichier config.php et si je le met après le traitement du formualire forcément il n'y a pas connexion à la BDD

    J'ai mis des echo' un peu partout au niveau des commentaires pour savoir où ça bloque !
    En testant avec un client, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Si envoyé : TRAITEMENT DU FORMULAIRE DE CONNEXION (dans la même page que le formulaire !)// récupération des données envoyées// on vérifie si le membre a bien son compte activé// recherche dans la table clients// un client trouvé !// ok
     
    Array
    (
    [id] =>
    [email] =>
    [level] =>
    )
     
    // redirection en fonction du rang// pas trouvé !
    J'ai essayer un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echo '<pre>'.print_r($_SESSION, true).'</pre>';
    comme tu peux le voir et le tableau est vide

    voilà le code avec les echo,

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    <?php 
    session_start();
    ?>
     
    <?php
    include('includes/haut.php'); 
    include('includes/menu_g.php'); 
    include('includes/menu_d.php'); 
    ?>
     
    <?php
    $message_erreur = '';
    $valid_connect 	= false;
    echo "// Si envoyé : TRAITEMENT DU FORMULAIRE DE CONNEXION (dans la même page que le formulaire !)";
    if(isset($_POST['envoie_connexion'])) 
    {
        $_SESSION['id'] 	= 0;
        $_SESSION['email'] 	= 0;
        $_SESSION['level'] 	= 0;
    	echo "// récupération des données envoyées";
    	$email_recu 	= (isset($_POST['email']))? 	mysql_real_escape_string(trim($_POST['email'])) : '';
    	$password_recu 	= (isset($_POST['password']))? 	mysql_real_escape_string(trim($_POST['password'])) : '';
     
    	echo "// on vérifie si le membre a bien son compte activé";
        if ($email_recu=='' || $password_recu=='' ) // Oublie d'un champ
        {
            $message_erreur = '<p>Vous devez remplir tous les champs</p>';
    		$valid_connect 	= false; // non
     
        } else {
     
    		echo "// recherche dans la table clients";
    		$req_clients = "SELECT id, rang, email FROM vinicom_clients WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    		$res_clients = mysql_query($req_clients) or die(mysql_error()); 
    		$nbr_clients = mysql_num_rows($res_clients); // nombre de lignes trouvées 
     
    		if ($nbr_clients == 1){ echo "// un client trouvé !";
    			$row_clients = mysql_fetch_row($res_clients);
    				// enregistrement en SESSION
    				$_SESSION['id'] 	= $row_clients['id']; 
                                    $_SESSION['email'] 	= $row_clients['email']; 
    				$_SESSION['level'] 	= $row_clients['rang'];
    				$valid_connect = true; echo "// ok";
    		} else {
     
    			echo "// recherche dans la table fournisseurs";
    			$req_fournis = "SELECT id, rang, email  FROM vinicom_fournisseurs WHERE email = '".$email_recu."' AND password = '".md5($password_recu)."';"; 
    			$res_fournis = mysql_query($req_fournis) or die(mysql_error()); 
    			$nbr_fournis = mysql_num_rows($res_fournis); echo "// nombre de lignes trouvées"; 
    			if ($nbr_fournis == 1){ echo "// un fournisseur trouvé !";
    				$row_fournis = mysql_fetch_row($res_fournis);
    				$_SESSION['level'] = $row_fournis['rang'];
    				// enregistrement en SESSION
    				$_SESSION['id'] 	= $row_fournis['id']; 
                                    $_SESSION['email'] 	= $row_fournis['email']; 
    				$_SESSION['level'] 	= $row_fournis['rang'];
    				$valid_connect = true; echo "// ok";
     
    			} else { echo "// ni client, ni fournisseur !";
    				$message_erreur = '<p>Aucun résultat trouvé avec ces paramètres.</p>';
    				$valid_connect = false; // non
    			}
    		}
    	}
     echo '<pre>'.print_r($_SESSION, true).'</pre>'; 
     
    	echo "// redirection en fonction du rang";
    	switch ($_SESSION['level']) {
    		case 1: echo "// CLIENT";
    			header('location : client.php');
    			break;
    		case 2: echo "// FOURNISSEUR";
    			header('location : fournisseur.php');
    			break;
    		case 3: echo "// ADMIN";
    			header('location : admin.php');
    			break;
    		case 0: echo "// pas trouvé !";
    		default: // par defaut
    			$valid_connect = false; // non
    			// on reste sur la page (affichage formulaire + message d'erreur)
    	}
    } // fin traitement du formulaire.
    ?>
     
    <?php
    // AFFICHAGE DU FORMULAIRE
    if ($valid_connect === false)
    {
    ?>
     
      <div id="centre_page"> 
     
    <h1>Connexion :</h1>
     
    <?php // message d'erreur ?
    if ($message_erreur != '') { ?>
    	<p><?php echo $message_erreur; ?></p>
    <?php } ?>
     
    <?php 
    // Transmission de variable : test
    echo $email_recu;
    echo $password_recu;
    echo'<b>'.stripslashes(htmlspecialchars($_SESSION['id'])).'</b>';
    echo'<b>'.stripslashes(htmlspecialchars($_SESSION['email'])).'</b>';
    ?>
     
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    	<p>
    		<label for="idemail">Votre email : </label>
    		<input id="idemail" type="text" name="email" value=""/>
    	</p>
    	<p>
    		<label for="idpassword">Votre Mot de passe : </label>
    		<input id="idpassword" type="password" name="password" value=""/>
    	</p>
    	<p>
    		<input type="submit" name="envoie_connexion" value="envoyer"/>
    	</p>
    </form>
     
    <?php
    } // fin affichage formulaire de connexion
    ?>
      </div>
     
    <?php include('includes/bas.php'); ?>

  20. #20
    Invité
    Invité(e)
    Par défaut
    Juste pour voir :
    remplace mysql_fetch_row par : mysql_fetch_array ou mysql_fetch_assoc
    (je ne vois plus que ça)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. oracle devloper connexion de deux tables
    Par souchraf dans le forum Oracle
    Réponses: 3
    Dernier message: 09/05/2006, 18h18
  2. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 14h45
  3. [Débutant] Union de deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/03/2004, 10h40
  4. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53
  5. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02

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