Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ja MySQL kysely

Sivun loppuun

Tuoppia [24.03.2009 08:33:16]

#

Taas loppuu taidot kesken
Mikä seuraavassa rivissä mättää:

$kysely = "SELECT * FROM jasenet WHERE Nimi='$_GET[\"nimi\"]' ";

Yritän siis hakea tietokannasta tietyn nimisen henkilön tiedot.
Tiedot välittyvät kyllä ihan oikein, tämän olen varmistanut laittamalla

print_r($_GET); // antaa Array ( [nimi] => Jaska Jokunen )

mutta tuo rivi mättää. Jos laitan hipsujen sisään nimen suoraan niin toimii ihan oikein.

Lebe80 [24.03.2009 08:50:27]

#

debuggaa
esim.
echo $kysely;

Näet millanen kyselystä tulee.

Vasta_alkaja [24.03.2009 08:56:21]

#

$nimi = $_GET['nimi'];

$kysely = "SELECT * FROM jasenet WHERE Nimi = '$nimi'";

echo $kysely;

GimPeltzi [24.03.2009 09:07:20]

#

Nuo lainausmerkit taulukkoon viittauksessa taitavat tuottaa sekaannuksia. Vasta_alkajan vinkin mukaan voit kiertää viittauksen taulukkoon tallentamalla kyseisen tietueen erilliseen muuttujaan, tai voit koittaa erottaa muuttujan kyselyn sisältä aaltosulkein.

Chiman [24.03.2009 11:28:23]

#

Tuoppia kirjoitti:

Mikä seuraavassa rivissä mättää:

$kysely = "SELECT * FROM jasenet WHERE Nimi='$_GET[\"nimi\"]' ";

Siinä mättää ennen kaikkea se, että sijoitat käyttäjän syötteen suoraan tietokantakyselyyn. Silloin tietokanta on alttiina vihamielisille syötteille.

Lisätietoa:
http://fi.wikipedia.org/wiki/SQL-injektio
https://www.php.net/manual/en/function.mysql-real-escape-string.php

Tuoppia [24.03.2009 14:15:10]

#

Kiitokset kaikille vastauksista!
Tuo Vasta_alkajan vinkki toimi, eli nuo lainausmerkit oli ongelma.
Ja Chimanin huomio on hyvä, täytyy lukea nuo linkit läpi, ettei tule ongelmia.

Metabolix [24.03.2009 20:35:56]

#

Chimanin vastaukseen täytyy vielä lisätä käytännön esimerkki. ;)

Varmin ja minusta selkein tapa tekstin liittämisessä lainausmerkkien sisään on käyttää aaltosulkuja:

<?php
// taulukoiden indeksit toimivat:
$t = "tekstiä {$_GET["teksti"]} tekstiä";
// ei tule ongelmia, vaikka teksti jatkuu muuttujan jälkeen;
// esim. "$tmoi" käsittelee muuttujaa $tmoi, kun {$t}moi tarkoittaa "$t"."moi":
$t = "{$t}moi";
?>

tsuriga [24.03.2009 22:31:22]

#

Chiman kirjoitti:

Lisätietoa:
http://fi.wikipedia.org/wiki/SQL-injektio
https://www.php.net/manual/en/function.mysql-real-escape-string.php

Myös PHP:llä voidaan käyttää useimmiten (citation needed) eskapointia parempaa tapaa eli jo tuolla Wikipediassa neuvottuakin kyselyjen preparointia:
https://www.php.net/mysqli.prepare


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta