Comparer un formulaire avec la BD

elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010 - 23 mai 2010 à 00:16
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 23 mai 2010 à 20:50
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

ultimacsplayer Messages postés 29 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 16 juin 2010
23 mai 2010 à 00:26
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
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 03:36
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");
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 04:21
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.
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 04:33
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ultimacsplayer Messages postés 29 Date d'inscription mardi 1 février 2005 Statut Membre Dernière intervention 16 juin 2010
23 mai 2010 à 11:32
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 mai 2010 à 12:16
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 -
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 14:36
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.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 mai 2010 à 14:46
Peut-on voir comment tu l'as intégré ?
(vu les changements reposte le code entier)


Cordialement,


Kohntark -
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 15:20
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);
}

?>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 mai 2010 à 15:50
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 -
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 17:00
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);
?>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 mai 2010 à 17:36
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 -
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 17:55
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
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 mai 2010 à 18:04
n'hésites pas à reposter si la doc ne te paraît pas suffisante sur certains points.



Kohntark -
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 20:11
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);
?>
0
elmaestro95 Messages postés 11 Date d'inscription dimanche 7 mars 2010 Statut Membre Dernière intervention 6 juin 2010
23 mai 2010 à 20:13
mysql_real_escape_string($login); ==> mysql_real_escape_string($pseudo);

j'ai vu l'erreur en postant mais sa marche tjr pas
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
23 mai 2010 à 20:50
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 -
0
Rejoignez-nous