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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    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
    Points : 44 155
    Points
    44 155
    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 régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    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
    Points : 44 155
    Points
    44 155
    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 régulier Avatar de vertebre
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    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

  7. #7
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Heu ... c'est le code du début avec tous les problèmes que je t'ai déjà décris non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    1/ corriger ton code reviendrait à TOUT ré-écrire...

    2/ sabotage t'avais donné des consignes dont tu n'as pas tenu compte.

    3/ Utiliser mysql_ quand on débute est une aberration. mysql_ est OBSOLETE !
    Il faut désormais utiliser PDO.



    Bref : je passe mon tour.

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

    Informations professionnelles :
    Activité : Étudiant

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

    Oui en effet j'avais remis les même fichiers qu'au début, j'avais cru lire que tu ne pouvais pas saisir pourquoi session_start() ne marchait pas. D'ailleur je n'ai pas compris
    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
    Sinon j'ai essayé d'utiliser PDO pour mes requêtes et çà fonctionne.
    Mais je fais encore une nouvelle connexion à la BDD à chaque méthode (fct_users.php) car je n'arrive pas a en faire qu'une seule au début du fichier, il ne reconnait pas ma variable $bdd sinon, et là pour le coup même en global çà ne marche pas.

    Sinon j'ai essayé de refaire ma vérification de formulaire mais il ne reconnait pas mes variables

    Concernant ma vérification de formulaire dans connexion.php je n'arrive pas plusieurs choses:
    -remplacer les mysql_real_escape_string() par la fonction pdo pdo::quote() ou quote()
    -utiliser mes variables $pseudo et $passe car j'ai des undefined index, (voilà pourquoi je déclarai global).
    -

    Sinon je n'ai pas utiliser ta charmante fonction checkPseudoAvailable() issue du régime minceur parceque j'étais incapable de tout comprendre, mais je vais m'y pencher dessus et te poserais des questions si tu veux bien.

    voici mon nouveau fichier 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
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    <?php 
     
     
    // Méthode qui retourne l'ID de l'utilisateur
    function getIdofPseudoUser($pseudoUser) {
     
    // On tente une connexion à la bdd
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
     
    // on crée la requête SQL "récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser"
    $reponse = $bdd->query('SELECT id FROM users u WHERE pseudo="'.$pseudoUser.'"');
    $donnees = $reponse->fetch();
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    return $donnees['id'];
    }
     
     
    // Méthode qui retourne le pseudo de l'utilisateur en fonction de son ID
    function getPseudoUserOfId($id) {
     
    // On tente une connexion à la bdd
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $reponse = $bdd->query('SELECT pseudo FROM users WHERE id="'.$id.'"');
    $donnees = $reponse->fetch();
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    return $donnees['pseudo'];
    }
     
     
    // Méthode qui retourne le budget d'un id précis
    function getBudgetOfUserId($id){
     
    // On tente une connexion à la bdd
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
     
    // on crée la requête SQL pour récupérer le budget d'utilisateur qui à pour ID $id
    $reponse = $bdd->query('SELECT budget FROM users u WHERE id="'.$id.'"');
    $donnees = $reponse->fetch();
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    return $donnees['budget'];
    }
     
     
    // Méthode qui vérifie que le pseudo de l'utilisateur n'est pas déjà utilisé
    /*
    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;
    }
    */
    function checkPseudoAvailable($pseudo) {
     
    // On tente une connexion à la bdd
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    // on crée la requête SQL récupérer l'ID de l'utilisateur portant le pseudo $pseudoUser
    $reponse = $bdd->query('SELECT pseudo FROM users');
     
    $donnees = $reponse->fetch();
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    $isAvailable = 0;
     
    for ($i=0;$i<count($reponse);$i++) {
    	if ($donnees['pseudo'] != $pseudo) {
    	$isAvailable = 1;
    	}
    }
    return $isAvailable;
    }
     
    // 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);
    }
     
     
     
    ?>
    et le 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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    <<?php
    include("../../includes/header.php"); 
    include("../../includes/menuheader.php"); 
     
    require ('../sql/fct_users.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
     
    // 1 On vérifie que le champ pseudo est remplie sinon on affiche une erreur
    if (isset($_POST['pseudo'])==null) {
    	echo '<br/><br/><br/>Aucun pseudo renseigné<br/>';
    	$full = false;
    }
    else {
    	$pseudo = mysql_real_escape_string($_POST['pseudo']);
    	$full = true;
    }
     
    // 2 On vérifie que le champ mdp est remplie sinon on affiche une erreur
    if (isset($_POST['passe']) == null) {
    	echo '<br/>Aucun passe renseigné';
    	$full = false;
    }
     
    else {
    	$passe = mysql_real_escape_string($_POST['passe']);
    	$full = true;
    }
     
    if ($full == true) {
     
    // On tente une connexion à la bdd pour vérifier le pseudo
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    $reponse = $bdd->query('SELECT id, pseudo, mdp, budget  FROM users u WHERE pseudo="'.$pseudo.'"');
    $donnees = $reponse->fetch();
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
    // 3 On vérifie que le pseudo existe dans la bdd  sinon on affiche une erreur et on retourne à 1
    if ($_POST['pseudo'] != $donnees['pseudo']) {
    echo '<br/>Aucun pseudo ne correspond dans la bdd';
    }
    	// si il existe on compare le mot de passe entrée avec le mot de passe de la bdd stocké à ce pseudo
    	else {
    				// si il est incorrect on affiche une erreur de mot de passe
    				if ($_POST['passe'] != $donnees['passe']) {
    					echo 'Erreur dans le mot de passe';
    				}
    				else {
    				// si il est correct on remplie la variable de session
    				echo 'Vous etes connecté';
    				session_start();
    				populateVarSession($donnees['pseudo'], $donnees['id'], $donnees['budget']);
    				echo '<br/>après'.var_dump($_SESSION);
    				}
    	}
     
    }
     
    else {
    echo 'Veuillez vérifier vos informations';
    }	
     
    ?>
    D'ailleurs j'avais essayé de modifier l'ancien connexion.php mais bon c'était peine perdu je n'arrivais même pas plus à reprendre 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
    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
    <?php
    include("../../includes/header.php"); 
    include("../../includes/menuheader.php"); 
     
    require ('../sql/fct_users.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
     
    // On tente une connexion à la bdd pour toutes les fonctions appelés
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    // On vérifie que le champ pseudo et pass sont remplies avant de les utiliser
    // PDO::quote au lieu mysql_real_escape_string  mais problème de méthode non static
    // Utilisation de boolean car pas de boucle possible sur la prochaine vérification car boucle infini dans navigateur
    $full = false;
    if (isset($_POST['pseudo'])==null) {
    	echo '<br/><br/><br/>Aucun pseudo<br/>';
    	$full = false;
    }
    else {
    	$pseudo = mysql_real_escape_string($_POST['pseudo']);
    	$full = true;
    }
     
    if (isset($_POST['passe']) == null) {
    	echo '<br/>Aucun passe';
    	$full = false;
    }
     
    else {
    	$passe = mysql_real_escape_string($_POST['passe']);
    	$full = true;
    }
     
    if ($_POST['pseudo'] == donnees['pseudo'])
     
    // Je crypte $passe avec la fonction "sha1".
    if ($full == true) {
    	if (isset($_POST['passe'])) {
    	$passe = sha1($passe);
    	}
    	$reponse = $bdd->query("SELECT COUNT(*) AS exist FROM connexion WHERE pseudo='$pseudo'");
    	$donnees = $reponse->fetch();
     
    	$id = getIdofPseudoUser($pseudo);
    	$budget =  getBudgetOfUserId($id);
     
    	if($donnees['exist'] != 0) // Si le pseudo existe. 
    	{
     
    	if($passe == $donnees['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"); 
     
    ?>
    Même si c'est pas terrible encore, çà avance un peu

  10. #10
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    global fonctionne comme suite ; et utilise une requête préparée et non la méthode quote()

    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
     
     
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=refuge;charset=utf8', 'root', '');
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    function getIdofPseudoUser($pseudoUser) {
     
        global $bdd; 
     
        $reponse = $bdd->prepare('SELECT id FROM users WHERE pseudo= :pseudo);
        $reponse->execute(array(':pseudo'=>$pseudoUser));
        $donnees = $reponse->fetch(PDO::FETCH_ASSOC);
        return $donnees['id'];
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut
    Ok j'avais plus ou moins compris que les requêtes préparées était mieux mais je ne l'ai pas fait, merci de me l'avoir confirmé.

    Pour l'utilisation de globale si je comprend bien, on déclarer une variable $bdd au début du fichier, puis pour l'utiliser à l'intérieur des méthodes/fonctions on lui fait une sorte de "lien (ou d'appel)" en utilisant $bdd ?

  12. #12
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu fais la connexion au début et dans les fonction tu utilises global pour indiquer que tu fais référence à la variable en dehors de la fonction.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 184
    Points : 111
    Points
    111
    Par défaut
    ok merci bonne fin de soirée

+ 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