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 :

session_start() après connexion


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Par défaut session_start() après connexion
    bonsoir,

    Je débute en PHP, j'ai suivie le tuto de ce site sur les sessions que j'ai très légèrement modifié.
    Dans ma page de connexion j'ai un souci pour savoir quand mettre session_start() (je sais qu'il faut le mettre en 1er sur la page) mais là je ne comprend plus.

    Je vérifie le pseudo s'il existe dans la bdd et si le mdp correspond bien.
    Si les 2 correspondent je lance la session ? et je met les informations de l'utilisateur dans la variable de session ?

    Voici le code du fichier connexion.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
    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
    <form method="post">
     
    <label>Pseudo: <input type="text" name="pseudo"/></label><br/>
     
    <label>Mot de passe: <input type="password" name="passe"/></label><br/>
     
    <input type="submit" value="Se connecter"/>
     
    </form>
     
     
    <?php
     
    require ('../sql/fct_users.php');
     
    mysql_connect("localhost", "l", "p");
    mysql_select_db("monsite");
     
    // On vérifie avant d'utiliser
    global $pseudo, $passe;
     
    if (isset($_POST['pseudo'])) {
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
    }
    if (isset($_POST['passe'])) {
    $passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
    }
    // Je crypte $passe avec la fonction "sha1".
    if (isset($_POST['passe'])) {
    $passe = sha1($passe);
    }
    $nbre = mysql_query("SELECT COUNT(*) AS exist FROM connexion WHERE pseudo='$pseudo'");
    $donnees = mysql_fetch_array($nbre);
     
    $id = getIdofPseudoUser($pseudo);
    $budget =  getBudgetOfUserId($id);
     
    if($donnees['exist'] != 0) // Si le pseudo existe. 
    {
     
    $quete = mysql_query("SELECT * FROM connexion WHERE pseudo='$pseudo'");
    $infos = mysql_fetch_array($quete);
     
    if($passe == $infos['passe']) {
     
    // on met le traitement car le pass est bon
    echo 'Vous etes connecté';
    session_start(); // je lance la session ? :weird:
    populateVarSession($pseudo, $id, $budget); //je met les informations de l'utilisateur dans la variable de session ? :aie:
    }
     
    else // Si le couple pseudo/ mot de passe n'est pas bon. 
    {
     
    echo 'Vous n\'avez pas rentré les bons identifiants';
    }
     
    }
     
    ?>
    J'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at C:\wamp\www\monsite\modules\sql\fct_users.php:51) in C:\srv\www\monsite\modules\connexion\connexion.php on line 48
    Voici le code du fichier fct_user.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
    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
    <?php 
     
    // Méthode qui retourne l'ID de l'utilisateur // echo getIdofPseudoUser("RN512");
    function getIdofPseudoUser($pseudoUser) {
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'l', 'p');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $sql_id = 'SELECT id FROM users u WHERE pseudo="'.$pseudoUser.'"';
     
    // on envoie la requête
    $req_id = mysql_query($sql_id) or die('Erreur SQL !<br>'.$sql_id.'<br>'.mysql_error());
     
    // On récupère les données de l'enregistrement dans une variable $budgetuser
    $data = mysql_fetch_assoc($req_id);
    $idUser = $data['id'];
     
    return $idUser;
    }
     
     
    // Méthode qui retourne le pseudo de l'utilisateur en fonction de son ID // echo getPseudoUserOfId(1);
    function getPseudoUserOfId($id) {
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'l', 'p');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $sql_pseudo = 'SELECT pseudo FROM users WHERE id="'.$id.'"';
     
    // on envoie la requête
    $req_pseudo = mysql_query($sql_pseudo) or die('Erreur SQL !<br>'.$sql_pseudo.'<br>'.mysql_error());
     
    // On récupère les données de l'enregistrement dans une variable $budgetuser
    $data = mysql_fetch_assoc($req_pseudo);
    $pseudo = $data['pseudo'];
     
    return $pseudo;
    }
     
     
    // Méthode qui retourne le budget d'un id précis
    function getBudgetOfUserId($id){
    	// on se connecte à MySQL
    $db = mysql_connect('localhost', 'l', 'p');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
    // on crée la requête SQL pour récupérer le budget d'utilisateur qui à pour ID $id
    $sql_budget = 'SELECT budget FROM users u WHERE id="'.$id.'"';
    // on envoie la requête
    $req = mysql_query($sql_budget) or die('Erreur SQL !<br>'.$sql_budget.'<br>'.mysql_error());
     
    $data = mysql_fetch_assoc($req);
    $budget = $data['budget'];
    return $budget;
    }
     
     
    // Méthode qui met les informations de l'utilisateur dans la variable de session
    function populateVarSession($pseudo, $id, $budget) {
    	$_SESSION['User'] = array('id' => $id, 'pseudo' => $pseudo, 'budget' => $budget);
    }
     
    // Méthode qui vérifie que le pseudo de l'utilisateur n'est pas déjà utilisé // echo checkPseudoAvailable("triton");
    function checkPseudoAvailable() {
    	$isAvailable = false;
    	global $pseudo;
    	if(!empty($_POST['pseudo'])) {
    		if (isset($_POST['pseudo'])) {
    		$pseudo = $_POST['pseudo'];
    		}
    	}
     
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'l', 'p');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $sql_pseudo = 'SELECT pseudo FROM users';
     
    // on envoie la requête
    $req_pseudo = mysql_query($sql_pseudo) or die('Erreur SQL !<br>'.$sql_pseudo.'<br>'.mysql_error());
     
    // On récupère les données de l'enregistrement dans une variable $budgetuser
    $data = mysql_fetch_assoc($req_pseudo);
     
    for ($i=0;$i<count($data);$i++) {
    	if ($data['pseudo'] != $pseudo) {
    	$isAvailable = true;
    	}
    }
    return $isAvailable;
    }
     
    ?>
    Je suis près à parié que mon code est affreux mais j'ai galéré pour éviter les erreurs de 'undefined index' et 'undefined variable', malgré tout je suis ouvert aux critiques

    Enfin voilà

  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
    session_start() doit être placé avant tout affichage ; donc a minima dans ton code, il doit être placé avant le echo qui est juste au dessus.
    par contre l'interaction avec les deux fichiers n'est pas apparente dans le code que tu nous montres donc c'est difficile de te dire.

    pour le reste sur ton code, ça manque de logique et de structure.
    bon déjà tu mets des global partout alors qu'il ne devrait y en avoir nul part ; pareil pour htmlspecialchars qui ne sert que pour l'affichage.

    regarde ton code connexion.php :
    - tu commences par faire une requête pour savoir si le pseudo existe
    - ensuite une requête pour récupérer l'id et une requête pour récupérer le codebudget
    Ça fait déjà 3 requêtes et tu ne sais toujours pas si le pseudo existe ni si le mot de passe est bon.
    - tu refais une 4ème requête pour vérifier le mot de passe.

    Tu comprends j'espère maintenant qu'une seule requête est suffisante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id, budget, passe FROM connexion WHERE pseudo='$pseudo'
    Et donc tout ce code et ces fonctions annexes part direct au regime minceur.

    Même genre de problème dans checkPseudoAvailable(), regarde exactement ce que tu fais
    - ligne 69-75 tu tripottes dans tous les sens le "pseudo" pour savoir s'il existe ... c'est inutile. Dans la logique du code checkPseudoAvailable() sert à vérifier un pseudo qui a été soumis donc qui existe et qui devrait même être un argument de la fonction
    - ensuite tu vas lire tous pseudos de la table un par un jusqu'à la fin pour savoir si le pseudo existe ... c'est le travail du WHERE dans une requête.

    Regarde la fonction amincie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function checkPseudoAvailable($pseudo) {
     
            $result = mysql_query('SELECT COUNT(*) as available FROM users WHERE pseudo = "' . mysql_real_escape_string($pseudo) . "'");
            $data = mysql_fetch_assoc($result);
            $isAvailable = ($data['available'] == 1) : FALSE : TRUE; 
     
            return $isAvailable;
    }
    J'ai retiré aussi la connexion à l'intérieur de ta fonction, elle peut être faite au début du code une fois pour toutes les fonctions.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Par défaut
    whaou ! çà change complètement

    J'ai vraiment besoin de vérifier la logique de mon code, m'en vais faire çà pour tous mes fichiers.

    Mais une autre question ... quand mettre les informations de l'utilisateur dans la variable $_SESSION ?

    Merci de m'avoir éclairer sur ce problème de logique, le WHERE surtout et pour ce régime de code ^^

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pareil. C'est une question de logique.

  5. #5
    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
    Il y a une règle en développement qu'on appelle KISS (keep it simple kiss) : quand tu es en train d'écrire un truc à rallonge que tu n'arrives même plus à suivre toi même, tu fais fausse route.

    Concernant le session_start() il est bien placé mais comme je t'ai dit, on ne peut pas te dire d'ou vient l'erreur car dans ce que tu nous montres, on n'a pas le lien etre fct_users.php et connexion.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre confirmé Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Par défaut
    Bonsoir,

    voici le code connexion.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
    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
    <?php
    include("../../includes/header.php"); 
    include("../../includes/menuheader.php"); 
    ?>
     
    <div class="login">
    <form action=""  method="post" id="contactForm" title="connexion">
     
    <form action="" method="post"  id="loginForm">
    <fieldset>
    <legend ><h3>Connexion</h3></legend>
    <ul>
    	<li>
    		<label>Pseudo: 
    		<input type="text" name="pseudo" value="" id="name"/></label>
     
    	</li>
     
    	<li>
    		<label>MotdePasse: 
    		<input type="password" name="passe" value="" id="passe"/></label>
     
    	</li>
    	<li>
    		<input class= bouton type="submit" value="Se connecter"/>
    	</li>
    </ul>
    </fieldset>
    </form>
    </div>
     
    <?php
     
    require ('../sql/fct_users.php');
     
    mysql_connect("localhost", "root", "");
    mysql_select_db("refuge");
     
    // On vérifie avant d'utiliser
    global $pseudo, $passe;
     
    if (isset($_POST['pseudo'])) {
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
    }
    if (isset($_POST['passe'])) {
    $passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
    }
    // Je crypte $passe avec la fonction "sha1".
    if (isset($_POST['passe'])) {
    $passe = sha1($passe);
    }
    $nbre = mysql_query("SELECT COUNT(*) AS exist FROM connexion WHERE pseudo='$pseudo'");
    $donnees = mysql_fetch_array($nbre);
     
    $id = getIdofPseudoUser($pseudo);
    $budget =  getBudgetOfUserId($id);
     
    if($donnees['exist'] != 0) // Si le pseudo existe. 
    {
     
    $quete = mysql_query("SELECT * FROM connexion WHERE pseudo='$pseudo'");
    $infos = mysql_fetch_array($quete);
     
    if($passe == $infos['passe']) {
     
    // on met le traitement car le pass est bon
    echo 'Vous etes connecté';
    //echo '<br/>avant'.var_dump($_SESSION);
    //session_start();
    populateVarSession($pseudo, $id, $budget);
    echo '<br/>après'.var_dump($_SESSION);
    }
     
    else // Si le couple pseudo/ mot de passe n'est pas bon. 
    {
     
    echo 'Vous n\'avez pas rentré les bons identifiants';
    }
     
    }
     
    include("../../includes/footerstand.php"); 
    include("../../includes/footer.php"); 
     
    ?>
    et celui de fct_users.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
    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
    <?php 
     
    // Méthode qui retourne l'ID de l'utilisateur // echo getIdofPseudoUser("RN512");
    function getIdofPseudoUser($pseudoUser) {
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $sql_id = 'SELECT id FROM users u WHERE pseudo="'.$pseudoUser.'"';
     
    // on envoie la requête
    $req_id = mysql_query($sql_id) or die('Erreur SQL !<br>'.$sql_id.'<br>'.mysql_error());
     
    // On récupère les données de l'enregistrement dans une variable $budgetuser
    $data = mysql_fetch_assoc($req_id);
    $idUser = $data['id'];
     
    return $idUser;
    }
     
     
    // Méthode qui retourne le pseudo de l'utilisateur en fonction de son ID // echo getPseudoUserOfId(1);
    function getPseudoUserOfId($id) {
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $sql_pseudo = 'SELECT pseudo FROM users WHERE id="'.$id.'"';
     
    // on envoie la requête
    $req_pseudo = mysql_query($sql_pseudo) or die('Erreur SQL !<br>'.$sql_pseudo.'<br>'.mysql_error());
     
    // On récupère les données de l'enregistrement dans une variable $budgetuser
    $data = mysql_fetch_assoc($req_pseudo);
    $pseudo = $data['pseudo'];
     
    return $pseudo;
    }
     
     
    // Méthode qui retourne le budget d'un id précis
    function getBudgetOfUserId($id){
    	// on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
    // on crée la requête SQL pour récupérer le budget d'utilisateur qui à pour ID $id
    $sql_budget = 'SELECT budget FROM users u WHERE id="'.$id.'"';
    // on envoie la requête
    $req = mysql_query($sql_budget) or die('Erreur SQL !<br>'.$sql_budget.'<br>'.mysql_error());
     
    $data = mysql_fetch_assoc($req);
    $budget = $data['budget'];
    return $budget;
    }
     
     
    // Méthode qui met les informations de l'utilisateur dans la variable de session
    function populateVarSession($pseudo, $id, $budget) {
    	$_SESSION['User'] = array('id' => $id, 'pseudo' => $pseudo, 'budget' => $budget);
    }
     
    // Méthode qui vérifie que le pseudo de l'utilisateur n'est pas déjà utilisé // echo checkPseudoAvailable("triton");
    function checkPseudoAvailable() {
    	$isAvailable = false;
    	global $pseudo;
    	if(!empty($_POST['pseudo'])) {
    		if (isset($_POST['pseudo'])) {
    		$pseudo = $_POST['pseudo'];
    		}
    	}
     
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '');
    // on sélectionne la base
    mysql_select_db('refuge',$db);
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $sql_pseudo = 'SELECT pseudo FROM users';
     
    // on envoie la requête
    $req_pseudo = mysql_query($sql_pseudo) or die('Erreur SQL !<br>'.$sql_pseudo.'<br>'.mysql_error());
     
    // On récupère les données de l'enregistrement dans une variable $budgetuser
    $data = mysql_fetch_assoc($req_pseudo);
     
    for ($i=0;$i<count($data);$i++) {
    	if ($data['pseudo'] != $pseudo) {
    	$isAvailable = true;
    	}
    }
    return $isAvailable;
    }
     
    ?>
    Merci pour vos réponses et sorry pour le retard

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

Discussions similaires

  1. Retour à la même page après connexion
    Par bruburque dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2007, 16h38
  2. Comment retourner à sa page apres connexion?
    Par feti2004 dans le forum Langage
    Réponses: 5
    Dernier message: 03/04/2006, 09h46
  3. Réponses: 2
    Dernier message: 02/11/2005, 21h23
  4. Lancer automatiquement un programme après connexion Internet
    Par sunshine dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 27/05/2005, 22h18
  5. Réponses: 4
    Dernier message: 19/03/2004, 11h48

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