Verification mot de passe dans une base de données avec java et servlet
cs_Angelina38
Messages postés30Date d'inscriptionsamedi 13 novembre 2004StatutMembreDernière intervention 5 juillet 2006
-
29 mai 2005 à 09:43
cs_Sapphire77
Messages postés7Date d'inscriptionmardi 10 mai 2005StatutMembreDernière intervention30 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 lutilisateur sont vérifiés dans une base de données que vous aurez préalablement créée
<LI>
Si les informations sont fausses lutilisateur est renvoyé vers une page derreur
<LI>
Si les informations sont correctes lutilisateur est renvoyé vers une page daccueil dun site de gestion que vous désirez créer (ex : gestion du personnel, DVDthéque, gestion dun zoo, , dun commerce, dun stock)
<LI>
Lutilisateur 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;
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()) {
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);
cs_sim51
Messages postés240Date d'inscriptiondimanche 31 octobre 2004StatutMembreDernière intervention31 décembre 20062 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 !!!
cs_Angelina38
Messages postés30Date d'inscriptionsamedi 13 novembre 2004StatutMembreDerniè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 "
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());
}
}
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);
cs_sim51
Messages postés240Date d'inscriptiondimanche 31 octobre 2004StatutMembreDernière intervention31 décembre 20062 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 !!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Angelina38
Messages postés30Date d'inscriptionsamedi 13 novembre 2004StatutMembreDerniè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);
}
}
}