Toon posts:

Extra toegevoegde Inner Join geeft probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een formulier wat data uit een mysql database haalt.
Het formulier heeft twee velden, Regio en Capaciteit.
Er wordt een regionummer ingevoerd en een getal wat de capaciteit weergeeft.

Na submitten wordt een action.php aangeroepen, waarna bepaalde adresgegevens getoond van bedrijven die voldoen aan regio en capaciteit. Althans dat is de bedoeling.

Ik heb de query zo ver dat de regio-invoer een resultaat geeft.
Nu wil ik daar graag de capaciteit invoer aantoevoegen.
Ik hoopte dit te kunnen doen mbv de extra inner join, die ik hieronder tussen streepjes == heb gezet, maar dat geeft geen resultaten weer. Iemand een idee hoe ik dit op kan lossen ?
Alvast vriendelijk bedankt !

SQL:
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
SELECT A.FormId
     , B.SubmissionId
     , B.DateSubmitted
     , B.UserIp
     , ( SELECT FieldValue 
           FROM jos_RSFORM_SUBMISSION_VALUES 
          WHERE FieldName = 'Name'
            AND SubmissionId = B.SubmissionId ) as Naam 
     , ( SELECT FieldValue 
           FROM jos_RSFORM_SUBMISSION_VALUES 
          WHERE FieldName = 'adres'
            AND SubmissionId = B.SubmissionId ) as Adres
     , ( SELECT FieldValue 
           FROM jos_RSFORM_SUBMISSION_VALUES 
          WHERE FieldName = 'telefoon'
            AND SubmissionId = B.SubmissionId ) as Telefoon 
     , ( SELECT FieldValue 
           FROM jos_RSFORM_SUBMISSION_VALUES 
          WHERE FieldName = 'email'
            AND SubmissionId = B.SubmissionId ) as Email 
  FROM jos_RSFORM_FORMS A
INNER
  JOIN jos_RSFORM_SUBMISSIONS B
    ON B.FormId = A.FormId
INNER
  JOIN jos_RSFORM_SUBMISSION_VALUES C
    ON C.SubmissionId = B.SubmissionId 
   AND C.FieldName = 'regio'
   AND C.FieldValue = '" . $_POST['Regio'] . "'

INNER
  JOIN jos_RSFORM_SUBMISSION_VALUES D
    ON D.SubmissionId = B.SubmissionId 
   AND D.FieldName = 'capaciteit'
   AND D.FieldValue = '" . $_POST['Capaciteit'] . "'  

 WHERE A.FormId = 2

[ Voor 10% gewijzigd door MueR op 19-08-2011 10:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

1. Lees je even in over SQL-injection
2. Wat geeft de query weer wanneer je deze uitvoert in phpmyadmin(een error of geen resultaat)

Acties:
  • 0 Henk 'm!

  • jip_86
  • Registratie: Juli 2004
  • Laatst online: 21-09 16:06
Is het laatste deel niet:
JOIN jos_RSFORM_SUBMISSION_VALUES C
ON C.SubmissionId = B.SubmissionId
AND C.FieldName = 'regio'
AND C.FieldValue = '" . $_POST['Regio'] . "'
INNER JOIN jos_RSFORM_SUBMISSION_VALUES D
ON D.SubmissionId = B.SubmissionId

AND D C.FieldName = 'capaciteit'
AND D C.FieldValue = '" . $_POST['Capaciteit'] . "'

Het staat op de zelfde regel als de regio join toch?

[ Voor 3% gewijzigd door jip_86 op 19-08-2011 00:50 ]


Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Naast de oh so foute SQL injection, bevat je SELECT list geen enkele kolom uit D dus is het niet gek dat er geen informatie uit D is.

BTW: Weet je zeker dat er altijd informatie uit zowel 'regio' als 'capaciteit' is? Misschien geeft een LEFT JOIN een beter resultaat

@jip_86: dat werkt natuurlijk niet als je én de 'regio' én de 'capaciteit' gegevens uit die SUBMISSION_VALUES tabel nodig hebt. Daarnaast heb je nu twee strijdige conditions. En als het gaat om één van beide dan zou C.Fieldname IN ('regio', 'capaciteit') AND C.FieldValue IN ( (SQL injection veilige vorm van $_POST['Regio'], $_POST['Capaciteit']) wel werken ipv twee stijdige conditions.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Remus
Ik gebruik dit puur om snel data te kunnen bekijken.
Het komt op een afgeschermde pagina van de site te staan die alleen voor admins benaderbaar is.

Ik weet zeker dat er altijd info staat bij zowel regio als capaciteit.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd schreef op vrijdag 19 augustus 2011 @ 08:53:
@Remus
Het komt op een afgeschermde pagina van de site te staan die alleen voor admins benaderbaar is.
Dat maakt niet uit, je hoort standaard na te denken over beveiliging. Werk met prepared statements en je bent er al, simpel. Je zal niet de eerste zijn die ergens iets vergeet of bewust niet beveiligd waarna iemand ineens je hele db leegtrekt. Nu is het een simpele pagina misschien en volgend maand zitten er duizenden accounts in van mensen die onnodig gevaar lopen.

Bottomline:altijd zorgen dat je veilig data ophaalt en insert.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Cartman
Je hebt gelijk. Als ik het doe, moet ik het goed doen. Ik heb even wat studiemateriaal bekeken en ben tot de conclusie gekomen dat het vrij eenvoudig veiliger te maken is.

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Goedzo :)
Pagina: 1