Condition "if"

Fermé
natasha82 Messages postés 55 Date d'inscription vendredi 20 mars 2015 Statut Membre Dernière intervention 9 juin 2015 - Modifié par KX le 11/04/2015 à 20:16
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 11 avril 2015 à 20:52
Bonsoir,
j'ai fait une page inscription ,est celle la est securisé c'est a dire c'est pas n'importe qui peut s'inscrire il faut que le nom de la personne existe sur la base de donnée de l'adminictrateur s'il existe en lui crée un compte si non en lui renvoie un message d'erreur, mais ma condition ne fonctionne c'est tout le monde qui passe ce qui est faut :
voici ma page jsp:
<body>
        
        
        
        
       
             
<div id="general">
  
 <div id="general">
  
  <div id="entete">
    <div id="logo">
        <br/>
         <marquee>
              <h2> Bienvenue dans L'espace Numérique De Travail de l'UMMTO </h2> 
                        
                    </marquee>
 </div>
    <div id="menu-haut">
   
      <span id="acc">   <a href="index.jsp"title=" Rotour a la page d'accueil"> Accueil </a></span>
                    <span id="ident"><a href="inscri.jsp" title="Inscrir si vous etez pas deja inscrire"> Inscription </a></span>
                    <span id="ins"><a href="authen.jsp"title=" Acceder a votre espace"> Cours </a></span>
                    <span id="cont"><a href="a propos.jsp" title=" plus d'information"> A propos  </a></span>
                    <span id="acce"> <a href="cours.jsp"  title=" cours à télécharger"> Aide</a></span>
            
    </div>
  </div> 
      
       <div id="principal">
  
     
  <div id="ins-zone">
   
 
 <form name="ins" id="ins" action="Inscri" method="POST" onSubmit="return verif()"> 
   <label id="obli">Tous les champs sont obligatoire </label>
    <fieldset  class="zone1"><legend>Formulaire d'inscription</legend>
      
     <p class="present">
      <label for="nom">Nom </label>
     </p>
     <p class="present">
      <label for="pre">Prenom</label>
     </p>
     <p class="present">
      <label for="adress">Adress </label>
     </p>
     <p class="present">
      <label for="lieu de naissance">lieu naissance </label>
     </p>
     <p class="present">
      <label for="email">email</label>
     </p>
                                        <p class="present">
      <label for="login">login</label>
     </p>
                                        <p class="present">
      <label for="mot de passe">mot de passe</label>
     </p>
 
        
    </fieldset>
    <fieldset  class="zone2">                   
     <p>
      <input name="nom" type="text"  name="nom_etu"   size="30" />
     </p>
     <p>
      <input type="text" name="prenom_etu"  size="30" />
     </p>
                                        <p>
      <input type="text" name="adres_etu"  size="15" />
     </p>
     <p>
      <input type="text" name="lieu_naiss_etu"  size="30" />
     </p>
     <p>
      <input type="text" name="email"  size="15" />
     </p>
     <p>
      <input type="text" name="login_etu"  size="30" />
     </p>
     <p>
      <input type="text" name="pswrd_etu"  size="30" />
     </p>
     
     
     
    </fieldset> 
                        <p class="submit">
            <button type="submit" value="Valider">Créer mon compte</button>
                
                        </p>
    
  </form>  
  <table border="0" /> 
                <tr>
                    
                    
                    
            
                </tr>
  
                                
                                                                                </table>



    <p class="submit">
     <form name="ins" id="ins" action="compteEtu" method="POST"/>
                                         <input type="hidden" name="action" value="créer mon compte"/>
                                        
     <button type="reset">Annuler</button>
                                        </form>
    </p>
 
 </div>
  </div>
</div>
    </body>
</html>



et ma servlet:

public class InscrEtudiantServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        
 
        String nom_etu=request.getParameter("nom_etu");
 String PRENOM_ETU= request.getParameter("prenom_etu");
    String ADRES_ETU=request.getParameter("adress_etu");
 String LIEU_NAISS_ETU= request.getParameter("lieu_naiss_etu");
  String EMAIL_ETU=request.getParameter("email_etu");
  String SEXE_ETU= request.getParameter("sexe_etu");
 
  String LOGIN_ETU= request.getParameter("login_etu");
  String PASWRD_ETU= request.getParameter("pswrd_etu");
  Etudiant e = new Etudiant();
   
        try {
            if ((!nomEtuExist(nom_etu)))
            {
                
              Compte c= new Compte(1,LOGIN_ETU,PASWRD_ETU);
              addEtud(c);
                request.getRequestDispatcher("espace_Etudiant.jsp").forward(request, response);
            }
            else{
                
                 request.getRequestDispatcher("erreur.jsp").forward(request, response);
                
                
            }     } catch (ClassNotFoundException ex) {
            Logger.getLogger(InscrEtudiantServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(InscrEtudiantServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
         
    }

     
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    
    public boolean nomEtuExist(String nom_etu) throws ClassNotFoundException, SQLException
    {
        
     Class.forName("com.mysql.jdbc.Driver");
       Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root","");
                          ResultSet rs = cn.createStatement().executeQuery("SELECT * FROM etudiant WHERE NOM_ETU ='"+nom_etu+"'");
                        return rs.next();
                       
         }    
    public void addEtud(Compte c)           
    {
        try {
                         
                         Class.forName("com.mysql.jdbc.Driver");
                         Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root","");
                         PreparedStatement pr=cn.prepareStatement("INSERT INTO compte VALUES(NULL,?,?)");
                            pr.setString(1, c.getLogin_etu());
                              pr.setString(2, c.getPswrd_etu());
                              pr.execute();
        }
                      catch (Exception ex) {   
                        ex.printStackTrace();
      
            }
 
            }}
     




pouvez vous m'aider svp Merci.

1 réponse

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
11 avril 2015 à 20:52
Bonjour,

Désolé je t'ai oublié sur l'autre discussion :-(

return rs.next();
c'est un peu faible comme condition d'acceptation.
Ça veut dire que tu acceptes l'étudiant dès que ta requêtes SQL renvoie au moins un résultat, peu importe le contenu du résultat...

Ce serait intéressant d'afficher le résultat de la requête au moment où tu acceptes l'étudiant pour voir ce qu'elle contient réellement, et voir pourquoi elle contient des résultats alors que tu t'attendrais à ce qu'il n'y en ait pas.

public static List<Map<String,Object>> readAllRows(ResultSet rs) throws SQLException
{
    List<Map<String,Object>> rows = new ArrayList<Map<String,Object>>();
    
    ResultSetMetaData meta = rs.getMetaData();
    
    while (rs.next())
    {
        Map<String,Object> row = new LinkedHashMap<String,Object>();
        
        for (int i=1; i<=meta.getColumnCount(); i++)
        {
            String column = meta.getColumnName(i);
            row.put(column, rs.getObject(column));
        }
        
        rows.add(row);
    }
    
    return rows;
}

// la méthode ne dépend d'aucun état, elle devrait donc être static
public static boolean nomEtuExist(String nom_etu) throws SQLException
{
     // inutile : doit être fait une seule fois dans tout le programme, pas à chaque requête
    // Class.forName("com.mysql.jdbc.Driver");

    // il vaudrait mieux faire des constantes ou mieux des fichiers .properties pour stocker les données de connexions
    Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bdd","root","");

    // Attention à l'injection SQL, il vaut mieux faire un PreparedStatement qu'une concaténation de String avec le paramètre dedans
    PreparedStatement stmt = cn.prepareStatement("SELECT * FROM etudiant WHERE NOM_ETU = ?");
    stmt.setString(1, nom_etu);
    ResultSet rs = stmt.executeQuery();

    // Affichage des résultats de la requête
    List<Map<String,Object>> rows = readAllRows(rs);
    System.out.println("nomEtuExist("+nom_etu+")="+rows);

    // ne pas oublier de fermer tes connexions à la base de données
    rs.close();
    stmt.close();
    cn.close();

    return !rows.isEmpty();
}
0