Verification mot de passe dans une base de données avec java et servlet

cs_Angelina38 30 Messages postés samedi 13 novembre 2004Date d'inscription 5 juillet 2006 Dernière intervention - 29 mai 2005 à 09:43 - Dernière réponse : cs_Sapphire77 7 Messages postés mardi 10 mai 2005Date d'inscription 30 juin 2005 Dernière intervention
- 20 juin 2005 à 12:04
Bonjour,

Voici le type de travail qu'on me demanche :






<LI>
Le nom et le mot de passe saisis par l’utilisateur sont vérifiés dans une base de données que vous aurez préalablement créée


<LI>
Si les informations sont fausses l’utilisateur est renvoyé vers une page d’erreur


<LI>
Si les informations sont correctes l’utilisateur est renvoyé vers une page d’accueil d’un site de gestion que vous désirez créer (ex : gestion du personnel, DVDthéque, gestion d’un zoo, …, d’un commerce, d’un stock)


<LI>
L’utilisateur après s’être identifié peut accéder à une page qui lui permet de modifier son mot de passe de connexion.

</LI>
Voila ce que j'ai mis en place et cela ne fonctionne pas :
package basededonnees;


import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class Identification extends HttpServlet{


public Connection con;//connexion à la basse de données
public String maRequeteSql ="";//la requête SQL à exécuter
public String driver;// pilote de la base de données
protected String url;// accès à la base de données
public ResultSet monResultSet=null; // l'objet qui récupére le résultat de la requete SQL
public Statement stmt=null;//l'objet statement pour atttaquer la base de données
public ResultSetMetaData rsmd=null;// les meta données sur la table
public int numCols;//nombre de colonnes de la table


public void doPost(HttpServletRequest req, HttpServletResponse res){
//variable pour réxupérer l'information du formulaire
String nom = "";
String mp = "";
//entete
res.setContentType("text/html");
try{
PrintWriter out = res.getWriter();
//récupérer la valeur saisie
nom = req.getParameter("nom");
mp = req.getParameter("password");
if ("".equals(nom) && "".equals(mp)) {
out.println("Veuillez indiquer votre nom et votre mot de passe
");
out.print("");
out.print("Retour au formulaire");
out.println("");
}


else {
if (this.monResultSet != null) {
this.monResultSet.next();
while (this.monResultSet.next()) {


if (Tnom == nom) {
if (Tpassword == mp) {
out.print("");
}
else {
System.out.println("erreur SQL : " + e.getMessage());
}
}


else {
System.out.println("erreur SQL : " + e.getMessage());


}


}


}


}



url = "jdbc:mysql://localhost/luno1?user=root&password=";//pilote natif mysql :mysql://localhost/luno?user=root&password=mdproot";//pilote natif mysql
driver="org.gjt.mm.mysql.Driver";
//1.Génération d'une connexion
Class.forName(this.driver).newInstance();
con=DriverManager.getConnection(url);
//2. objet Statement pour attaque la bdd
this.stmt=con.createStatement();
//3.Objet du résultat de la requête
maRequeteSql="SELECT * FROM verification";
this.monResultSet=stmt.executeQuery(maRequeteSql);


}catch(SQLException e){//les exceptions SQL
System.out.println(e.getMessage());
while((e=e.getNextException()) !=null){
System.out.println("erreur SQL : "+e.getMessage());
}
}


catch(Exception ex){
System.out.println("erreur: "+ex);
}


}

Merci par avance
Afficher la suite 
30Messages postés samedi 13 novembre 2004Date d'inscription 5 juillet 2006 Dernière intervention

7 réponses

Répondre au sujet
cs_sim51 314 Messages postés dimanche 31 octobre 2004Date d'inscription 31 décembre 2006 Dernière intervention - 29 mai 2005 à 20:58
0
Utile
Re salut lol,

Tout d'abord je vois pas pourquoi tu parcours toute la table pour
trouver l'enregistrement oui le nom et le password corresponde alors
qu'il est tellement simple de faire sa requête sql avec une clause
where sur le nom puis de vérifier le password. En plus cela gagnera en
efficacité surtout si ta base de donnée est volumineuse.

Sinon dans ton code je vois pas d'où vient Tnom et Tpassword ??

De plus si tu as envi de comparer des chaine de caractère il faut utiliser la fonction equals et pas ==.


while (this.monResultSet.next()) {

if (monResultSet.getstring(Tnom).equals(nom) {


if (monResultSet.getstring(Tpassword).equals(mp) {


out.print("");

}

}


N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
Commenter la réponse de cs_sim51
cs_Angelina38 30 Messages postés samedi 13 novembre 2004Date d'inscription 5 juillet 2006 Dernière intervention - 30 mai 2005 à 08:23
0
Utile
BOnjour,
Les variable Tnom et Tpassword sont les noms donnnées au variable de ma table, ce n'est pas judicieux de procéder comme ceci alors pour répondre à ta question :
"Sinon dans ton code je vois pas d'où vient Tnom et Tpassword "

Donc ceci te parait plus judicieux :

import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class Identification extends HttpServlet{


public Connection con;//connexion à la basse de données
public String maRequeteSql ="";//la requête SQL à exécuter
public String driver;// pilote de la base de données
protected String url;// accès à la base de données
public ResultSet monResultSet=null; // l'objet qui récupére le résultat de la requete SQL
public Statement stmt=null;//l'objet statement pour atttaquer la base de données
public ResultSetMetaData rsmd=null;// les meta données sur la table
public int numCols;//nombre de colonnes de la table


public void doPost(HttpServletRequest req, HttpServletResponse res){
//variable pour réxupérer l'information du formulaire
String nom = "";
String mp = "";
//entete
res.setContentType("text/html");
try{
PrintWriter out = res.getWriter();
//récupérer la valeur saisie
nom = req.getParameter("nom");
mp = req.getParameter("password");
if ("".equals(nom) && "".equals(mp)) {
out.println("Veuillez indiquer votre nom et votre mot de passe
");
out.print("");
out.print("Retour au formulaire");
out.println("");
}


else {
if (this.monResultSet != null) {
this.monResultSet.next();
while (this.monResultSet.next()) {
if (monResultSet.getstring(Tnom).equals(nom) {
if (monResultSet.getstring(Tpassword).equals(mp) {
out.print("");
}
}
}
else {
System.out.println("erreur SQL : " + e.getMessage());
}
}


else {
System.out.println("erreur SQL : " + e.getMessage());


}


}


}


}



url = "jdbc:mysql://localhost/luno1?user=root&password=";//pilote natif mysql :mysql://localhost/luno?user=root&password=mdproot";//pilote natif mysql
driver="org.gjt.mm.mysql.Driver";
//1.Génération d'une connexion
Class.forName(this.driver).newInstance();
con=DriverManager.getConnection(url);
//2. objet Statement pour attaque la bdd
this.stmt=con.createStatement();
//3.Objet du résultat de la requête
maRequeteSql="SELECT * FROM verification";
this.monResultSet=stmt.executeQuery(maRequeteSql);


}catch(SQLException e){//les exceptions SQL
System.out.println(e.getMessage());
while((e=e.getNextException()) !=null){
System.out.println("erreur SQL : "+e.getMessage());
}
}


catch(Exception ex){
System.out.println("erreur: "+ex);
}


}
et mes else if sont ils judicieux par rapport à ce que l'on me demande ?
Merci d'avance
Commenter la réponse de cs_Angelina38
cs_gattous 100 Messages postés vendredi 25 février 2005Date d'inscription 7 octobre 2007 Dernière intervention - 31 mai 2005 à 19:14
0
Utile
voici ce ke je fais d'hab :



public void doPost(HttpServletRequest request,HttpServletResponse response){

String login = request.getParameter("paramlogin");

String pwd=request.getParameter("parampwd");

String sql "SELECT * from user where login ' "+login+" ' "; // les espaces ici sont justes pour la visibilité

int i=0;// pour tester l'existence du user

String monlogin="";

try{



Class.forName("org.gjt.mm.mysql");

Connection con = DriverManager.getConnection("jdbc:mysql://localhost/mabase","root","zizou");

Statement stmt = con.createStatement();

ResultSet rs = Statement.executeQuery(sql);

// si le rs est vide, le programme echappe a partir d'ici

while(rs.next()){

// normalement il doit y avoir 1 seul enregistrement, c'est ce ke je suppose

i++; // i!=0 il y a donc un user avec ce login

monlogin = rs.getString("champ_mdp");

}

}

catch(Exception ex){ ex.printStackTrace();}

if (i==0){

// login inexistant

response.sendRedirect("erreurlogin.htm");

}

else {

if (monlogin.equals(login)){

// les actions s'il est reconnu

}

else {

response.sendRedirect("erreurmdp.htm");

}

}

}

j'espere ke ça marchera pour toi.
Commenter la réponse de cs_gattous
cs_sim51 314 Messages postés dimanche 31 octobre 2004Date d'inscription 31 décembre 2006 Dernière intervention - 1 juin 2005 à 09:50
0
Utile
Salut gattous,
Je pense que tu as fait une erreur, en effet tu ne test pas le mot-de-pass, mais tu test 2 fois le login, une fois avec la requête sql puis une autre fois quand tu fais if (monlogin.equals(login)) car dans monlogin tu as mis le mot de pass : monlogin = rs.getString("champ_mdp")
Sinon cela me semble bon quelque soit le codage de la table.



N'oubliez pas de cliquer sur réponse acceptée si la réponse vous convient !!!
Commenter la réponse de cs_sim51
cs_gattous 100 Messages postés vendredi 25 février 2005Date d'inscription 7 octobre 2007 Dernière intervention - 1 juin 2005 à 14:05
0
Utile
oui c'est vrai, je m'excuse pour cette faute de frappe, et je te remercie sim51 pour cette remarque.
Commenter la réponse de cs_gattous
cs_Angelina38 30 Messages postés samedi 13 novembre 2004Date d'inscription 5 juillet 2006 Dernière intervention - 2 juin 2005 à 08:30
0
Utile
Bonjour,

Voila le code que j'ai mis en place, cependant ce que je ne comprend pas c'est déjà pourquoi dans un premier temps, il ne m'affiche à l'écran que "Veuillez indiquer votre mot de passe" avec n'importe quelle action que je valide sur le formulaire. Cette servlet est associé à un formulaire d'identification en html.

package basededonnees;


import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Identification extends HttpServlet {
public Connection con; //connexion à la basse de données
public String maRequeteSql = ""; //la requête SQL à exécuter
public String driver; // pilote de la base de données
protected String url; // accès à la base de données
public ResultSet monResultSet = null; // l'objet qui récupére le résultat de la requete SQL
public Statement stmt = null; //l'objet statement pour atttaquer la base de données
public ResultSetMetaData rsmd = null; // les meta données sur la table
public int numCols; //nombre de colonnes de la table
public void doPost(HttpServletRequest req, HttpServletResponse res) {
//variable pour réxupérer l'information du formulaire
String nom = "";
String mp = "";
//entete
res.setContentType("text/html");
try {
System.out.println("pass1");
PrintWriter out = res.getWriter();
//récupérer la valeur saisie
nom = req.getParameter("nom");
mp = req.getParameter("password");
url = "jdbc:mysql://localhost/luno?user=root&password="; //pilote natif mysql
driver = "org.gjt.mm.mysql.Driver";
//1.Génération d'une connexion
Class.forName(this.driver).newInstance();
con = DriverManager.getConnection(url);
//2. objet Statement pour attaque la bdd
this.stmt = con.createStatement();
//3.Objet du résultat de la requête


maRequeteSql = "SELECT * FROM verification";
this.monResultSet = stmt.executeQuery(maRequeteSql);


System.out.println("pass2");
if ("".equals(nom) && "".equals(mp)) {
System.out.println("pass3");
out.println("Veuillez indiquer votre nom et votre mot de passe");
out.print("");
out.print("Retour au formulaire");
out.println("");
} else {
System.out.println("pass4");
if (this.monResultSet != null) {
System.out.println("pass5");

while (this.monResultSet.next()) {
System.out.println("pass6");
if (monResultSet.getString("Tnom").equals(nom)) {
System.out.println("pass7");
if (monResultSet.getString("Tpassword").equals(mp)) {
System.out.println("pass8");
res.sendRedirect("site.html");
}


else {
System.out.println("pass9");
out.println("Veuillez indiquer votre nom");
}
}
else {
out.println("Veuillez indiquer votre mot de passe" );
}
}
}
}
// Fermeture de la connexion à la bdd
this.con.close();
}
catch (SQLException e) { //les exceptions SQL
System.out.println(e.getMessage());
while ( (e = e.getNextException()) != null) {
System.out.println("erreur SQL : " + e.getMessage());
}
}
catch (Exception ex) {
System.out.println("erreur: " + ex);
}
}
}

merci d'avance
Commenter la réponse de cs_Angelina38
cs_Sapphire77 7 Messages postés mardi 10 mai 2005Date d'inscription 30 juin 2005 Dernière intervention - 20 juin 2005 à 12:04
0
Utile
J'ai une question idiote : comment tu relies le formulaire à ton servlet?? Et tu n'utilise pas de java dans ton programme??
Commenter la réponse de cs_Sapphire77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.