Comparer un formulaire avec la BD

Signaler
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonsoir à tous, je viens chercher de l'aide parce que je sais plus quoi faire.
mon probleme est le suivant : je veut comparer mon formulaire avec ma base de donnée mais je n'y arrive.
ce que je veux faire c'est verifier si le nom d'utilisateur se trouve dans la BD et si le mot de passe est bon.
voila mon code

<?php
// information pour la connection à le DB
$host = "localhost";
$user="yass";
$pass="astral";
$db = "bus";
$table= "mdp";
$passw_ok = false;
$login_ok= false;

if (isset($_POST['login']) and isset($_POST['password']));

if (($_POST['login'] != "") and ($_POST['password'] != ""))
{

$pseudo = $_POST['login'];
$password = $_POST['password'];


// connection à la base de donnee
$connect = mysql_connect ($host, $user, $pass) or die ("erreur de connexion au serveur." );
mysql_select_db($db, $connect) or die ("erreur de connexion a la base.");


// constitution requete pour verifier le login
$select " SELECT login FROM mdp WHERE login '".$pseudo."' ";
$result1 = mysql_query($select) or die ("Le nom d'utilisateur n'a pas été trouver.");

if($result1 == 0)
{
$veriflog = mysql_fetch_row($result1);
if ($veriflog[1] == $pseudo)
$login_ok= true;

else
echo "utilisateur inconu";
}

// constitution requete pour verifier le mot de pass
$select1 " SELECT password FROM mdp WHERE password '".$password."' ";
$result2 = mysql_query($select1) or die ("Le mot de passe n'est pas correct." );

if($result2 == 0)
{
$verifpass = mysql_fetch_row($result2);
if ($verifpass[1] == $password)
$passw_ok = true;

else
echo "mot de passe incorect";
}

mysql_close($connect);
}

if ($passw_ok true && $login_ok true)
header("Location: /suivie_de_vehicule/ma_ligne.php");
else
header("Location: /suivie_de_vehicule/supervision.php");

?>

merci bcp pour votre aide

17 réponses

Messages postés
29
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
16 juin 2010

Bonjour,
personnellement, je crée une table "login" par exemple, avec 2 champs dedans: "Pseudo" "Password".

Ensuite, je fais un select * from login where pseudo='".$_POST['pseudo']."'
et un mysql_num_row.
Si le mysql_num_row ==1 alors je fais un autre test:
select * from login where pseudo='".$_POST['pseudo']."' AND password='".$_POST['password']."'
puis un mysql_num_row. Si ce dernier est égal à 1, alors je crée ma session administrateur ou ma session client, sinon je fais un header('location: index.php') par exemple.

En espérant avoir pu éclairer la situation, sinon dis le


www.too-web.fr
www.BoutiquePrice.com
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

Je viens de tester ce que tu ma conseiller et que te dire a part un grand merci
sa marche nikel je pense pas que j'aurai trouver sa de moi même je fais que débuter.
Merci pour ton aide tu ma bien éclairer sur ce coup .

je poste le code pour ceux que sa pourrait intéresser.

//reconnaissance de l'utilisateur

$select " SELECT login FROM mdp WHERE login '".$pseudo."' ";
$result1 = mysql_query($select) or die ("Le nom d'utilisateur n'a pas été trouver.");
$num_rows= mysql_numrows($result1);

if($num_rows == 1)
{
$select1 " SELECT password FROM mdp WHERE password '".$password."' ";
$result2 = mysql_query($select) or die ("Le nom d'utilisateur n'a pas été trouver.");
$num_rows1= mysql_numrows($result2);

if ($num_rows1 == 1)
header("Location: /suivie_de_vehicule/ma_ligne.php");
}else
header("Location: /suivie_de_vehicule/supervision.php");
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

euh en faite sa marche a moitié . je pense que j'ai mal codé la chose.
je m'explique, j'ai fait plusieurs test en entrant un login et mdp se trouvant dans ma base de donnée, tous se passe bien la page désirer s'affiche.
j'ai fait un autre test avec un login et mdp différent de ceux de ma BDD, jusque la tout va bien aussi il n'y a pas de connexion.
quand j'ai essayer avec un login présent dans ma BDD et un mdp différent a celui qui est attribué au login, la connexion est reussi.
en faite le mot de passe n'est pas vérifier une fois que le login est bon la connexion est établi. je vais essayer de chercher si je peut trouver le pourquoi du comment.
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

