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

cs_Angelina38 Messages postés 30 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 5 juillet 2006 - 29 mai 2005 à 09:43
cs_Sapphire77 Messages postés 7 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 30 juin 2005 - 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
A voir également:

7 réponses

cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 2
29 mai 2005 à 20:58
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 !!!
0
cs_Angelina38 Messages postés 30 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 5 juillet 2006
30 mai 2005 à 08:23
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
0
cs_gattous Messages postés 100 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 7 octobre 2007
31 mai 2005 à 19:14
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.
0
cs_sim51 Messages postés 240 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 31 décembre 2006 2
1 juin 2005 à 09:50
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 !!!
0

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

Posez votre question
cs_gattous Messages postés 100 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 7 octobre 2007
1 juin 2005 à 14:05
oui c'est vrai, je m'excuse pour cette faute de frappe, et je te remercie sim51 pour cette remarque.
0
cs_Angelina38 Messages postés 30 Date d'inscription samedi 13 novembre 2004 Statut Membre Dernière intervention 5 juillet 2006
2 juin 2005 à 08:30
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
0
cs_Sapphire77 Messages postés 7 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 30 juin 2005
20 juin 2005 à 12:04
J'ai une question idiote : comment tu relies le formulaire à ton servlet?? Et tu n'utilise pas de java dans ton programme??
0
Rejoignez-nous