Comparer un jpassword a un champ de table
Dernière réponse : dans Programmation
bonjour à tous,je voudrais dans ma requête select comparer la valeur d'un champ de saisie de type jpasswordfield a la valeur se trouvant dans ma table,mais il y'a un problème.voici ma requête en question:
login est un JTexfield
pass correspond au JPasswordField
CodeAcces_Opt et MotPasse_Opt correspondent aux champs de la table
Quand je coupe ma requete je veux dire sans impliquer le mot de passe ça marche du genre :
Donc le probleme doit se situer dans l’obtention de la valeur du mot de passe a l’aide.
Aussi j’aimerais qu’à l’execution se soit mon formulaire de connexion qui s’affiche en premier,je ne sais pas comment le faire quelqu’un pourrait-il m’aider ?
login est un JTexfield
pass correspond au JPasswordField
CodeAcces_Opt et MotPasse_Opt correspondent aux champs de la table
"select * from Operateur where CodeAcces_Opt ='"+login.getText()+"' and MotPasse_Opt = '"+pass.getPassword+"'";
Quand je coupe ma requete je veux dire sans impliquer le mot de passe ça marche du genre :
"select * from Operateur where CodeAcces_Opt ='"+login.getText()+"'";
Donc le probleme doit se situer dans l’obtention de la valeur du mot de passe a l’aide.
Aussi j’aimerais qu’à l’execution se soit mon formulaire de connexion qui s’affiche en premier,je ne sais pas comment le faire quelqu’un pourrait-il m’aider ?
Autres pages sur : comparer jpassword champ table
Lassé par la pub ? Créez un compte
Bonjour,
Il manque quelques informations pour qu'on puisse t'aider !
Quel est ton SGBD ? (MySQL, PosgreSQL, Oracle, Accès, ...)
Que contient ta base ? (fais un screenshot, listing, ...)
Qu'elles sont les résultats des requêtes ? (directement dans la base, et à partir du code)
Dans tous les cas, la première requête n'est pas très représentative. Tu souhaites savoir si l'identifiant et le mot de passe corresponde, donc un "select count(*)" me semble plus approprié. (tu auras le nombre d'occurence du login+password)
De plus, vérifie que tes "mots de passes" ne soient pas crypté (MD5, ou autres)... Du coup, tester un "pass" en clair sur un crypté ne sera jamais valide.
Bon courage pour la suite.
Il manque quelques informations pour qu'on puisse t'aider !
Dans tous les cas, la première requête n'est pas très représentative. Tu souhaites savoir si l'identifiant et le mot de passe corresponde, donc un "select count(*)" me semble plus approprié. (tu auras le nombre d'occurence du login+password)
De plus, vérifie que tes "mots de passes" ne soient pas crypté (MD5, ou autres)... Du coup, tester un "pass" en clair sur un crypté ne sera jamais valide.
Bon courage pour la suite.
Salut,
Vu que getPassword est une méthode (visiblement), il faudrait plutôt faire getPassword() que getPassword, non ?
Et puis, getPassword() retourne un tableau de caractères (char[]) et pas une chaine de caractères (string).
Il faudrait alors faire:
Sauf que la documentation indique de ne pas traiter les passwords en tant que chaine de caractères.
Edit: aussi, il faut plutôt utiliser des requêtes avec des paramètres, plutôt que de mettre directement des chaines de caractères pour éviter les SQL injections.
Vu que getPassword est une méthode (visiblement), il faudrait plutôt faire getPassword() que getPassword, non ?
Et puis, getPassword() retourne un tableau de caractères (char[]) et pas une chaine de caractères (string).
Il faudrait alors faire:
String password = new String(passwordField.getPassword());
Sauf que la documentation indique de ne pas traiter les passwords en tant que chaine de caractères.
Edit: aussi, il faut plutôt utiliser des requêtes avec des paramètres, plutôt que de mettre directement des chaines de caractères pour éviter les SQL injections.
Merci bien pour votre aide j'ai pu resoudre le problème,il me reste un second souci,je voudrais qu'à l'exécution de mon application,le formulaire de connexion soit la page d'accueil en fait j'ai crée un menu a partir duquel je choisi les différentes taches,dans ma methode main() j'appelle le menu :
dans mon formulaire de connexion egalement j'appele le menu apres authentification:
mais je ne sais comment a faire de mon formulaire de connexion mon formulaire d'accueil.aidez moi merci,j'utilise mysql et netbeans 6.8 comme IDE os XP pro
menu mn=new menu(); mn.setVisible(true);
dans mon formulaire de connexion egalement j'appele le menu apres authentification:
if(resultats.next()) { JOptionPane.showMessageDialog(null," Anso Vous etes connecté","Succès d'authenication",JOptionPane.ERROR_MESSAGE); menu mn = new menu(); mn.setVisible(true); } else JOptionPane.showMessageDialog(null,"Echec connexion","Erreur d'authenication",JOptionPane.ERROR_MESSAGE);
mais je ne sais comment a faire de mon formulaire de connexion mon formulaire d'accueil.aidez moi merci,j'utilise mysql et netbeans 6.8 comme IDE os XP pro
Bonjour,
Comme le disait OmaR, il serait bon de faire tes tests avec des requêtes paramétrées.
Je vais te faire une petite démo (pas forcément fonctionnel) avec ton formulaire de connection au début :
Le "Main":
Le formulaire:
La fenêtre principal de ton application (après identification):
Un truc du genre devrait avoir le comportement que tu recherches ...
Bon courage.
Comme le disait OmaR, il serait bon de faire tes tests avec des requêtes paramétrées.
Je vais te faire une petite démo (pas forcément fonctionnel) avec ton formulaire de connection au début :
Le "Main":
public class MonAppli
{
public static void main(String args[])
{
Runnable doCreateAndShowGUI = new Runnable()
{
@Override
public void run()
{
FormBD.getInstance();
}
};
SwingUtilities.invokeLater(doCreateAndShowGUI);
}
}
Le formulaire:
public class FormBD extends JFrame
{
private static FormBD instance;
public static FormBD getInstance()
{
if(instance == null)
instance = new FormBD();
return instance;
}
private JTextField jtf_login = new JTextField();
private JPasswordField jpf_password = new JPasswordField();
private FormBD()
{
// ... Creer Frame et JPanel, puis setContentPane() et setVisibile
// etc.
}
public void actionPerformed(ActionEvent e)
{
// action du bouton OK pour la connection
(new CheckValidityWorker(this)).execute();
}
public String getLogin()
{
String login = jtf_login.getText();
// ajouter vérif' pour éviter l'injection SQL ...
return login;
}
public String getPassword()
{
String password = new String(this.jpf_password.getPassword());
// ajouter vérif' pour éviter l'injection SQL ...
return password;
}
class CheckValidityWorker extends SwingWorker<Boolean, Object>
{
private static final String sql = "SELECT count(*) AS EXIST FORM Operateur WHERE CodeAcces_Opt = ? AND MotPasse_Opt = ?";
private Connection connexion;
private PreparedStatement preparedStatement;
private FormBD formulaire;
public CheckValidityWorker(FormBD fbd)
{
this.formulaire = fbd;
this.connexion = DriverManager.getConnection("jdbc:mysql://IP_BASE_DE_DONNEES:PORT_BASE_DE_DONNEES/BASE","login", "passe");
}
@Override
public Boolean doInBackground()
{
Boolean result = Boolean.FALSE;
try
{
this.preparedStatement = connection.prepareStatement(sql);
this.preparedStatement.setStringl(1, this.formulaire.getLogin() );
this.preparedStatement.setStringl(2, this.formulaire.getPassword() );
if(this.preparedStatement.execute())
{
ResultSet rs = statement.getResultSet();
if(rs.next())
if( rs.getInt("EXIST") == 1 )
result = Boolean.TRUE;
}
rs.close();
this.preparedStatement.close();
} catch(Excepion e)
{
e.printStackTrace();
}
return result;
}
@Override
protected void done()
{
try
{
/*
* À la fin du traitement, récupération de l'état de connection
*/
if( this.get() )
{
JOptionPane.showMessageDialog(this.formulaire, "Anso Vous etes connecté","Succès d'authenication");
this.formulaire.setVisible(false);
MainFrame.getInstance();
} else
{
JOptionPane.showMessageDialog(this.formulaire,"Echec connexion","Erreur d'authenication",JOptionPane.ERROR_MESSAGE);
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
La fenêtre principal de ton application (après identification):
public class MainFrame extends JFrame
{
private static MainFrame instance;
public static MainFrame getInstance()
{
if(instance == null)
instance = new MainFrame();
return instance;
}
private MainFrame()
{
// ... Creer Frame et JPanel, puis setContentPane() et setVisibile
// etc.
}
}
Un truc du genre devrait avoir le comportement que tu recherches ...
Bon courage.
Bonjour je reviens de nouveau vers vous,je n’arrive pas à comprendre une partie du code que vous m’avez proposé : c’est celui là :
Je crois, enfin, c’est que je me dis, que c’est cette action qui est implémentée dans cette classe là:
Ou dois-je de nouveau l’implémentée ?l’idée est qu’après saisie des différents champs « code d’accès et mot de passe » un clique sur le bouton connexion, dans le cas ou l’authentification s’est bien passé doit ouvrir un formulaire menu, autrement un message d’erreur est affiché et j’ai l’impression que s’est ce qui est fait dans la classe.merci
public void actionPerformed(ActionEvent e) { // action du bouton OK pour la connection (new CheckValidityWorker(this)).execute(); }
Je crois, enfin, c’est que je me dis, que c’est cette action qui est implémentée dans cette classe là:
class CheckValidityWorker extends SwingWorker<Boolean, Object> { private static final String sql = "SELECT count(*) AS EXIST FORM Operateur WHERE CodeAcces_Opt = ? AND MotPasse_Opt = ?"; private Connection connexion; private PreparedStatement preparedStatement; private FormBD formulaire; public CheckValidityWorker(FormBD fbd) { this.formulaire = fbd; this.connexion = DriverManager.getConnection("jdbc:mysql://IP_BASE_DE_DONNEES:PORT_BASE_DE_DONNEES/BASE","login", "passe" ); }
Ou dois-je de nouveau l’implémentée ?l’idée est qu’après saisie des différents champs « code d’accès et mot de passe » un clique sur le bouton connexion, dans le cas ou l’authentification s’est bien passé doit ouvrir un formulaire menu, autrement un message d’erreur est affiché et j’ai l’impression que s’est ce qui est fait dans la classe.merci
Bonsoir,
Si tu ne connais pas le "SwingWorker" je te conseil de faire quelques recherches sur Google... Il s'agit d'un outil très utile (en rapport avec tout ce qui est Thread, EDT, etc.)
Donc le "execute" de l'action démarre un thread qui fait les action du "doInBackground".
Ce dernier, une foi terminé, retourne un objet (dont le type est défini dans la généricité, ici Boolean).
Une fois ce thread terminé, la fonction "done" est envoyé au Thread graphique EDT. C'est lui qui va afficher ce que tu veux.
Il récupère le résultat de la fonction "doInBackground" grâce à la fonction "get".
Normalement, avec un peu de recherche sur google, tu comprendras l'intérêt du SwingWorker et le pourquoi de son utilisation.
Si tu ne connais pas le "SwingWorker" je te conseil de faire quelques recherches sur Google... Il s'agit d'un outil très utile (en rapport avec tout ce qui est Thread, EDT, etc.)
Donc le "execute" de l'action démarre un thread qui fait les action du "doInBackground".
Ce dernier, une foi terminé, retourne un objet (dont le type est défini dans la généricité, ici Boolean).
Une fois ce thread terminé, la fonction "done" est envoyé au Thread graphique EDT. C'est lui qui va afficher ce que tu veux.
Il récupère le résultat de la fonction "doInBackground" grâce à la fonction "get".
Normalement, avec un peu de recherche sur google, tu comprendras l'intérêt du SwingWorker et le pourquoi de son utilisation.
Bonjour à tous je n’arrive pas à afficher la valeur issue d’une table dans un combobox,en ce qui concerne lesjtexfields aucun souci,voici mon code :
String rq = "select * from Compte";
rs = st.executeQuery(rq);
//while (rs.next()) {
if (evt.getSource() == cmdpremier) {
rs.first();
nom.setText(rs.getString("NomClt")) ;
prenom.setText(rs.getString("PrenomClt"));
solde.setText(rs.getString("SoldeCpt"));
typcpte.setSelectedItem("TypeCpt");
typpiece.setSelectedItem(this); //typpiece correspond au nom du JComboBox
numerocpte.setText(rs.getString("NumCpte"));
numpiece.setText(rs.getString("NumPiece"));
jour.setSelectedItem((DatPiece)); // idem pour jour
mois.setSelectedItem(this); //ainsi que mois
annee.setSelectedItem(this); // annee également
datouv.setText(rs.getString("datouv"));
en remplaçant la clause this par le nom de la colonne le système dit ne pas le connaitre.
String rq = "select * from Compte";
rs = st.executeQuery(rq);
//while (rs.next()) {
if (evt.getSource() == cmdpremier) {
rs.first();
nom.setText(rs.getString("NomClt")) ;
prenom.setText(rs.getString("PrenomClt"));
solde.setText(rs.getString("SoldeCpt"));
typcpte.setSelectedItem("TypeCpt");
typpiece.setSelectedItem(this); //typpiece correspond au nom du JComboBox
numerocpte.setText(rs.getString("NumCpte"));
numpiece.setText(rs.getString("NumPiece"));
jour.setSelectedItem((DatPiece)); // idem pour jour
mois.setSelectedItem(this); //ainsi que mois
annee.setSelectedItem(this); // annee également
datouv.setText(rs.getString("datouv"));
en remplaçant la clause this par le nom de la colonne le système dit ne pas le connaitre.
How to Use Combo boxes < à lire !
Si il ne trouve pas le nom que tu spécifies, cela signifie qu'il n'est pas dans le model du ComboBox !
Vérifies ton initialisation de "typpiece" ! Si tu l'instancies (new) avec un tableau de String, vérifies que tu l'écris bien de la même façon partout ...
Si il ne trouve pas le nom que tu spécifies, cela signifie qu'il n'est pas dans le model du ComboBox !
Vérifies ton initialisation de "typpiece" ! Si tu l'instancies (new) avec un tableau de String, vérifies que tu l'écris bien de la même façon partout ...
j'ai regarder dans le lien que vous m'avez donné mais j'ai toujours le meme probleme,
soit datouv le name de mon Jcombobox
DatOuv le nom de la colonne de la table
logiquement quand je fais:
datouv.setText(rs.getString("DatOuv" )); je doit avoir la valeur dans le JComboBox n'est ce pas?mais c'est pas le cas.ou je m'y prends mal?
soit datouv le name de mon Jcombobox
DatOuv le nom de la colonne de la table
logiquement quand je fais:
datouv.setText(rs.getString("DatOuv" )); je doit avoir la valeur dans le JComboBox n'est ce pas?mais c'est pas le cas.ou je m'y prends mal?
bonjour,mon souci d'affichage de données dans mon JCombobox persiste ,quand je fais [datouv.addItem( rs.getString("DatOuv" ) );]il ajoute une valeur dans mon JComboX,ce n'est pas en fait ce que je veux,j'ai sauvegarder des données a travers un formulaire dans une de mes tables,ce formulaire en question comporte des JcomboBox que l'utilisateur déroule et choisi une valeur qui sera enregistrée dans la table,maintenant pour l'affichage,en fait une consultation des enregistrements je souhaiterai non pas ajouter cette valeur choisie par l'utilisateur au JcomboBox,mais afficher la valeur qu'il à choisi lors de la sauvegarde,que cette valeur pour cet enregistrement soit affichée en fait dans le jcombobox.je ne sais pas si je me fais comprendre?je faisais datouv.setSelectedItem((DatOuv));mais je constatait que c'etait la valeur par defaut du Jcombobox qui restait.
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumMysql ajouter un champ a une table
- ForumAjouter un champ table access vba
- ForumSql creation du champ dans la table
- ForumFormate un champ dans table access
- ForumAjout d'un champ a une table
- ForumAjouter un champ dans une table
- ForumSupprimer un champ table access vba
- ForumCopier un champ dans une autre table
- ForumChanger valeur champ table sql
- ForumAjouter un champ a une table oracle
- Voir plus