re c encore moi enfaite g trouver le probleme c'était une simple erreur de syntaxe a la ligne
$result2 = mysql_query($select) or die ("Le nom d'utilisateur n'a pas été trouver.");
je l'ai remplacé par
$result2 = mysql_query($select1) or die ("Le nom d'utilisateur n'a pas été trouver.");

ce qui est logique faut recuperer les bonne variable... bon v dodo paske je voi plus clair

encore merci ultimacsplayer
Messages postés
29
Date d'inscription
mardi 1 février 2005
Statut
Membre
Dernière intervention
16 juin 2010

Resalut, content que ça ait pu t'éclairer.
Par contre, ton $select1, il ne teste pas si le mot de passe posté correspond au mot de passe du login. En fait, si tu n'as qu'un seul champ dans la table mdp alors ça va, mais si tu as plusieurs clients par exemple, ton formulaire ne sera pas sécurisé, il suffit de trouver un login au hasard présent et un password au hasard présent.

$select1 = " SELECT password FROM mdp
WHERE login = '".$pseudo."' "
AND password = '".$password."' ";



www.Too-Web.fr , création de site internet
www.BoutiquePrice.com
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Au passage :

Pourquoi faire 2 requêtes ??
Ca demande des ressources inutiles. Ce que l'on cherche ici est l'existence d'un couple utilisateur / mot de passe, pas à savoir si le pseudo existe et que le pass est bon, et encore moins si c'est pour envoyer des alertes du genre "votre pseudo est erroné" et "votre pseudo est correct, mais pas votre pass", ce qui nuirait grandement à la sécurité.
Donc une seule requête :

$sql = "SELECT COUNT(*) FROM mdp
WHERE login='".$login."' AND password = '".$password."'";

Et ensuite :
// mysql_error() ci dessous uniquement pour le debug !!!
if (false $q mysql_query($sql)) die('erreur : '.mysql_error()); 
if (1 !== mysql_result($q, 0)) {
    header("Location: /suivie_de_vehicule/supervision.php");
    exit;
}
/*
Connexion OK => ton traitement
*/


Côté sécurité encore :
Il faut impérativement utiliser mysql_real_escape_string() sur les données postées
Les header() doivent impérativement être suivis par un exit()

Sans ça il est très simple de se connecter.


Cordialement,

Kohntark -
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

salut kohntark j'ai essayé ta méthode et sa me renvoi a mon tout premier code cad que le test verifie juste le login une fois qu'il est bon il y a connexion, si tu pouvait plus m'éclairer sur ta méthode sa serais super en te remercient d'avance.
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Peut-on voir comment tu l'as intégré ?
(vu les changements reposte le code entier)


Cordialement,


Kohntark -
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

oki voila mon code

<?php
// information pour la connection à le DB
$host = "localhost";
$user="yass";
$pass="astral";
$db = "bus";
$table= "mdp";

if (isset($_POST['login']) and isset($_POST['password']));

if (($_POST['login'] != "") and ($_POST['password'] != ""))
{

$pseudo = $_POST['login'];
$password = $_POST['password'];


// connection à la base de donnee
$connect = mysql_connect ($host, $user, $pass) or die ("erreur de connexion au serveur." );
mysql_select_db($db, $connect) or die ("erreur de connexion a la base.");

//reconnaissance de l'utilisateur
/*
$select " SELECT login FROM mdp WHERE login '".$_POST['login']."' ";
$result1 = mysql_query($select) or die ("Le nom d'utilisateur n'a pas été trouver.");
$num_rows= mysql_numrows($result1);
*/

// mysql_error() ci dessous uniquement pour le debug !!!

$sql = "SELECT * FROM mdp WHERE login='".$login."' AND password = '".$password."'";

if (false $q mysql_query($sql)) die('erreur : '.mysql_error());
{
if (1 !== mysql_result($q, 0))
{
header("Location: /suivie_de_vehicule/ma_ligne.php");
exit;
}
else
{
header("Location: /suivie_de_vehicule/supervision.php");
exit;
}
}
mysql_close($connect);
}

