SQL select werkt niet
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
$vars buiten quotes halen.
Foutafhandeling ontbreekt.
En misschien vindt ie niet exact 1 record.
Waarom variabelen kopieren?
Controle op input komt nog?
Plaats code aub volgende keer tussen [code.] [/code.] tags (zonder .)
Verder wat SanThe ook aangeeft.
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.
Is er ergens een soort van zelfde scriptje, want ik heb geen zin om er nog eens 2 uur aan te zitten :S :$
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
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
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."'");
?>
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?
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.
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().