Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: SQL ja muutuja ongelma

Cinen [03.03.2004 14:37:20]

#

Olen tehnyt koodin pätkän jonka pitäisi testata mysql:ssä olevasta taulusta käyttäjän tunnus ja salasana, mutta jostain syystä se ei toimi oikein. Eli se ei osaa katsoa onko antamani tunnus sama kuin SQL taulussa oleva. Tässä koodin pätkää: (Tässä on sitten sekoitus kaiken näköistä roskaa. Koettakaa kestää)

#!/usr/php4/bin/php --,
<?php
$yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!");

mysql_select_db("mage", $yhteys) or die("Tietokantaa ei löytynyt!");

$kysely = "SELECT * FROM user";
$haku = mysql_query($kysely,$yhteys);

$user = $_POST['user'];
$passwd = $_POST['passwd'];

echo $user. ": ". $passwd;
echo "<br>";


//echo mysql_result($haku, 0, "salasana");

//käydään tavarat läpi
while ($rivi = mysql_fetch_array($haku, MYSQL_ASSOC)) {
	echo $rivi["Tunnus"].": ".$rivi["Salasana"];
	if ($user = $rivi["Tunnus"]){ // and $rivi["Salasana"]=$passwd){
    			//header("Location: ./logged.php");
			echo "<br><br>läpi meni";
	}
	else {echo "Väärä Tunnus!!!!";}


}


//suljetaan yhteys
mysql_close($yhteys);
?>

Ainoa mitä saan aikaan on seuraavanlainen sivu:

dssfd: ihldidhfd
Cinen: testi

läpi meni

Tuo ylin on antamani tunnus ja salasana ja alla on mitä se pitäisi olla.

Puuh ei ymmärrä....

sqwiik [03.03.2004 16:28:07]

#

Koeta laittaa = -merkkien tilalle == eli yhtäsuuruus. = on sijoitus, jolloin nuo kaikki ehtolauseet ovat aina tosia...

kenkku [03.03.2004 16:57:35]

#

Tuo kävisi helpommin jos laittaisit kyselyksi "SELECT * FROM user WHERE salasana='" . $_POST["passwd"] . "' AND Tunnus='" . $_POST["user"] . "'"
ja sitten iffaisit onko kyselyssä 1 rivi (rivien määhän saa selville funkkarilla mysql_num_rows), eli jos löytyy yksi rivi, siinä pitää olla salasana ja useri oikein.

Cinen [04.03.2004 08:57:46]

#

Argh nolo... tosiaan siis == ei =. Tosi nolo. Ei tollasta huomaa :P

Hmmm.. En tiennyt että SQL lauseen sisään voi laittaa muutujia. Tämä oli hyvä ja "helpottava" tieto. Kiitos paljon.

Juhis [04.03.2004 12:57:56]

#

MySQL ei sitten ole puhdasta SQL:ää.
Se on oma murteensa.
Siis noin btw =)

Meitzi [06.03.2004 20:23:05]

#

lainaus:

Tuo kävisi helpommin jos laittaisit kyselyksi "SELECT * FROM user WHERE salasana='" . $_POST["passwd"] . "' AND Tunnus='" . $_POST["user"] . "'"
ja sitten iffaisit onko kyselyssä 1 rivi (rivien määhän saa selville funkkarilla mysql_num_rows), eli jos löytyy yksi rivi, siinä pitää olla salasana ja useri oikein.

Tämä sisältää tosin aika ison porsaanreijän. On erittäin tärkeää muistaa että AINA kun käsitellään post tai get metodilla saatuja muuttujia ne voivat sisältää AIVAN mitä tahansa.

Jos joku pistää salasanaksi ja tunnukseksi '" OR '1'='1 pääsee aina sisään.
Silloinhan SQL lauseesta tulee
SELECT * FROM user WHERE salasana='' OR '1'='1' AND Tunnus='' OR '1'='1'

Vastaus

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

Tietoa sivustosta