ugrás a tartalomhoz

PHP Aktivacio kod

zoliky · 2006. Júl. 5. (Sze), 18.51
Sziasztok!
Van egy PHP szkript amely segitsegevel egy felhasznalo regisztralja magat egy adatbazisba.

Regisztracio utan a felhasznalo kap egy e-mailt, egy link-el. Csak akkor lesz aktiv a felhasznalo ha meglatogatja ezt a linket.

Ez a link tartalmaz egy random generalt kodot :

Pl:

www.mydomain.com/userval.php?key=b026a66879c2690575bc7e3c56edc60e353d8d06


Ez a hosszu kod bent van egy mySQL mezoben, amelynek a neve "validate".
Amiutan a felhasznalo meglatogatja a linket a hosszu kod helyet egy 0 lesz beirva a validate mezobe.

A gond az, hogy eleg ha csak a kod egyik kissebb reszet irom be, mert kiirja, hogy a regisztracio sikeresen tortent:

Pl.

www.mydomain.com/userval.php?key=b026a66879


Persze o kiirja de nem fog atvaltani 0-ra !

Itt van a userval.php kodja:

$key = $_GET['key'];

if (@mysql_query("UPDATE register SET validate='0' WHERE validate='". $_GET['key'] . "'")) {
print "<b>Aktivalodott<br />";
} else {
print "<b>Nem aktivalodott</b>";
}

Mielott megjelenik az "Aktivalodott" sor le kene elenorizem ha tenyleg atirta azt az erteket 0-ra.

Sajnos nem tudom milyen parancsokkal vegezem el ezt az elenorzest. Ha tudtok segiteni, nagyon halas lennek !

Koszonom !
 
1

talán így

KergeKacsa · 2006. Júl. 5. (Sze), 20.04
Elöbb ellenőrizd le, hogy létezik-e ilyen sor az adatbázisban (ez legyen az if része), és ha van, akkor jöjjön az update és a sikeres kiírás. Ha nincs, akkor a nem sikerült kiírás jöhet.

A mysql_query() hiba esetén tér vissza False-szal, azaz ha a query jó, de nincs egyetlen egy érintett sor sem, akkor sem ad vissza False-t.
2

nem mukodik

zoliky · 2006. Júl. 5. (Sze), 21.36
Hiaba nem mukodik.

if (mysql_query("SELECT * FROM register WHERE validate='". $_GET['key'] . "'")) {
mysql_query("UPDATE register SET validate='0' WHERE validate='". $_GET['key'] . "'");
print "<b>Aktivalva<br />";
} else {
print "<b>Nincs aktivalva</b>";
}

Szuksegem lenne elege surgosen segitsegre, ha barmilyen otletek van jol jonne
3

Több hiba is akad

Dualon · 2006. Júl. 5. (Sze), 21.46
  • használd a colorer bbcode-ot: hozzászólási box felett jobbra a {} jel (JS kell)
  • a fenti kód könnyen SQL injection áldozatává válhat! Tipp: mysql_real_escape_string()
  • A select query után nézd meg, jó volt-e a lekérésed, majd azt is, hogy hány sort kaptál vissza... ha 0, akkor nem megfelelő a hash, ha 1, akkor örülünk, ha több, akkor valami megint nem jó. Tipp: mysql_num_rows()
  • UPDATE-eld a megfelelő sort (biztonság, lásd sql injection!), majd ellenőrizd, hogy jó volt-e a query. Ha jó, akkor kiírhatod a sikeres regisztráció üzenetét.


Remélem, nem éles rendszert fejlesztes, hanem magadnak barkácsolsz otthon. ,)
4

Koszonom

zoliky · 2006. Júl. 5. (Sze), 22.59
Mukodik !

A kovetkezo kodot hasznalom:

<?php

$key = $_GET['key'];
   
$findkey = mysql_query("SELECT * FROM register WHERE validate='". $_GET['key'] . "'");
$key = mysql_num_rows($findkey);

    if ($key == 1) {
    mysql_query("UPDATE register SET validate='0' WHERE validate='". $_GET['key'] . "'"); 
    print "Aktivalva van.<br />";
    } else {
    print "Nincs aktivalva";
    }
?>
Mit kene atmodositani ahoz, hogy a kod ne legyen SQL injection aldozata ?

Kosznom !
5

mysql_real_escape_string()?

Dualon · 2006. Júl. 5. (Sze), 23.14
Megnézted a függvényt, amit belinkeltem neked?
6

koszonom !

zoliky · 2006. Júl. 5. (Sze), 23.35
Igen, de lenne egy kerdesem.
Az sprintf biztonsagosabb lekerest ad mint a query?
7

sokkal

Dualon · 2006. Júl. 6. (Cs), 00.32
Az sprintf olyannyira biztonságos lekérést ad, hogy még közelébe sem megy az adatbázis-kapcsolatnak. Sőt! Igazából nem is erre találták ki.

RTFM!