SQL select werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper Vriends

Jasper Vriends

18/02/2012 18:23:16
Quote Anchor link
Hallo,
Ik heb een eigen php-sql scriptje gemaakt, maar hij werkt niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
    }

?>

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
 
PHP hulp

PHP hulp

26/04/2024 02:59:38
 
- SanThe -

- SanThe -

18/02/2012 18:32:20
Quote Anchor link
Script is lek => sql-injection.
$vars buiten quotes halen.
Foutafhandeling ontbreekt.

En misschien vindt ie niet exact 1 record.
 
Obelix Idefix

Obelix Idefix

18/02/2012 18:41:20
Quote Anchor link
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.
 
Jasper Vriends

Jasper Vriends

18/02/2012 18:51:00
Quote Anchor link
Ik heb het tussen [code.][./code] gedaan, maar ik moet dus foutafhandelingen maken, en Obelix en Idefix: Hoebedoel je met 'Waarom variabelen kopieren?'

Jasper
 
Obelix Idefix

Obelix Idefix

18/02/2012 19:53:43
Quote Anchor link
Waarom doe je
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
    $key=$_GET["ai"];
    $sa=$_GET["sa"];
?
 
Jasper Vriends

Jasper Vriends

18/02/2012 20:21:16
Quote Anchor link
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 ;)
 
Obelix Idefix

Obelix Idefix

18/02/2012 23:10:10
Quote Anchor link
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.
 
Jasper Vriends

Jasper Vriends

19/02/2012 09:58:38
Quote Anchor link
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 :$
 
Koen Vlaswinkel

Koen Vlaswinkel

19/02/2012 10:13:00
Quote Anchor link
Echo dan hoeveel records je hebt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
    }

?>


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'");

veranderen in
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'") or trigger_error(mysql_error());
 
Jasper Vriends

Jasper Vriends

19/02/2012 11:58:57
Quote Anchor link
Hmm...
Zelfs met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$sql_zoeken = mysql_query("SELECT * FROM ads WHERE sa='$sa' AND key='$key'") or trigger_error(mysql_error());
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
        }
    ?>


Hier de code hoe ik het wil, maar alsnog blijft hij het niet doen...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
        }
     ?>

Snappen jullie nog waarom hij alleen bij url werkt en niet met key of sa?

Mvg Jasper
 
Erwin H

Erwin H

19/02/2012 12:07:49
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
mysql_query("SELECT sa, `key` FROM ads WHERE sa = '".$sa."' AND `key` = '".$key."'");
?>
 
Lendl Verschoor

Lendl Verschoor

19/02/2012 12:11:37
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'");
?>


Misschien domme vraag, maar maak je wel connectie met je database?
 
Jasper Vriends

Jasper Vriends

19/02/2012 12:18:52
Quote Anchor link
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)
Gewijzigd op 19/02/2012 12:21:59 door Jasper Vriends
 
- SanThe -

- SanThe -

19/02/2012 13:59:33
Quote Anchor link
- SanThe - op 18/02/2012 18:32:20:
Script is lek => sql-injection.
$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 Vriends

Jasper Vriends

19/02/2012 18:02:59
Quote Anchor link
Hoebedoel je 'lek'?! Het werkt toch?

Jasper
 
Joren de Wit

Joren de Wit

19/02/2012 22:15:07
Quote Anchor link
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().
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.