2014-02-09 4 views
0

У меня есть база данных MySQL, где у меня есть идентификатор пользователя и пароль. Каждое из них имеет значение «mads». У меня есть некоторые проблемы, с которыми я боролся несколько дней, потому что я так долго не программировал. У меня есть страница JSP, где у меня есть моя форма и сервлет, который подключается к базе данных MySQL. Когда я вставляю mads в userid и password, я всегда получаю сообщение «Вы недопустимы». Это означает, что он доцент дает мне ответ «Пользователь действителен», как я бы хотел. Я бы не хотел создавать пользователя, я просто хотел бы проверить, существует ли пользователь в базе данных. Мой JSP и код сервлета здесь: Я надеюсь, что кто-то может мне помочь, потому что я действительно не знаю, что не так.return, если пользователь существует в базе данных

С наилучшими пожеланиями Мадс

<%@ page language="java" contentType="text/html; charset=US-ASCII" 
    pageEncoding="US-ASCII"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> 
<title>Validation</title> 
<style type="text/css"> 
/* border-radius er rundt hjørner på input..*/ 
input[type=text] {padding:5px; border:2px solid #ccc; webkit-border-radius: 5px; border-radius:5px;} 
input[type=text]:focus{border-color:yellow;} 
input[type=password] {padding:5px; border:2px solid #ccc; webkit-border-radius: 5px; border-radius:5px;} 
input[type=password]:focus{border-color:yellow;} 
input[type=submit] {padding: 5px 15px; background:#ccc; border:0 none; cursor:pointer; webkit-border-radius:5px; border-radius: 5px;} 
</style> 
</head> 
<body> 
    <br><br><br> 
     <center> 
      <h1>Please enter user name and password</h1> 

      <form name="frm" action="LoginValidation" method="post"> 
       <input type="text" name="user"> 
       <input type ="password" name="pass"> 
       <input type="submit" value="Check" class="submit"> 
      </form> 
     </center> 
</body> 

И мой Servlet:

import java.io.*; 
//import java.util.*; 
import java.sql.*; 

import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.*; 
import javax.servlet.*; 

@WebServlet(urlPatterns = {"/LoginValidation"}) 
public class Validation extends HttpServlet { 

    private static final long serialVersionUID = 1L; 
    private ServletConfig config; 

    public void init (ServletConfig config) 
    throws ServletException{ 
     this.config = config; 
    } 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException,IOException { 


     PrintWriter out = response.getWriter(); 
     String connectionURL = "jdbc:mysql://localhost/dblogin"; 
     Connection connection = null; 
     ResultSet rs; 
     String userid = request.getParameter("userid"); 
     String password =request.getParameter("password"); 
     ////and your select statement 

     try{ 
      String sql = "SELECT * FROM login WHERE userid = ? AND password = ?"; 
      Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(connectionURL, "root", ""); 

      PreparedStatement preparedStatement = connection.prepareStatement(sql); 
      preparedStatement.setString(1, userid); 
      preparedStatement.setString(2, password); 

      Statement s = connection.createStatement(); 
      rs =preparedStatement.executeQuery(); 

     ////if there are next ib rs so you have a user by this id and password 
      if(rs.next()) { 
       out.println("The user is valid"); 
      } 
      else { 
       out.println("You are not valid"); 
      } 

     }catch(Exception e) { 
      System.out.println("The exception is" + e); 
     } 
    } 
} 
+2

Вы SQL плохо, вы, вероятно, нужно 'SELECT * FROM WHERE входа Идентификатор_пользователя =? И пароль =? ' –

+2

Также, как вы можете проверить ввод пользователя с помощью' String userid = new String (""); '(то же самое для пароля)? –

+0

Привет RC. Спасибо за быстрый ответ. Хм, это хороший вопрос ... поэтому код недействителен :? 'String userid = new String (" "); String password = new String (""); ' Мне нужно найти способ проверки входных данных? – McDuck4

ответ

1

Возможная ошибка:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException { 
     PrintWriter out = response.getWriter(); 
     String connectionURL = "jdbc:mysql://localhost/dblogin"; 
     Connection connection = null; 
     PreparedStatement preparedStatement = null; 
     ResultSet rs = null; 
     String userid = request.getParameter("user"); 
     String password = request.getParameter("password"); 
     response.setContentType("text/html"); 

     try { 
      // Load the database driver 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(connectionURL, "root", ""); 
      //Add the data into the database 
      String sql = "SELECT * FROM login WHERE userid = ? AND password = ?"; 

      preparedStatement = connection.prepareStatement(sql); 
      preparedStatement.setString(1, userid); 
      preparedStatement.setString(2, password); 

      rs = preparedStatement.getResultSet(); 

      if(rs.next()) { 
       // redirect or print but not both... 
       out.println("The user is valid"); 
       // response.sendRedirect("index_true.jsp"); 
      } else { 
       out.println("You are not valid"); 
      } 
     } catch(Exception e) { 
      System.out.println("Exception is: " + e); 
     } finally { 
      // TODO: check for nullity 
      rs.close(); 
      preparedStatement.close(); 
      connection.close(); 
     } 
    } 

Исправлено:

  • Использование параметра запроса для выборки записей из БД
  • выполнить соответствующее заявление
  • ...

(там еще может быть некоторые проблемы, это не тестировалось)

0

У вас есть пустая строка для userid и password, и вы делаете запрос, используя эти значения, так что не будет возвращать ничего

поэтому вам нужно сначала взять userid и password от пользователя, а затем сделать запрос, используя эти значения, и если есть результат, поэтому у вас есть действительный пользователь

String userid = request.getParameter("userid"); 
String password =request.getParameter("password"); 
////and your select statment 
String sql = "SELECT * FROM login WHERE userid = ? AND password = ?"; 
PreparedStatement preparedStatement = connection.prepareStatement(sql); 
preparedStatement.setString(1, userid); 
preparedStatement.setString(2, password); 

Statement s = connection.createStatement(); 
rs =preparedStatement.executeQuery(); 

////if there are next ib rs so you have a user by this id and password 
if(rs.next()) { 
    out.println("The user is valid"); 
} 
else { 
    out.println("You are not valid"); 
} 
+0

ОК, сначала попробуйте удалить другие комментарии, потому что это смутило меня, затем попытайтесь напечатать идентификатор пользователя и пароль в методе doPost, а затем скажите мне –

+0

и, очевидно, что вы получите нуль, потому что вы пишете 'userid' в request.getparametar , и в jsp вы назвали его 'name':' ', поэтому сделайте его userid, а также с паролем –

+0

Я удалил комментарии сейчас :-) Если я запустил java код класса теперь я получаю сообщение об ошибке: HTTP-статус 405 - HTTP-метод GET не поддерживается этим URL-адресом Тип Сообщение о состоянии сообщение HTTP-метод GET не поддерживается этим URL-адресом описание Указанный HTTP-метод не разрешен для запрашиваемого ресурса , И мой сайт jsp: «Вы не верны» – McDuck4

0

В форме имя параметра пользователя, но в сервлет вы используете getParameter («UserId»)

Отладка кода сервлета для проверки полученных параметров может быть полезна в этом случае.

принять Также в счете предыдущего комментарии на правильном синтаксис выбора и что вы передаете пустые строки параметров запроса, и вы должны использовать запрос Params и удалить проверку результата, так как он дублирует с самим запросом ..

0

Ваш запрос не возвращает результат. Что вам нужно сделать, так это установить userId и пароль для значений, отправляемых по запросу.

userid = request.getParameter("userid"); 
password = request.getParameter("password"); 

И когда вы запускаете запрос, вам не понадобится цикл, если ваши имена пользователей уникальны (они должны быть).

0

Это правильный ответ:

<% @ страница язык = "Java" CONTENTTYPE = "текст/html; Charset = US-ASCII" pageEncoding = "US-ASCII" %> Подтверждение /* border-radius er rundt hjørner på ввод .. */ ввод [type = текст] {обивка: 5px; border: 2px solid #ccc; webkit-border-radius: 5px; border-radius: 5px;} вход [тип = текст]: focus {border-color: yellow;} вход [type = password] {padding: 5px; border: 2px solid #ccc; webkit-border-radius: 5px; border-radius: 5px;} input [type = password]: focus {border-color: yellow;} input [type = submit] {padding: 5px 15px; фон: #ccc; граница: 0 нет; курсор: указатель; WebKit-границы радиус: 5px; граница радиуса: 5px;}


Пожалуйста, введите имя пользователя и пароль запрос

  <form name="frm" action="LoginValidation" method="post"> 
       <input type="text" name="userid"> 
       <input type ="password" name="password"> 
       <input type="submit" value="Check" class="submit"> 
      </form> 
     </center> 
</body> 

package jsp; 

import java.io.*; 
import java.sql.*; 

import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.*; 
import javax.servlet.*; 

@WebServlet(urlPatterns = {"/LoginValidation"}) 
public class Validation extends HttpServlet { 

    private static final long serialVersionUID = 1L; 

    public void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException,IOException { 

     PrintWriter out = response.getWriter(); 
     String connectionURL = "jdbc:mysql://localhost/dblogin"; 
     Connection connection = null; 
     PreparedStatement preparedStatement = null; 
     ResultSet rs = null; 
     String userid = request.getParameter("userid"); 
     String password =request.getParameter("password"); 
     response.setContentType("text/html"); 


     try{ 
      Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection(connectionURL, "root", ""); 
      String sql = "SELECT * FROM login WHERE userid = ? AND password = ?"; 

      preparedStatement = connection.prepareStatement(sql); 
      preparedStatement.setString(1, userid); 
      preparedStatement.setString(2, password); 

      //Statement s = connection.createStatement(); 
      rs =preparedStatement.executeQuery(); 

      if(rs.next()) { 
       out.println("The user is valid"); 
      } 
      else { 
       out.println("You are not valid"); 
      } 

     }catch(Exception e) { 
      System.out.println("The exception is" + e); 

     } 

    } 
} 
Смежные вопросы