?>
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Côté sécurité encore :
Il faut impérativement utiliser mysql_real_escape_string() sur les données postées
Les header() doivent impérativement être suivis par un exit()

Sans ça il est très simple de se connecter.


if (isset($_POST['login']) and isset($_POST['password']));

if (($_POST['login'] != "") and ($_POST['password'] != "")) {



Le if (isset... ne sert à rien tel qu'il est là. Il faut qu'il soit une condition pour le reste du code.


mysql_close($connect);

Ne sert à rien dans 95% des cas. Par contre si tu le mets il est plus logique de le déplacer à l'extérieur de la condition 'if(isset($_POST ...


La partie de code que je t'ai donné ne correspond pas à c elle recopié ... pense à te relire !! ^^

Et, pour le debug, active l'affichage des erreurs en mettant ce code tout en haut de ta page :

<?php
ini_set('display_errors', 1);
error_reporting(-1);
?>


Kohntark -
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

j'ai essayer de modifier le code selon se que tu ma dit et je ni arrive toujours pas voila mon code qui doit etre bourer derreur je pense

<?php
// information pour la connection à le DB
$host = "localhost";
$user="yass";
$pass="astral";
$db = "bus";
$table= "mdp";

ini_set('display_errors', 1);
error_reporting(-1);

if (($_POST['login'] != "") and ($_POST['password'] != ""))
{
$pseudo = $_POST['login'];
$password = $_POST['password'];

// connection à la base de donnee

$connect = mysql_connect ($host, $user, $pass) or die ("erreur de connexion au serveur." );
mysql_select_db($db, $connect) or die ("erreur de connexion a la base.");

//reconnaissance de l'utilisateur

$sql = "SELECT COUNT(*) FROM mdp WHERE login='".$login."' AND password = '".$password."'";

if (false $q mysql_query($sql)) die('erreur : '.mysql_error());

if (1 !== mysql_result($q, 0))
{
$opensup = header("Location: /suivie_de_vehicule/supervision.php");
exit($opensup);
}

else {
mysql_real_escape_string($login);
mysql_real_escape_string($password);
$openligne = header("Location: /suivie_de_vehicule/ma_ligne.php");
exit($openligne);
}
}
//mysql_close($connect);
?>
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Oui, il y a un paquet d'erreur.
Regardes tu correctement la doc lorsque tu utilises des fonctions PHP ?
Je doute un peu, et ça je ne le ferai pas à ta place.

Entre autre :
exit()
mysql_real_escape_string()
header()

à consulter sur : http://fr.php.net/manual/fr/


Afin de faciliter la lecture, pense à utiliser la balise code et à indenter.
Pense à lire les erreurs qui sont affichées et à les préciser (en matérialisant clairement à quel numéro de ligne elles s'appliquent)


Puisque le but de ce forum n'est pas de faire ton code, ce qui ne t'amènerait rien, je t'indique une une partie des pbs :

// information pour la connection à le DB
$host = "localhost";
$user="yass";
$pass="astral";
$db = "bus";
$table= "mdp";

ini_set('display_errors', 1);
error_reporting(-1);

// ici il manque le contrôle de l'existence des variables $_POST
// if (isset($_POST[.......) {

if (($_POST['login'] != "") and ($_POST['password'] != "")) {
=> préfère :
if (!empty($_POST['login']) && !empty($_POST['password'])) {

// utilisation obligatoire de mysql_real_escape_string()
$pseudo = $_POST['login'];
$password = $_POST['password'];

// connection à la base de donnee

$connect = mysql_connect ($host, $user, $pass) or die ("erreur de connexion au serveur." );
mysql_select_db($db, $connect) or die ("erreur de connexion a la base.");


//login n'est pas définie (c'est $pseudo que tu as défini)
$sql = "SELECT COUNT(*) FROM mdp WHERE login='".$login."' AND password = '".$password."'";

if (false $q mysql_query($sql)) die('erreur : '.mysql_error());

if (1 !== mysql_result($q, 0)) {
$opensup = header("Location: /suivie_de_vehicule/supervision.php");
exit($opensup);
}

else {
// a quoi servent donc les 2 lignes ci dessous ???

mysql_real_escape_string($login);
mysql_real_escape_string($password);


$openligne = header("Location: /suivie_de_vehicule/ma_ligne.php");
exit($openligne);
}
}

Bon, c'est tellement le boxon avec les tags de couleur que j'ai peut être loupé qqchose.

Kohntark -
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

oui merci je veux pas qu'on fasse mon code sinan j'apprendrai jamais c'est mon premier site c pour sa que je galére un peu v revoir tous sa en fonction de se que tu ma dit et revenir pour une nouvelle correction merci pour ton aide et dsl de tprendre du temps
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
n'hésites pas à reposter si la doc ne te paraît pas suffisante sur certains points.



Kohntark -
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

est ce que tu pourrai m'expliquer le fonctionnement de mysql_real_escape_string parce que j'arrive pas à comprendre comment l'utiliser ni a quel moment, j'ai regardé dans le man sur http://fr2.php.net/manual/fr/function.mysql-real-escape-string.php mais j'arrive pas à comprendre son fonctionnement.

les modification que j'ai faite mais sans sucés

if (!empty($_POST['login']) && !empty($_POST['password']))
{
$pseudo = $_POST['login'];
$password = $_POST['password'];
mysql_real_escape_string($login);
mysql_real_escape_string($password);

// connection à la base de donnee
$connect = mysql_connect ($host, $user, $pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db, $connect) or die ('Erreur : '.mysql_error());

//reconnaissance de l'utilisateur

$sql = "SELECT COUNT(*) FROM mdp WHERE login='".$pseudo."' AND password = '".$password."'";

if (false $q mysql_query($sql)) die('erreur : '.mysql_error());
if (1 !== mysql_result($q, 0))
{
header("Location: /suivie_de_vehicule/supervision.php");
exit();
}

else
{
header("Location: /suivie_de_vehicule/ma_ligne.php");
exit();
}
}
//mysql_close($connect);
?>
Messages postés
11
Date d'inscription
dimanche 7 mars 2010
Statut
Membre
Dernière intervention
6 juin 2010

mysql_real_escape_string($login); ==> mysql_real_escape_string($pseudo);

j'ai vu l'erreur en postant mais sa marche tjr pas
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Bon, et bien ça n'a pas l'air d'être mal ça.


C'est presque ça pour mysql_real_escape_string(), mais, comme tu peux le lire dans la doc :

Valeurs de retour
Retourne la chaîne échappée, ou FALSE si une erreur survient.


En fait elle retourne une chaîne échappée des caractères qui peuvent poser problème, elle ne modifie pas directement les variables, donc :

mysql_real_escape_string($pseudo);
mysql_real_escape_string($password);

=> n'a aucune incidence, il faut récupérer le retour de la fonction :

$login = mysql_real_escape_string($pseudo);
$password = mysql_real_escape_string($password);


Puisqu'il est inutile de passer par des variables intermédiaires tu peux remplacer ça :
$pseudo = $_POST['login'];
$password = $_POST['password'];
mysql_real_escape_string($login);
mysql_real_escape_string($password);

directement par :

$login = mysql_real_escape_string($_POST['login']);
$password = mysql_real_escape_string($_POST['password'];

// ici il manque le contrôle de l'existence des variables $_POST
// if (isset($_POST[.......) {

Ca manque toujours !!
Là tu ne fais, via tes !empty(), que vérifier que les variables ne sont pas vides, mais si elles n'existent pas (pas de formulaire posté)> erreur.

Il faut donc mettre ça :

if (isset($_POST['login'] && isset($_POST['password']) {
   // tout le code que tu as posté avant
} else {
    // une éventuelle action si le formulaire n'a pas été posté
    // comme un retour à la page précédente par exemple
}



Malgré ses erreurs ça aurait dû fonctionner (sauf caractères spéciaux dans le pass ou l'user)
Apporte les modifs, fais les tests et pense à décrire le pb et les éventuelles erreurs qui peuvent s'afficher.


Kohntark -