[PHP] vraag over variabele in query

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ok ik ben dus een beginneling in php en zit met een sql probleem wanneer ik de query zo uitvoer:

$sql = 'SELECT klantennr,achternaam FROM klanten WHERE klantennr=5 AND achternaam=\'Test\'';

werkt de query prima

wanneer ik deze variabelen wil invoeren op de plaats van die 5 en \'test\':

$_POST[klantennr]
$_POST[achternaam]

en ik geef in een formuliertje dezelfde waarden mee als in de vaste staat (klantennr=5 en achternaam=test) gaat het fout, of ik krijg foutmeldingen of hij doet het niet goed ( die query word gebruikt voor een if else scriptje), hij controleert of 2 waardes overeen komen en als ze overeen komen zegt hij bijvoorbeeld het is prima en als de waardes niet overeen komen dan zegt hij dat het niet klopt.

ik weet zeker dat de data die ik verstuur in dat formuliertje overkomen als ik ze van te voren even echo staan ze er wel. dus kan iemand mij vertellen hoe ik die variabelen goed verwerk in die query? ik word er namelijk een beetje gek van.

Alvast bedankt!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Komt omdat je enkele aanhalingstekens gebruikt.. Daarbij worden de vars letterlijk overgenomen ipv de waarde die deze variabele heeft..

Bij het gebruik van dubbele aanhalingstekens (") heb je dat niet :)

Overigens gebruik ik altijd "blabla where blabla".$var." = blabla"; :)

Verwijderd

Topicstarter
het werkt nogsteeds niet echt, ik post m'n hele script wel even, zoals ik al zij ben ik beginner dus weet niet of alles is zoals het zijn moet:

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
<?
$mysql_user = ""; 
$mysql_pass = ""; 
$mysql_host = "localhost"; 
$mysql_dbn = "hwdbase";

if (!@mysql_select_db($mysql_dbn, @mysql_connect($mysql_host, $mysql_user, $mysql_pass)))   
{   
     echo "database connectie mislukt!";   
     exit();   
}   

$sql = "SELECT klantennr,achternaam FROM klanten WHERE klantennr = '$_POST[klantennr]' AND achternaam=\'Test\'"; 

$res = mysql_query($sql);

if (mysql_num_rows($res) >= 1)  
{  
   while ($row = mysql_fetch_array($res))  
   {  
echo "Klant bestaat";  
   }  
}  
else  
{  
   echo "Klant bestaat niet";  
}  
?>

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Probeer het eens zo:
PHP:
1
$sql = "SELECT klantennr,achternaam FROM klanten WHERE klantennr = '". $_POST[klantennr] ."' AND achternaam= '". $_POST['achternaam'] ."';"

[ Voor 24% gewijzigd door Morax op 19-02-2004 23:17 ]

What do you mean I have no life? I am a gamer, I got millions!


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Je kunt beter even je code tussen [ php ] en [ /php ] tags zetten.

En je desbetreffende code moet zo:

PHP:
1
$sql = 'SELECT klantennr,achternaam FROM klanten WHERE klantennr = '. $_POST['klantennr'] .' AND achternaam=\''. $_POST['achternaam'] .'\'';

[ Voor 28% gewijzigd door Sybr_E-N op 19-02-2004 23:15 ]


  • Rac-On
  • Registratie: November 2003
  • Niet online
even een tip in dit soort gevallen:

zet een
PHP:
1
 echo
voor je toewijzing. Dan krijg je op je scherm te zien wat de query is die wordt uitgevoerd. Die kan je vervolgens ook in een sql terminal plakken, om te kijken oftie correct is en de uitkomst geeft die je verwacht..

doet niet aan icons, usertitels of signatures


  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Sybr_E-N schreef op 19 februari 2004 @ 23:13:
Je kunt beter even je code tussen [ php ] en [ /php ] tags zetten.

En je desbetreffende code moet zo:

PHP:
1
$sql = 'SELECT klantennr,achternaam FROM klanten WHERE klantennr = '. $_POST['klantennr'] .' AND achternaam=\''. $_POST['achternaam'] .'\'';
Dat van jouw gaat niet werken, je moet haakjes hebben om de string in PHP te onderbreken voor een variabele, en MySQL wil de zoekwaardes ook in haakjes hebben, dus met 1 haakje gaat het sowieso niet werken. Met de verdie in mijn ge-update post zou het moeten werken :)
rac-on schreef op 19 februari 2004 @ 23:17:
even een tip in dit soort gevallen:

zet een
PHP:
1
 echo
voor je toewijzing. Dan krijg je op je scherm te zien wat de query is die wordt uitgevoerd. Die kan je vervolgens ook in een sql terminal plakken, om te kijken oftie correct is en de uitkomst geeft die je verwacht..
Daarnet poste ik het per ongeluk in plaats van dat ik het voorbeeld bekeek, terwijl ik mijn sluittag vergeten was dus stond het even in plain text ;)

[ Voor 34% gewijzigd door Morax op 19-02-2004 23:20 ]

What do you mean I have no life? I am a gamer, I got millions!


