[JSP/MySQL] Gegevenstypen komen niet overeen in criteriumexp

Pagina: 1
Acties:

  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ taglib uri="http://jakarta.apache.org/taglibs/dbtags" prefix="sql" %>

<!-- open a database connection -->
*onbelangrijk*

<%

    String id= request.getParameter("id");
    String firstName= request.getParameter("firstName");
    String lastName= request.getParameter("lastName");
    String address= request.getParameter("address");
    String zip= request.getParameter("zip");
    String place= request.getParameter("place");
    String phone= request.getParameter("phone");
    String date= request.getParameter("date");
    
    
    StringBuffer queryString = new StringBuffer();
    
    if ( id == null ) {
        
*onbelangrijk*
    }
    
    else {
    
        queryString.append("update adresboek set ");
        queryString.append("voornaam='" + firstName + "', ");
        queryString.append("Achternaam='" + lastName + "', ");
        queryString.append("Adres='" + address + "', ");
        queryString.append("Postcode='" + zip + "', ");
        queryString.append("Plaats='" + place + "', ");
        queryString.append("Telefoon='" + phone + "', ");
        queryString.append("Geboren='" + date + "' ");
        queryString.append("where nummer=' + id + ' ");
    }
    
%>


De bedoeling is een adresboek, waarin contacten kunnen worden toegevoegd en bewerkt. Toevoegen werkt, bewerken werkt wanneer er een statisch ID wordt meegegeven, zodra het ID dynamisch wordt meegegeven gaat het fout.De foutmelding in de topictitel verschijnt dan keer op keer.

ID is een automatisch oplopend getal wat vanuit een Access-database wordt meegegeven. Persoonlijk denk ik dat de ID die wordt aangeroepen wordt weggeschreven als string, en vervolgens wordt vergeleken met de ID in de database, die opgeslagen is als integer. Hoe is dit op te lossen? Ik kom er echt niet uit :'(

[ Voor 26% gewijzigd door the_scientist op 28-04-2007 03:02 ]


  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Mij lijkt het toekennen van een id de taak van de database en niet van de applicatie. Dus begin eerst eens met auto_incrediment zou ik zeggen. Denk eerder dat er nu bijvoorbeeld een integer wordt verwacht, maar omdat je 'niets' mee geeft en JSP zo vrij is om aan te nemen dat het dan maar om een lege string gaat de database met de spreekwoordelijke appels en peren zit.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Volgens mij praat je nu over een insert-query in plaats van een update-query, waar in dit geval het probleem zit ;)

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 30-11 12:59

LauPro

Prof Mierenneuke®

Daar gaat hetzelfde voor op toch? Je checkt of het id niet null is maar voor het zelfde geld is hij wel empty...

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Die check dient er alleen voor om te kijken of het gaat om een nieuwe record, of om een update. Wanneer je een nieuwe record aanmaakt geef je (uiteraard) zelf geen ID. Hij ziet dat ID leeg is, en begrijpt dat het om een insert gaat. Bij het edit-script wordt er wel een ID meegegeven in de URL waardoor de update-query wordt uitgevoerd.

  • xos
  • Registratie: Januari 2002
  • Laatst online: 25-11 17:08

xos

Als id een nummer is, waarom zet je er dan single quotes omheen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Geen quotes rond numerieke gegevens zetten; en veel belangrijker: parametrized queries gebruiken: geen gedoe meer met al dan niet quotes gebruiken, geen probleem meer met datums, en geen gevaar voor sql injection.
ongelooflijk hoeveel keer ik dit hier al moeten zeggen heb. :P

https://fgheysels.github.io/


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

De code is fout, je geeft de ID letterlijk mee ipv als variabele ;)

Had je de highlighter (of een fatsoenlijke IDE) gebruikt, dan was dit je direct opgevallen:
Java:
1
2
3
4
5
6
7
8
9
        queryString.append("update adresboek set ");
        queryString.append("voornaam='" + firstName + "', ");
        queryString.append("Achternaam='" + lastName + "', ");
        queryString.append("Adres='" + address + "', ");
        queryString.append("Postcode='" + zip + "', ");
        queryString.append("Plaats='" + place + "', ");
        queryString.append("Telefoon='" + phone + "', ");
        queryString.append("Geboren='" + date + "' ");
        queryString.append("where nummer=' + id + ' ");
Vervang bij de laatste regel de singlequotes door doublequotes, dan moet het wel werken. Overigens raad ik je aan om voor dit soort zaken PreparedStatement te gebruiken. Anders riskeer je nog SQL injecties.

[ Voor 11% gewijzigd door BalusC op 28-04-2007 09:23 ]


  • the_scientist
  • Registratie: November 2004
  • Laatst online: 15-11-2023
Argh wat stom |:(

Thanks, alles werkt!
Pagina: 1