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.
debuggaa
esim.
echo $kysely;
Näet millanen kyselystä tulee.
$nimi = $_GET['nimi']; $kysely = "SELECT * FROM jasenet WHERE Nimi = '$nimi'"; echo $kysely;
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.
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
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.
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"; ?>
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.