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ä....
Koeta laittaa = -merkkien tilalle == eli yhtäsuuruus. = on sijoitus, jolloin nuo kaikki ehtolauseet ovat aina tosia...
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.
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.
MySQL ei sitten ole puhdasta SQL:ää.
Se on oma murteensa.
Siis noin btw =)
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'
Aihe on jo aika vanha, joten et voi enää vastata siihen.