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

PHP & Base de données Discussion :

INNER JOIN et Sessions [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 43
    Par défaut INNER JOIN et Sessions
    Bonjour

    je travaille depuis deux jours sur un autre problème :

    Il s'agit sur uen page d'accueil de logger les abonnés.
    Si le login et le pass est bon et si l'abonnement est toujours valable (en terme de durée)
    la personne peut se connecter et une session est ensuite créée.

    J'ai deux tables : une appelée 'visiteurs' qui contient les infos de la personne et qui a un id nommé (idvis) incrémenté
    et une autre table appelée 'abonnements' qui contient les infos sur l'abonnement durée, datedebut, datefin et un id nommé (idvis) incrémenté qui correspond à celui du client qui a son abonnement.

    si il affiche bien le prénom de la personne qui est l'abonné en fonction du login et du mot de passe, il ne crée pas la session. et de plus il affiche le prénom même si la date a expiré.

    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
    <?php
    session_start();
    $prenom=$_SESSION['prenom'];
    $idvis=$_SESSION['idvis'];
     
    $serveur="localhost";
    $username="xxxxxxxxx";
    $password="xxxxxxxxx";
    $base="xxxxxxxxx";
     
    $login  =$_POST["login"];
    $pass   =$_POST["pass"];
     
    $controleok=false;
    if ($login!="") {
        //CONTROLE DES LOGIN ET MOT DE PASSE
        if($id=mysql_connect($serveur,$username,$password)) {
            if(mysql_select_db($base)==true) {
     $reqlog = 'SELECT * FROM `visiteurs` WHERE `login` LIKE \''.$login.'\' AND `password` LIKE \''.$pass.'\''; 
            	  if($result=mysql_query($reqlog)) {
                     while ($ligne=mysql_fetch_array($result, MYSQL_ASSOC)) {
                     		$prenom=$ligne["prenom"];
                     		$idvis=$ligne["idclt"];
                     		$controleok=true;
            			}
                     mysql_free_result($result);
                 } else {echo "Erreur de requete sur la base de donnees.";}
            } else {die("Echec de connexion a la base" . mysql_error());}   
            mysql_close($id);
        } else {die("Echec de connexion Mysql." . mysql_error());}
     
        if ($controleok==true){
    	mysql_connect("localhost", "xxxxxxxx", "xxxxxxxxx"); // Connexion à MySQL
    mysql_select_db("maatcontacts"); // Sélection de la base 
            $sql="SELECT * FROM visiteurs INNER JOIN abonnements ON visiteurs.idvis = abonnements.idvis WHERE  datefin != ''"; 
    $result = mysql_query($sql);
    // puis lire le resultat 
    $nbre = mysql_num_rows($result);
    if(mysql_num_rows($result)!=0) { 
    		session_start();
    $_SESSION['prenom']=$prenom;
            $_SESSION['idvis']=$idvis;
    $_SESSION['login'] = $login;
    $_SESSION['pass'] = $pass;
     
     
        }
    }
    }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi tu fais deux connexion a des bases ? tu as deux serveurs differents ?

    De plus je ne vois pas dans ton code ou tu controls la date de fin.
    Ca pourrait ressembler a quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $sql="SELECT * FROM visiteurs INNER JOIN abonnements USING (idvis)  WHERE  datefin >= now() AND idvis=" . $idvis";

    Mais tu pourrais aussi tout recuperer en un coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // au passage on n'injecte pas dans une requete des données saisies sans les proteger
    $login  = mysql_real_escape_string($_POST["login"]);
    $pass = mysql_real_escape_string($_POST["pass"]);
    $sql="SELECT * FROM visiteurs INNER JOIN abonnements USING (idvis) WHERE WHERE login=$login AND password=$pass'';
    Si tu historises les abonnements tu ajoutes ORDER BY datefin DESC LIMIT 1 pour recuperer le plus lointain.
    Ensuite en PHP tu controles si datefin > aujourd'hui.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 43
    Par défaut
    Bonjour

    J'ai quasiment résolu mon problème avec ce 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
     
    session_start();
    $prenom=$_SESSION['prenom'];
    $idvis=$_SESSION['idvis'];
     
    $serveur="localhost";
    $username="xxxxxxxxx";
    $password="xxxxxxxx";
    $base="xxxxxxxxxxx";
     
    $_SESSION['login']=$login;
    		$_SESSION['pass']=$pass;
    $_SESSION['abo']='abonne';	
    $controleok=false;
    if ($login!="") {
        //CONTROLE DES LOGIN ET MOT DE PASSE
        if($id=mysql_connect($serveur,$username,$password)) {
            if(mysql_select_db($base)==true) {
     $reqlog = "SELECT * FROM `visiteurs` INNER JOIN abonnements ON visiteurs.idvis=abonnements.idvis WHERE `login` ='$login' AND `password` = '$pass' AND `datefin` ='' "; 
            	  if($result=mysql_query($reqlog)) {
                     while ($ligne=mysql_fetch_array($result, MYSQL_ASSOC)) {
                     		$prenom=$ligne["prenom"];
                     		$idvis=$ligne["idclt"];
                     		$controleok=true;
            			}
                     mysql_free_result($result);
                 } else {echo "Erreur de requete sur la base de donnees.";}
            } else {die("Echec de connexion a la base" . mysql_error());}   
            mysql_close($id);
        } else {die("Echec de connexion Mysql." . mysql_error());}
     
        if ($controleok==true){
    	session_start();
            $_SESSION['prenom']=$prenom;
            $_SESSION['idvis']=$idvis;
    		$_SESSION['login']=$login;
    		$_SESSION['pass']=$pass;
    		$_SESSION['abo']='abonne';
        }
    }
    ?>

    Par contre il se passe un truc bizarre

    lorsque je me logge sur la page d'accueil et que je vais ensuite sur les autres pages autorisées pour ceux qui se sont identiffiés pas de problème. tout se passe bien même si entre deux je passe par des pages quin'ont pas de session start!
    Mais si par contre je fais le sens inverse. Je suis sur une page quelconque ou même une page autorisée (avec session start) et que je retourne sur la page d'accueil, pour sélectionner à nouveau à partir d'elle une page qui nécessite d'être loggée, cela ne marche plus les sessions ne sont plus reconnues.

    Quelqu'un sait-il pourquoi ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 43
    Par défaut
    j'ai résolu mon problème je vous donne le code. En fait d'une page à une autre il y avait écrasement de variables donc perte de session et maintenant tout fonctionne.

    Par contre dommage que mon post sur perte de session sur firefox ait été supprimé car en parcourant le net, j'ai pu voir que nombre de personnes avaient eu le même problème sans pouvoir le résoudre et en s'arrachant les cheveux comme moi.
    De même pour la perte de session après un clic sur précédent, suivant ou retour sur la page login.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?php
     session_start();	
    $serveur="localhost";
    $username="xxxxxxxxxx";
    $password="xxxxxxxxxx";
    $base="xxxxxxxxxxxx";
     
    $logon  =$_POST["login"]; // partie que j'ai modifié pour que cela marche
    $passw   =$_POST["pass"]; // j'ai tout simplement renommé, il devait y avoir confusion entre la variable et la session.
     
     
    $controleok=false;
    if ($login!="") {
        //CONTROLE DES LOGIN ET MOT DE PASSE
        if($id=mysql_connect($serveur,$username,$password)) {
            if(mysql_select_db($base)==true) {
     $reqlog = "SELECT * FROM `visiteurs` INNER JOIN abonnements ON visiteurs.idvis=abonnements.idvis WHERE `login` ='$login' AND `password` = '$pass' AND `datefin` ='' "; 
            	  if($result=mysql_query($reqlog)) {
                     while ($ligne=mysql_fetch_array($result, MYSQL_ASSOC)) {
                     		$prenom=$ligne["prenom"];
                     		$idvis=$ligne["idclt"];
                     		$controleok=true;
            			}
                     mysql_free_result($result);
                 } else {echo "Erreur de requete sur la base de donnees.";}
            } else {die("Echec de connexion a la base" . mysql_error());}   
            mysql_close($id);
        } else {die("Echec de connexion Mysql." . mysql_error());}	
        if ($controleok==true){
    	 session_start();
            $_SESSION["prenom"]=$prenom;
            $_SESSION["idvis"]=$idvis;
    		$_SESSION['login']=$login;
    		$_SESSION['pass']=$pass;
    		    }
    }
    ?>
    Angélique

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

Discussions similaires

  1. Mysql Inner join
    Par ..:: Atchoum ::.. dans le forum Requêtes
    Réponses: 3
    Dernier message: 25/10/2007, 12h21
  2. Nombre de clauses ON dans un INNER JOIN
    Par Shadow aok dans le forum Requêtes
    Réponses: 5
    Dernier message: 30/06/2004, 15h42
  3. [ requeste sql ]INNER JOIN / OUTER JOIN
    Par hocinema dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/04/2004, 21h28
  4. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09
  5. Inner Join & Select
    Par bakaneko dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/02/2004, 10h48

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