Verwijderd

Topicstarter
Morax, ik houd van je :P

PHP:
1
2
3
<?
$sql = "SELECT klantennr,achternaam FROM klanten WHERE klantennr = '". $_POST[klantennr] ."' AND achternaam= '". $_POST['achternaam'] ."';";
?>


er moest alleen nog even een ; achter de " geplaatst worden en volgens mij doet hij het nu

[ Voor 38% gewijzigd door Verwijderd op 19-02-2004 23:24 ]


  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 14:15

BrZ

Morax schreef op 19 februari 2004 @ 23:19:
[...]


Dat van jouw gaat niet werken, je moet haakjes hebben om de string in PHP te onderbreken voor een variabele, en MySQL wil de zoekwaardes ook in haakjes hebben, dus met 1 haakje gaat het sowieso niet werken. Met de verdie in mijn ge-update post zou het moeten werken :)
Die van Sybr_E-N gaat prima werken, alleen door de enkele quotes moet je wat meer escapen, waardoor het er wat onhandiger uitziet. Daarnaast hoef je alleen strings tussen quotes te zetten in een query, een klantnr lijkt mij wel een integer, waarbij er dus geen quotes nodig zijn :)

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
BrZ schreef op 19 februari 2004 @ 23:25:
[...]

Die van Sybr_E-N gaat prima werken, alleen door de enkele quotes moet je wat meer escapen, waardoor het er wat onhandiger uitziet. Daarnaast hoef je alleen strings tussen quotes te zetten in een query, een klantnr lijkt mij wel een integer, waarbij er dus geen quotes nodig zijn :)
Volgens mij niet, moet je maar kijken:
PHP:
1
'SELECT klantennr,achternaam FROM klanten WHERE klantennr = '. $_POST['klantennr'] .' AND achternaam=\''. $_POST['achternaam'] .'\'';


Bij "WHERE klantennummer = ..." staan in totaal maar 2 haakjes om de variabele toe te voegen, maar geen extra haakjes om een goeie query te krijgen. MySQL krijgt hem dan zo binnen:
PHP:
1
'SELECT klantennr,achternaam FROM klanten WHERE klantennr = 3 AND achternaam='achternaam';


Het laatste stukje is wel goed, maar het stukje bij het klantennummer werkt op deze manier dus niet :)

What do you mean I have no life? I am a gamer, I got millions!


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Het gaat wel goed grapjas :) probeer het maar eens uit, anders zou het betekenen dat ik al een hele tijd foute PHP script aan het schrijven ben.

- klantnr is een string en geen nummerieke index waarde van de array $_POST, daarom staan er ook single kwoots omheen. De inhoud van klantnr is neem ik aan wel een een integer waarde.
- kolom klantnr in de MySQL tabel hoort als je TS slim is een integer waarde te zijn en hierbij kun de single kwoots links laten liggen, terwijl de kolom achternaam van het type varchar is en daar moeten dus wel kwoots omheen.

Acties:
  • 0 Henk 'm!

  • klokop
  • Registratie: Juli 2001
  • Laatst online: 16-09 19:21

klokop

swiekie swoeng

Morax schreef op 19 februari 2004 @ 23:29:
[...]
... "WHERE klantennummer = ..." staan in totaal maar 2 haakjes om de ....
Haakjes??
Ik noem die dingen altijd 'enkele/dubbele aanhalingstekens', of desnoods in het engels 'single/double quotation marks'.

"Passing silhouettes of strange illuminated mannequins"


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Nog niemand SQL-injection genoemd?

TS, houd je rekening met grappen en grollen als $_POST['klantennr'] = '3; DROP TABLE klanten'?

Acties:
  • 0 Henk 'm!

  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20-09 00:30
Sybr_E-N schreef op 20 februari 2004 @ 10:12:
Het gaat wel goed grapjas :) probeer het maar eens uit, anders zou het betekenen dat ik al een hele tijd foute PHP script aan het schrijven ben.

- klantnr is een string en geen nummerieke index waarde van de array $_POST, daarom staan er ook single kwoots omheen. De inhoud van klantnr is neem ik aan wel een een integer waarde.
- kolom klantnr in de MySQL tabel hoort als je TS slim is een integer waarde te zijn en hierbij kun de single kwoots links laten liggen, terwijl de kolom achternaam van het type varchar is en daar moeten dus wel kwoots omheen.
Owja, stom |:(

Je hebt helemal gelijk :) Ik was dat ene detailtje even vergeten. Het werkt overigens wel tussen enkele quotes, dus doe ik dat standaard en dus dacht ik dat dat van jouw fout was.

Sorry :>
klokop schreef op 20 februari 2004 @ 10:55:
[...]


Haakjes??
Ik noem die dingen altijd 'enkele/dubbele aanhalingstekens', of desnoods in het engels 'single/double quotation marks'.
Sorry hoor, ik kon even niet op de naam komen en noemde ze voor het gemak maar even haakjes. Mijn excuses :/

What do you mean I have no life? I am a gamer, I got millions!

Pagina: 1