Sessions en PHP avec lien BD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Sessions en PHP avec lien BD

Re: Sessions en PHP avec lien BD

par xTG » 09 févr. 2012, 22:22

Et là c'est le drame...
Deux utilisateurs avec le même username, on récupérera toujours le même user_id, à savoir le dernier de la table. ^^

Touche d'humour pour les moins grincheux :
Interlocuteur1 : "username est unique ? Bah c'est une sorte de clé primaire alors ? Mais notre id_user alors ???"
Interlocuteur2 : "Non mais on s'en fiche de id_user on utilise username pour identifier le compte."
Interlocuteur1 : "Qu'est ce que tu nous emm******* avec ton user_id alors !"

Amis du soir, bonsoir. :mrgreen:

Re: Sessions en PHP avec lien BD

par bostak » 09 févr. 2012, 22:02

bonsoir,

Voici un petit exemple :

Code : Tout sélectionner

function takeId($login) { $requete = mysql_query("SELECT `id_user` FROM `users` WHERE `login` = '".mysql_real_escape_string($login)."'"); while($row=mysql_fetch_assoc($requete)) { $id = $row["id_user"]; } return $id; }
A modifier avec vos informations

Cordialement,

Re: Sessions en PHP avec lien BD

par xTG » 09 févr. 2012, 21:59

Votre table possède-t-elle vraiment un identifiant numérique en clé primaire ? N'est-ce pas la colonne username qui fait office de clé primaire ?
Car on voit que votre système de session ne le prend pas en compte alors que c'est la seule information qu'il est vraiment utile de garder.
C'est ce qui identifie réellement un utilisateur, or vous ne stockez que l'username.

Pour le récupérer s'il existe, il faut le rajouter dans la clause SELECT de la requête.
Et par la suite utiliser une fonction de récupération tel que mysql_fetch_array(), mysql_fetch_row(), mysql_fetch_assoc() ou bien mysql_result(). (voir la doc qui contient des exemples d'utilisation)
Et plutôt que de le passer dans l'URL je vous recommande vivement de le stocker en session...
C'est une valeur dont on a constamment besoin normalement ! Ce n'est pas une clé primaire pour rien.

Sessions en PHP avec lien BD

par redlevelagency » 09 févr. 2012, 21:22

Bonjour à tous,

Avons besoin d'une petite aide en PHP (sessions avec lien BD)
Le code ci-dessous crée une SESSION en vérifiant l'accès via une BD
Si le login et password envoyés dans le formulaire sont trouvés et existants donc dans la table créée à cet effet, la session est acceptée ..

Notre soucis est simple : comment pouvons-nous récupérer l'ID (row) de cette table dans laquelle l'ouverture de session a trouvé le login et password après le mécanisme du POST … donc sur notre page 'Dall.php' ($MM_redirectLoginSuccess) ?
… ID de la ligne donc correspondante au login et password trouvés ?

En vous remerciant à tous pour votre aide …
Marc

Code : Tout sélectionner

<?php // *** Validate request to login to this site. if (!isset($_SESSION)) { session_start(); } $loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) { $_SESSION['PrevUrl'] = $_GET['accesscheck']; } if (isset($_POST['login'])) { $loginUsername=$_POST['login']; $password=$_POST['passw']; $MM_fldUserAuthorization = ""; $MM_redirectLoginSuccess = "Dall.php"; $MM_redirectLoginFailed = "ec-.php"; $MM_redirecttoReferrer = false; mysql_select_db($database_c0000, $c0000); $LoginRS__query=sprintf("SELECT login, passw FROM `7775fea2` WHERE login=%s AND passw=%s", GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); $LoginRS = mysql_query($LoginRS__query, $c0000) or die(mysql_error()); $loginFoundUser = mysql_num_rows($LoginRS); if ($loginFoundUser) { $loginStrGroup = ""; if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();} //declare two session variables and assign them $_SESSION['MM_Username'] = $loginUsername; $_SESSION['MM_UserGroup'] = $loginStrGroup; if (isset($_SESSION['PrevUrl']) && false) { $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; } header("Location: " . $MM_redirectLoginSuccess ); } else { header("Location: ". $MM_redirectLoginFailed ); } } ?>