大家帮忙看看,这段jsp代码哪里有问题,到输出id,id1,password,password1都正常,但就是不执行if语句,直接执行了后面的登录失败的语句
String id1="";
  String password1="";
  String id=request.getParameter("id");
  session.setAttribute("username","id");
  id=new String(id.getBytes("ISO8859-1"),"gb2312");
  String password=request.getParameter("password");
  password=new String(password.getBytes("ISO8859-1"),"gb2312");
  ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'");
  while(rs.next()){
  id1=rs.getString("id");
  password1=rs.getString("password");
  out.println(id1);
  out.println(password1);
  out.println(id);
  out.println(password);
  if(id1.equals(id)&&password1.equals(password)){
  %>
  <script>
  alert("恭喜你,登录成功!");
  window.location.href='index.jsp';
  </script>
 <% }
  }
  %>
  <script>
  alert("用户名或密码错误,请重新输入!");
  window.location.href='index.jsp';
  </script>
   

解决方案 »

  1.   


    ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'");
      while(rs.next()){
      id1=rs.getString("id");
      password1=rs.getString("password");你把查询sql改成:
    select id, password from customer where id='"+id+"';你也可以在打印下,id1 and  password1.看看取出来的值是多少,我估计是""..所以if的时候为false了,走到else中,所以,失败...
      

  2.   

    看花了,lz先把 out 和if语句放到while循环外面,再加上else
      

  3.   

    改造下你的代码,你就知道原因了!如下:String id1="";
      String password1="";
      String id=request.getParameter("id");
      session.setAttribute("username","id");
      id=new String(id.getBytes("ISO8859-1"),"gb2312");
      String password=request.getParameter("password");
      password=new String(password.getBytes("ISO8859-1"),"gb2312");
      ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'");
      while(rs.next()){
      id1=rs.getString("id");
      password1=rs.getString("password");
      out.println(id1);
      out.println(password1);
      out.println(id);
      out.println(password);
      if(id1.equals(id)&&password1.equals(password)){
        out.println("<script>");
        out.println("alert('恭喜你,登录成功!');");
        out.println("window.location.href='index.jsp';");
        out.println("</script>");
      }
     }
     out.println("<script>");
     out.println("alert('用户名或密码错误,请重新输入!');");
     out.println("window.location.href='index.jsp';");
     out.println("</script>");
    %>
      

  4.   

    java语句里面嵌套javaScript...OMG,这样写能执行么
      

  5.   

    楼主你有没有打印id1和password1呢? 结果是什么?
      

  6.   

    #7楼的哥们,你不知道我学过servlet吧! 嘎嘎。
      

  7.   

    楼主  你的括号错了吧, 还有这个 session.setAttribute("username","id");
    将字符串"id",放到session中,也不对吧
      

  8.   

    如果你这里
    out.println(id1);
      out.println(password1);
      out.println(id);
      out.println(password);
    出来的值符合判断标准的话,他是会进if里面的
    但是。if完后还是会走下面的“alert('用户名或密码错误,请重新输入!'”
    你应该把这一块放在else里面
      

  9.   

    String id1="";
      String password1="";
      String id=request.getParameter("id");
      id=new String(id.getBytes("ISO8859-1"),"gb2312");
      session.setAttribute("username","id");
      String password=request.getParameter("password");
      password=new String(password.getBytes("ISO8859-1"),"gb2312");
      ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'");
      while(rs.next()){
      id1=rs.getString("id");
      password1=rs.getString("password");
      out.println(id1);
      out.println(password1);
      out.println(id);
      out.println(password);
      }
      if(id1.equals(id)&&password1.equals(password)){
      %>
      <script>
      alert("恭喜你,登录成功!");
      window.location.href='index.jsp';
      </script>
     <% }  %>
      <script>
      alert("用户名或密码错误,请重新输入!");
      window.location.href='index.jsp';
      </script>
    试试这个
      

  10.   

    什么意思啊?out和if的内容包括while的结果,怎么能放到外面呢?
      

  11.   

    String id1="";
      String password1="";
      String id=request.getParameter("id");
      id=new String(id.getBytes("ISO8859-1"),"gb2312");
      session.setAttribute("username","id");
      String password=request.getParameter("password");
      password=new String(password.getBytes("ISO8859-1"),"gb2312");
      ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'");
      while(rs.next()){
      id1=rs.getString("id");
      password1=rs.getString("password");
      out.println(id1);
      out.println(password1);
      out.println(id);
      out.println(password);
      }
      if(id1.equals(id)&&password1.equals(password)){
      %>
      <script>
      alert("恭喜你,登录成功!");
      window.location.href='index.jsp';
      </script>
     <% }else{  %>
      <script>
      alert("用户名或密码错误,请重新输入!");
      window.location.href='index.jsp';
      </script>
      <%
      }
      %>上边那个错了 忘了else 了  
      

  12.   

    这个session是为了后面用的,应该不影响,你说括号错了,是那个括号错了?
      

  13.   

    哎,我的代码是把你的修改的。不是正确代码,是让你看明白为啥出错,你没看明白啊。
    你无论上面判断是对是错。页面都会输出: 
    <script>
      alert("用户名或密码错误,请重新输入!");
      window.location.href='index.jsp';
    </script>
    因为这段代码在你判断之外。
    就相当于:
    if(1==1){
       out.println("success");
    }
    out.println("error");
    这样的判断。可能输出success,但永远都会输出:error 。
    楼主看明白了。改改就OK了。
      

  14.   

    一开始是在else里面,也不行,我现在把它放在外面的意思是如果数据库里没有这个数据也执行这句话
      

  15.   

    session.setAttribute("username","id");
    我觉得你想是把id放到session中,而不是"id"吧。
    括号是我觉得是while循环的括号错了。  各人认为。
      

  16.   

    行,我改改看,不过我的这个语句一开始的确是在else里的,但也不行啊
      

  17.   


    <%
    if(id1.equals(id)&&password1.equals(password))
    {
    %>
      <script>
      alert("恭喜你,登录成功!");
      window.location.href='index.jsp';
      </script>
    <%
    }else{
    %>
      <script>
      alert("用户名或密码错误,请重新输入!");
      window.location.href='index.jsp';
      </script>
    <%
    }
    %>
      

  18.   

    if(id1.equals(id)&&password1.equals(password)){
      %>
      <script>
      alert("恭喜你,登录成功!");
      window.location.href='index.jsp';
      </script>
     <% 
    //在此处加个return试下
    return;
    }
      

  19.   

    建议改成这样试试
     <%
      request.setCharacterEncoding("GBK");
      String id=request.getParameter("id");
      session.setAttribute("username","id");
      String password=request.getParameter("password");
      ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'");
      for(int i=0;rs.next();i++){
    String id1=rs.getString("id");
    String password1=rs.getString("password");
    // 主要无论是表的用户名和用户密码或者传过来的参数的用户名和密码都不应该为空,因为这是个人的关键信息
    if(id.equals(id1) && password.equals(password1)){
      %>
      <script>
      alert("恭喜你,登录成功!");
      window.location.href='index.jsp';
      </script>
     <%
       break;
      }}%>
      <script>
      alert("用户名或密码错误,请重新输入!");
      window.location.href='index.jsp';
      </script>
      

  20.   

    貌似lz把if放在while里面了,而且没有else
      

  21.   

    好几天没看了,没能及时回复你,是数据库中存在空格,加了一个trim函数
      

  22.   

    if(id.equals(id1) && password.equals(password1))
      

  23.   

      楼主这样行不行啊?你试一下,个人觉得登录不是只需比较密码和用户名就行了啊!
    <%
      String id1="";
      String password1="";
      String id=request.getParameter("id");
      id=new String(id.getBytes("ISO8859-1"),"gb2312");
      session.setAttribute("username","id");
      String password=request.getParameter("password");
      password=new String(password.getBytes("ISO8859-1"),"gb2312");
      ResultSet rs=jdbcbean.executeQuery("select * from customer where id='"+id+"'and password='"+password+"'");
      if(rs.next()){
    %>
    <script>
      alert("恭喜你,登录成功!");
      window.location.href='index.jsp';
      </script>
     <% 
    }
    else
    {
    %>
    <script>
      alert("用户名或密码错误,请重新输入!");
      window.location.href='index.jsp';
     </script>
    <%
    }
    %>