Avatar billede madseksperten Nybegynder
09. marts 2014 - 14:02 Der er 8 kommentarer og
1 løsning

kalder forkerte dato fra javascript i MySQL database

Hejsa

Jeg er lidt usikker på om det er i min servlet eller mit javascript den er gal med. Men har en fornemmelse af det er javascriptet? Istedet for at skrive en vild lang tekst, så har jeg lige lavet en kort video ift hvad mit problem er:

https://www.youtube.com/watch?v=maXwOJRWf28&feature=youtu.be

Jeg vælger først fra d.2014-03-03 - 2014-03-04. I min servlet lægges Day_hours og Day_minutes sammen, hvor resultatet er 15.2 timer. Det er også korrekt. Der hvor problemet så er, er at når jeg vælger fx d.2014-03-23 - 2014-03-28 får jeg også udskrevet 15.2 timer, selvom der ikke er noget i databasen i dette interval. Det vil egentligt sige at den kører alle columns igennem istedet for at køre det specifikke datainterval igennem. Derfor tror jeg det er noget i mit javascript, som ikke er korrekt. Men jeg må være ærlig at sige at jeg aner ikke hvor jeg skal starte med at kigge?

For god ordensskyld har jeg også lige ligget min servlet kode.
Håber der er nogle som kan hjælpe mig?

Med Venlig Hilsen
Mads

Javascript kode:

<form>
        <input id="startDate" />
        <input id="endDate" />
    </form>
    <div id="startresult"></div>
    <div id="endresult"></div>
    <script>
       
    $(function(){
        $("#startDate").datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function(dateText,inst){
                alert(dateText);
               
                $.ajax({
                      url: "../getHoursSQL",
                      type: "post",
                      data: JSON,
                      success: function(data){
                          alert("success");
                          $("#startresult").html(data);
                         
                      },
                      error:function(){
                          alert("failure");
                          $("#startresult").html('there is error while submit');
                      } 
                    });
            }
        });
    });

    $(function(){
            $("#endDate").datepicker({
                dateFormat: 'yy-mm-dd',
                onSelect: function(dateText,inst){
                    alert(dateText);
                 
                    $.ajax({
                          url: "../getHoursSQL",
                          type: "post",
                          data: JSON,
                          success: function(data){
                              alert("success");
                              $("#endresult").html(data);
                          },
                          error:function(){
                              alert("failure");
                              $("#endresult").html('there is error while submit');
                          } 
                        });
                }
            });
        });

</script>

Servlet kode:

package WorkPackage;

import java.io.*;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

@WebServlet("/getHoursSQL")
public class getHoursSQL extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    public void doPost(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException{

        String connectionURL = "jdbc:mysql://localhost/NekiWork";
        Connection connection=null;
                               
        try {

            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(connectionURL, "root", "");
            String sql = "SELECT *, (Day_hours + (Day_minutes / 100)) AS Allday_hours FROM Workdata";
            PreparedStatement pst = connection.prepareStatement(sql);
           
            ResultSet rs = pst.executeQuery(sql);
           
              float Allday_hours_sum = 0;
                while (rs.next()){                                     
                    Allday_hours_sum += Float.parseFloat (rs.getString("Allday_hours"));
                   
                } 
                res.setContentType("text/html;charset=UTF-8");         
                res.getWriter().print(Allday_hours_sum);   
               
            pst.close();
           
        }
        catch(ClassNotFoundException e){

            System.out.println("Couldn't load database driver: " + e.getMessage());
        }
        catch(SQLException e){
            System.out.println("SQLException caught: " + e.getMessage());
        }
        catch (Exception e){
            System.out.println(e);
        }
        finally {

            try {
                if (connection != null) connection.close();
            }
            catch (SQLException ignored){
                System.out.println(ignored);
            }
        }
    }
}
Avatar billede jakobdo Ekspert
10. marts 2014 - 10:39 #1
Som jeg ser det, så sender du stadig ikke de datoer du vælger med til din java kode bagved.
Så den beregner på "tomme" datoer.
Derfor får du samme resultat.


i din "onselect" kode, skal du sende dateText med i dit "ajax" kald.

Du har data: JSON

Prøv at ret til:

data: { start: $("#startDate").val(), end: $("#endDate").val() }
Avatar billede madseksperten Nybegynder
10. marts 2014 - 10:47 #2
ok super mange tak for det. Jeg skal stadigvæk have 2 funktioner ikke?

<script>
       
    $(function(){
        $("#startDate").datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function(dateText,inst){
                $('.selected-date').html(dateText);
               
                $.ajax({
                      url: "../getHoursSQL",
                      type: "post",
                      data: { start: $("#startDate").val(), end: $("#endDate").val() },
                      success: function(data){
                          alert("success");
                          $("#startresult").html(data);
                         
                      },
                      error:function(){
                          alert("failure");
                          $("#startresult").html('there is error while submit');
                      } 
                    });
            }
        });
    });

    $(function(){
            $("#endDate").datepicker({
                dateFormat: 'yy-mm-dd',
                onSelect: function(dateText,inst){
                    $('.selected-date').html(dateText);
                 
                    $.ajax({
                          url: "../getHoursSQL",
                          type: "post",
                          data: { start: $("#startDate").val(), end: $("#endDate").val() },
                          success: function(data){
                              alert("success");
                              $("#endresult").html(data);
                          },
                          error:function(){
                              alert("failure");
                              $("#result").html('there is error while submit');
                          } 
                        });
                }
            });
        });

</script>
Avatar billede jakobdo Ekspert
10. marts 2014 - 10:53 #3
Som jeg skrev i et tidligere spørgsmål, burde du kunne nøjes med 1 funktion.
Du vil jo først gøre noget, når begge er valgt.
Så hvis du laver en funktion, der først laver ajax kaldet, når der er datoer i både start og slut.
Så kan du nøjes med en.
Avatar billede madseksperten Nybegynder
10. marts 2014 - 10:57 #4
ahh ja det er rigtigt, prøvede det lige. Men tror jeg skal bruge to funktioner, da jeg har 2 kalendre jeg vælger datoer på. Ellers kan jeg ikke vælge en dato der.

https://www.youtube.com/watch?v=maXwOJRWf28&feature=youtu.be
Avatar billede jakobdo Ekspert
10. marts 2014 - 11:07 #5
Du skal huske på, at selvom onselect kaldes fra den ene eller den anden kalder, kan de sagtens kalde samme ajax kode og "se" datoer hos hinanden.

Prøv at test det?
I stedet for at skyde ajax af, så prøv at leg lidt med alert($("#startDate").val());
alert($("#endDate").val());
Avatar billede madseksperten Nybegynder
10. marts 2014 - 11:20 #6
Ok tak for det. Jeg vil lige prøve at lege rundt med det. Jeg venter lige med at lukke spørgsmålet her :-)
Avatar billede madseksperten Nybegynder
11. marts 2014 - 11:35 #7
Skal jeg ikke lukke spørgsmålet her, hvis du smider et svar? Det kager lidt rundt for mig med det her, og har gang i en anden tråd omhandlende lidt det samme emne. Så jeg vil oprette et nyt, og se hvad der kommer ud af det :-)

Mvh Mads
Avatar billede jakobdo Ekspert
11. marts 2014 - 11:40 #8
Du bestemmer. :o)
Avatar billede jakobdo Ekspert
11. marts 2014 - 11:59 #9
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester