SQL select werkt niet
Hallo,
Ik heb een eigen php-sql scriptje gemaakt, maar hij werkt niet:
Hij blijft zeggen 'Error! Advertentie niet gevonden!' zeggen.
Ik heb een tabel aangemaakt, en dat is dus 'ads' en daar staat sa: 3G5D & key: ACRPDJ0fAj3nHVH2rhhU9v65GEkfwwgzIw7sV5X
Wie kan me vertellen wat ik fout doe, of ziet de fout?
Jasper
P.S. : Voorbeeld van de webpagina
Ik heb een eigen php-sql scriptje gemaakt, maar hij werkt niet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$key=$_GET["ai"];
$sa=$_GET["sa"];
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'");
if (mysql_num_rows($sql_zoeken) == 1) {
$sql = "UPDATE ads SET bezocht = bezocht + 1 WHERE key = '$key'";
$updaten=mysql_query($sql);
$url = "SELECT url FROM ads WHERE key = '$key'";
?>
<meta http-equiv="REFRESH" content="0;url=<?php echo $url; ?>">
Doorsturen...
<?php
}else{
echo 'Error! Advertentie niet gevonden!';
}
?>
$key=$_GET["ai"];
$sa=$_GET["sa"];
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'");
if (mysql_num_rows($sql_zoeken) == 1) {
$sql = "UPDATE ads SET bezocht = bezocht + 1 WHERE key = '$key'";
$updaten=mysql_query($sql);
$url = "SELECT url FROM ads WHERE key = '$key'";
?>
<meta http-equiv="REFRESH" content="0;url=<?php echo $url; ?>">
Doorsturen...
<?php
}else{
echo 'Error! Advertentie niet gevonden!';
}
?>
Hij blijft zeggen 'Error! Advertentie niet gevonden!' zeggen.
Ik heb een tabel aangemaakt, en dat is dus 'ads' en daar staat sa: 3G5D & key: ACRPDJ0fAj3nHVH2rhhU9v65GEkfwwgzIw7sV5X
Wie kan me vertellen wat ik fout doe, of ziet de fout?
Jasper
P.S. : Voorbeeld van de webpagina
Gewijzigd op 18/02/2012 18:47:51 door Jasper Vriends
Script is lek => sql-injection.
$vars buiten quotes halen.
Foutafhandeling ontbreekt.
En misschien vindt ie niet exact 1 record.
$vars buiten quotes halen.
Foutafhandeling ontbreekt.
En misschien vindt ie niet exact 1 record.
Ga debuggen: echo je query naar het scherm. Klopt het wat daar staat?
Waarom variabelen kopieren?
Controle op input komt nog?
Plaats code aub volgende keer tussen [code.] [/code.] tags (zonder .)
Verder wat SanThe ook aangeeft.
Waarom variabelen kopieren?
Controle op input komt nog?
Plaats code aub volgende keer tussen [code.] [/code.] tags (zonder .)
Verder wat SanThe ook aangeeft.
Ik heb het tussen [code.][./code] gedaan, maar ik moet dus foutafhandelingen maken, en Obelix en Idefix: Hoebedoel je met 'Waarom variabelen kopieren?'
Jasper
Jasper
Ohh, dat, dat deed ik om verwarring te voorkomen, anders dacht iemand zoiets als 'Wat zijn de variabelen' ofzo, ik doe ze er gewoon bij ;)
Er is er maar 1 die in de war kan raken --> dat ben jij : Is het een variabele uit het script of is het input van de gebruiker.
Ik raak niet zo snel in de war, alleen hier kom ik niet meer uit :S
Is er ergens een soort van zelfde scriptje, want ik heb geen zin om er nog eens 2 uur aan te zitten :S :$
Is er ergens een soort van zelfde scriptje, want ik heb geen zin om er nog eens 2 uur aan te zitten :S :$
Echo dan hoeveel records je hebt.
Als je 0 krijgt, dan betekent het dus dat er geen record voor die key is. Als hij niks aangeeft, betekent het dat je query niet klopt, geeft het 2 dan betekent dat dat er dus 2 records zijn. Als hij aangeeft 0 moet je anders de mysql_error() echoen. Dan moet je dus:
veranderen in
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$key=$_GET["ai"];
$sa=$_GET["sa"];
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'");
if (mysql_num_rows($sql_zoeken) == 1) {
$sql = "UPDATE ads SET bezocht = bezocht + 1 WHERE key = '$key'";
$updaten=mysql_query($sql);
$url = "SELECT url FROM ads WHERE key = '$key'";
?>
<meta http-equiv="REFRESH" content="0;url=<?php echo $url; ?>">
Doorsturen...
<?php
}else{
echo 'Error! Advertentie niet gevonden!<br />' . mysql_num_rows($sql_zoeken);
}
?>
$key=$_GET["ai"];
$sa=$_GET["sa"];
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'");
if (mysql_num_rows($sql_zoeken) == 1) {
$sql = "UPDATE ads SET bezocht = bezocht + 1 WHERE key = '$key'";
$updaten=mysql_query($sql);
$url = "SELECT url FROM ads WHERE key = '$key'";
?>
<meta http-equiv="REFRESH" content="0;url=<?php echo $url; ?>">
Doorsturen...
<?php
}else{
echo 'Error! Advertentie niet gevonden!<br />' . mysql_num_rows($sql_zoeken);
}
?>
Als je 0 krijgt, dan betekent het dus dat er geen record voor die key is. Als hij niks aangeeft, betekent het dat je query niet klopt, geeft het 2 dan betekent dat dat er dus 2 records zijn. Als hij aangeeft 0 moet je anders de mysql_error() echoen. Dan moet je dus:
veranderen in
Hmm...
Zelfs met werkt hij niet.
Ik heb nu het scriptje aangepast, maar hij werkt alleen op url :S, dus als je bijv. key of sa doet, dan doet hij niks, en als je url doet dan doet hij het wel, en als je alleen sa, of key doet, doet hij het nog steeds niet...
hier de code met alleen Url:
Hier de code hoe ik het wil, maar alsnog blijft hij het niet doen...
Snappen jullie nog waarom hij alleen bij url werkt en niet met key of sa?
Mvg Jasper
Zelfs met
Code (php)
1
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'") or trigger_error(mysql_error());
Ik heb nu het scriptje aangepast, maar hij werkt alleen op url :S, dus als je bijv. key of sa doet, dan doet hij niks, en als je url doet dan doet hij het wel, en als je alleen sa, of key doet, doet hij het nog steeds niet...
hier de code met alleen Url:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
//Variabelen:
$sa=$_GET["sa"];
$key=$_GET["ai"];
//Advertentie checken! !¡ BELANGRIJK ¡!
$sql_zoeken = "SELECT url FROM ads WHERE url = '$adurl'";
$res_zoeken = mysql_query($sql_zoeken);
if (mysql_num_rows($res_zoeken) == 1) {
$sql = "UPDATE ads SET bezocht = bezocht + 1 WHERE url = '$adurl'";
$updaten=mysql_query($sql);
}else{
?>
Sorry, er is iets fout gegaan!
<?php
}
?>
//Variabelen:
$sa=$_GET["sa"];
$key=$_GET["ai"];
//Advertentie checken! !¡ BELANGRIJK ¡!
$sql_zoeken = "SELECT url FROM ads WHERE url = '$adurl'";
$res_zoeken = mysql_query($sql_zoeken);
if (mysql_num_rows($res_zoeken) == 1) {
$sql = "UPDATE ads SET bezocht = bezocht + 1 WHERE url = '$adurl'";
$updaten=mysql_query($sql);
}else{
?>
Sorry, er is iets fout gegaan!
<?php
}
?>
Hier de code hoe ik het wil, maar alsnog blijft hij het niet doen...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Variabelen:
$sa=$_GET["sa"];
$key=$_GET["ai"];
//Advertentie checken
$res_zoeken = mysql_query("SELECT sa, key FROM ads WHERE sa = '$sa' AND key = '$key'") or trigger_error(mysql_error());
if (mysql_num_rows($res_zoeken) == 1) {
$sql = mysql_query("UPDATE ads SET bezocht = bezocht + 1 WHERE url = sa = '$sa' AND key = '$key'") or trigger_error(mysql_error());
}else{
?>
Sorry, er is iets fout gegaan!
<?php
}
?>
//Variabelen:
$sa=$_GET["sa"];
$key=$_GET["ai"];
//Advertentie checken
$res_zoeken = mysql_query("SELECT sa, key FROM ads WHERE sa = '$sa' AND key = '$key'") or trigger_error(mysql_error());
if (mysql_num_rows($res_zoeken) == 1) {
$sql = mysql_query("UPDATE ads SET bezocht = bezocht + 1 WHERE url = sa = '$sa' AND key = '$key'") or trigger_error(mysql_error());
}else{
?>
Sorry, er is iets fout gegaan!
<?php
}
?>
Snappen jullie nog waarom hij alleen bij url werkt en niet met key of sa?
Mvg Jasper
Key is een reserved word binnen MYSQL dus die kan je eigenlijk niet gebruiken als kolomnaam.
Dus, verander die kolom naar bijvoorbeeld 'sleutel' en het werkt wel.
Of (maar dat moet je eigenlijk NIET doen), gebruik backticks om de kolomnaam heen. dus
Dus, verander die kolom naar bijvoorbeeld 'sleutel' en het werkt wel.
Of (maar dat moet je eigenlijk NIET doen), gebruik backticks om de kolomnaam heen. dus
Code (php)
1
2
3
2
3
<?php
mysql_query("SELECT sa, `key` FROM ads WHERE sa = '".$sa."' AND `key` = '".$key."'");
?>
mysql_query("SELECT sa, `key` FROM ads WHERE sa = '".$sa."' AND `key` = '".$key."'");
?>
Als ik twijfel aan een query dan print ik hem uit dan run ik hem gelijk op de database. Dan weet je in ieder geval of het aan de query ligt of niet.
Misschien domme vraag, maar maak je wel connectie met je database?
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sa=$_GET["sa"];
$key=$_GET["ai"];
//Advertentie checken
print("SELECT sa, key FROM ads WHERE sa = '$sa' AND key = '$key'");
?>
$sa=$_GET["sa"];
$key=$_GET["ai"];
//Advertentie checken
print("SELECT sa, key FROM ads WHERE sa = '$sa' AND key = '$key'");
?>
Misschien domme vraag, maar maak je wel connectie met je database?
Het werkt! Bedankt Erwin!
De link werkt nu als het goed is, dus ik kan weer verder met het maken van m'n site!
Jasper ;)
Ik heb de link veranderd... Nieuwe voorbeeld (Die werkt!!)
Toevoeging op 19/02/2012 12:23:57:
Dat is een goed idee Lendl, daar ga ik de volgende keer aan denken ;)
Jasper :D
P.S. Toen ik hem bewerkte toen had ik je nog niet gezien
Toevoeging op 19/02/2012 12:24:37:
En ja... Alleen die heb ik alleen er niet bijgezet (De connectie)
De link werkt nu als het goed is, dus ik kan weer verder met het maken van m'n site!
Jasper ;)
Ik heb de link veranderd... Nieuwe voorbeeld (Die werkt!!)
Toevoeging op 19/02/2012 12:23:57:
Dat is een goed idee Lendl, daar ga ik de volgende keer aan denken ;)
Jasper :D
P.S. Toen ik hem bewerkte toen had ik je nog niet gezien
Toevoeging op 19/02/2012 12:24:37:
En ja... Alleen die heb ik alleen er niet bijgezet (De connectie)
Gewijzigd op 19/02/2012 12:21:59 door Jasper Vriends
- SanThe - op 18/02/2012 18:32:20:
Script is lek => sql-injection.
$vars buiten quotes halen.
Foutafhandeling ontbreekt.
$vars buiten quotes halen.
Foutafhandeling ontbreekt.
Als je gewoon een nette foutafhandeling had gemaakt, zoals aangeraden, had je dit probleem gisteren al opgelost. Script is nog steeds lek.
Hoebedoel je 'lek'?! Het werkt toch?
Jasper
Jasper
Dat je script werkt, betekent niet dat het veilig is. Jouw script is gevoelig voor sql injectie, zoek daar eens naar op internet. Het komt erop neer dat je gebruikersinput in je queries moet escapen met behulp van bijvoorbeeld mysql_real_escape_string().




