Login via Mysql (Modification de code)

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 : Login via Mysql (Modification de code)

Re: Login via Mysql (Modification de code)

par moogli » 09 oct. 2012, 16:13

salut

- il faut utiliser la clause where dans la requete SQL afin de ne récupérer que le mot de passe de l'utilisateur qui tente de se connecter (et non toute la base comme tu le fait).

Partie à supprimer
<?php
// Definition des constantes et variables  
define('LOGIN','Admin');  
define('PASSWORD','Admin');
<?php
$sql = 'SELECT login,password,langue FROM users';  // ajout un where ici

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());  // pas de die, utilise un if en dessous pour traiter l'erreur correctement

$errorMessage = '';   

// Test de l'envoi du formulaire  
if(!empty($_POST)) // A virer le test suivant suffit :) (pense à l'accolade fermante et à l'éventuel else qui va avec)
{    
// Les identifiants sont transmis ?    

if(!empty($_POST['login']) && !empty($_POST['password']))     
{      
// Sont-ils les mêmes que les constantes ?      
if($_POST['login'] !== LOGIN) // compare avec le résultat de la requête SQL 
{        
$errorMessage = 'Mauvais login !';      
}        
elseif($_POST['password'] !== PASSWORD)       // idem
{          
$errorMessage = 'Mauvais password !';      }        
else      
{        

// On ouvre la session        
session_start(); // avant c'est mieux pour éviter les message d'erreur :)
   
// On enregistre le login en session        
$_SESSION['login'] = LOGIN;     // non utilise le retour de la requete SQL
$_SESSION['password'] = PASSWORD; // idem
      // la suite en commentaire pour les tests sinon c'est la merde tu ne vois pas les éventuels messages d'erreur :)
// On redirige vers le fichier admin.php        
//header('Location:admin.php');       
//exit();      
}    
}
?>

les tutos pour t'aider
http://phpdebutant.org/article117.php
http://phpdebutant.org/article47.php


@+

Login via Mysql (Modification de code)

par Ascari » 09 oct. 2012, 12:49

Bonjour,

j'ai une page de login qui fonctionne sans base SQL et j'aimerais changer cela, mon site comportera plusieurs utilisateurs avec différentes informations en fonction de leur langue par exemple, j'arrive pas a modifier mon code pour ne plus prendre en compte mes variables définies dans le code mais aller comparer avec la base.

Si vous avez une idée car cela fait 3h que je teste plusieurs choses sans y arriver.

Merci beaucoup d'avance

Voici le code de l'identification.

Code : Tout sélectionner

<?php // on ouvre la connexion MySQL include('connexion.php'); // on crée la requête SQL $sql = 'SELECT login,password,langue FROM users'; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // Definition des constantes et variables define('LOGIN','Admin'); define('PASSWORD','Admin'); $errorMessage = ''; // Test de l'envoi du formulaire if(!empty($_POST)) { // Les identifiants sont transmis ? if(!empty($_POST['login']) && !empty($_POST['password'])) { // Sont-ils les mêmes que les constantes ? if($_POST['login'] !== LOGIN) { $errorMessage = 'Mauvais login !'; } elseif($_POST['password'] !== PASSWORD) { $errorMessage = 'Mauvais password !'; } else { // On ouvre la session session_start(); // On enregistre le login en session $_SESSION['login'] = LOGIN; $_SESSION['password'] = PASSWORD; // On redirige vers le fichier admin.php header('Location:admin.php'); exit(); } } else { $errorMessage = 'Veuillez inscrire vos identifiants svp !'; } } ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Formulaire d'authentification</title> </head> <body> <form action=" <?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post"> <fieldset> <legend>Identifiez-vous</legend> <?php // Rencontre-t-on une erreur ? if(!empty($errorMessage)) { echo '<p>', htmlspecialchars($errorMessage) ,'</p>'; } ?> <p> <label for="login">Login :</label> <input type="text" name="login" id="login" value="" /> </p> <p> <label for="password">Password :</label> <input type="password" name="password" id="password" value="" /> <input type="submit" name="submit" value="Se logguer" /> </p> </fieldset> </form> </body></html>


Et celui de la page affichée

Code : Tout sélectionner

<?php // Ouverture la connexion MySQL include('connexion.php'); // On prolonge la session session_start(); //On teste si la variable de session existe et contient une valeur if(empty($_SESSION['login'])) { // Si inexistante ou nulle, on redirige vers le formulaire de login header('Location: authentification.php'); exit(); } // on crée la requête SQL $sql = 'SELECT login,password,langue FROM users'; // on envoie la requête $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on fait une boucle qui va faire un tour pour chaque enregistrement while($data = mysql_fetch_assoc($req)) { // on affiche les informations de l'enregistrement en cours echo '<b>'.$data['login'].'<br>'; echo '<b>'.$data['langue'].'<br>'; echo '<b>'.$data['password'].'<br>'; } ?> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <title>Administration</title> </head> <body> <?php // Ici on est bien loggué, on affiche un message echo 'Bienvenue ', $_SESSION['login']; ?> </body> </html>