Sziasztok !
Irtam egy PHP szkriptet amelynek az a celja, hogy adatok visz be webrol mySQL-be. Egy regisztracios oldalrol van szo.
egy resz a kodbol:
mysql_query('CREATE TABLE register (username TEXT NOT NULL, email TEXT NOT NULL)');
$query = "INSERT INTO register (username, email) VALUES ('{$_POST['username']}', '{$_POST['email']}')";
// Ha letezik a user nem regisztral
$find = mysql_query("SELECT * FROM register WHERE username = '{$_POST['username']}' ");
$duplicate = mysql_num_rows($find);
print "$duplicate";
if ($duplicate == 0) {
mysql_query ($query);
print 'User added';
} else {
print 'user already exist.';
}
A $_POST['username'] es $_POST['email'] adatokat a szkript HTML kodbol veszi ki. pl. input type ="text" name ="username" , stb..
A szkript elenorzi ha letezik mar egy felhasznalo, ha talal egy letezo nevet a "username" oszlop-ban akkor nem adja hoza ujra az SQl adatbazishoz a letezo usert.
Eddig minden mukodik, most azt szeretnem elerni, hogy a felhasznalo regisztracio utan csak akkor legyen aktiv amikor raklikel egy linkre.
Hasonlo dolog van forumoknal, regisztracio utan elkuld a forum egy e-mailt egy linkel es azt meg kell latogatni. Nekem nem szukseg mail-re kuldje a linket, eleg ha az oldalon megjelenik!
Meg lehet oldani ezt a dolgot?
Ha tud valaki segiteni kuldjon egy valaszt. Meg kezdo vagyok PHP-ben.
Koszonom !
- 1844 megtekintés
Hozzászólások
Tarts nyilván egy véletlenszerűen generált kódot is a usernek mySQLben, és mondjuk ha üres az a mező, akkor jelentse azt hogy aktiválva van. A linkbe megadod neki az aktivációs kódot, és ha ráklikkel a linkre, és egyezik a két kód, akkor SQLben üríted a mezőt... pl..
- A hozzászóláshoz be kell jelentkezni
jah, regisztracio utan generalsz valamibol valamilyen hasht, beirod db-be, majd kiirod a usernek html-be.. Ha rakattint a linkre es az sql-ben tarolt kod meg a link-ben levo egyeszik, akkor irsz mondjuk egy 0-t a mezobe..
- A hozzászóláshoz be kell jelentkezni
én ezt úgy oldottam meg, hogy a jelszava volt véletlen generált, és mail-ben küldtem el neki, aztán belépve megváltoztathatta...
- A hozzászóláshoz be kell jelentkezni
koszonom a tanacsokat ! Megprobalom, remelem sikerul.
- A hozzászóláshoz be kell jelentkezni
Az előbbiekhez tanácsok:
- sha1() -el rand() és linux timestamp és juzernév alapján csinálj egy egyedi hash, ha kevésbé vagy paranoid akkor md5(), egy active mezőt is csinálj és ha sikeresen aktivált a juzer, akkor NULL-ra állítsd az egyedi kódot
- a $_POST-olt változókat gondolom jól ellenőrzöd és nem eresztesz be véletlenül sem csupaszon ilyet, csak az egyszerűség kedvéért írtad
- a látező ellenőrzésre talán nem a SELECT * FROM kéne, hanem SELECT username FROM tabla WHERE username = 'x' OR email = 'y' és akkor ha 0-nál többet ad vissza, igazából lehet simán username is
- a regisztrálók emailcímének valódiságát egyszerűen tudod ellenőrizni, én egy regval.php-t szoktam csinálni (vagy rv.php) ahol az egyetlen parameter az md5 vagy sha1 hash, ha az alapján van juzer, akkor lehet aktiválni és újabb emailt küldeni, hogy sikerült meg minden
- a MySQL oszlop típusaiban és helyfoglalásaiban picit mélyedj el, mert a TEXT típus nem túl nyerő egy juzernévnek, az emailhez szintén jobb lenne a VARCHAR
- a kódod érdemegy egyszerűsíteni:
function varCheck($input) {
if($input) {
$output = strip_tags($input); //html tageket nem szeretük, véletlenül sem
$output = mysql_escape_string($output); //az aktuális mysql verzió szerint escape-el, kiolvasáskor jó lesz, a magic_quotes-t pedig lehetőleg off hagyjuk
//ezen kivul tetszolegesen alakithato ez persze
return $output;
}
}
if(is_string($_POST['username']) && ereg('^[a-z0-9\-_\.]{1,32}@[a-z0-9\-\.]{1,64}\.[a-z0-9]{2,5}', strtolower($_POST['email']))
//a fenti ellenorzesek tokegyszeruek, es az email megnezese is elnagyolt, a formátum csak nagyjából illeszkedik
// Ha letezik a user nem regisztral
if($f = mysql_query("SELECT username FROM register WHERE username = '".varCheck($_POST['username'])."' OR email = '".varCheck($_POST['email'])."';")) {
if(mysql_num_rows($f) < 1) {
if(mysql_query("INSERT INTO register (username, email) VALUES ('".varCheck($_POST['username'])."', '".varCheck($_POST['email'])."')")) {
print 'a felhasználó hozzáadva';
}
}
else {
print 'már létezik a juzer';
}
}
}
No hirtelen ennyi. :) Remélem minden ( { és hasonlót lezártam meg ;-ek sem hiányoznak.
- A hozzászóláshoz be kell jelentkezni
szvsz nem baj az, ha valaki gondol a 255 karakternel hosszabb mail cimekre :)
- A hozzászóláshoz be kell jelentkezni
minek? :D azt meg begepelni is ido.. :)
- A hozzászóláshoz be kell jelentkezni
hülye "télapó-scriptek" (akik a script-kiddie-knek visznek cracker-csomagot) semmi idő alatt telipakolnak egy 255byte-os kiscsizmát... ;)
Valamint cracker-szerű létformák is hajlamosak POST-ot manipulálni, pl ezért sem uszítunk rá $_POST-ot csak úgy egy sql adatbázisra, meg alapvetően semmire. :)
- A hozzászóláshoz be kell jelentkezni
Koszi a segitseget ! tartozok egy sorrel.
- A hozzászóláshoz be kell jelentkezni
A kov. sort hasznalom a random kod generalasra, egyenlore csak kezdesnek :
mysql_query ("INSERT INTO register (username, email, validate) VALUES ('".varCheck($_POST['username'])."', '".varCheck($_POST['email'])."', '".rand(1,99999)."')");
szeretnem a random erteket elohivni html-ben, valami ilyesmi:
print "< a href =\"activate=????\">";
Ha raklikel akkor uritse az SQL mezot..
Tudnatok segiteni egy peldaval, elege kezdo vagyok PHP-ben es megint elakadtam :(
- A hozzászóláshoz be kell jelentkezni
nem lehetne az ilyen színvolnalú kérdéseket a pécéfórumon folytatni, és esetleg a jövőben itt el se kezdeni?
- A hozzászóláshoz be kell jelentkezni
Milyen színvonalú kérdés felelne meg neked? Gondolom Te sosem voltál kezdő és sosem kérdeztél egyszerű dolgokról, mert ment minden elsőre és nagyszerűen.
- A hozzászóláshoz be kell jelentkezni
Ugy probaltam megoldani a problemat, hogy letrehoztam egy date_entered oszplopot mysql-ben. Es megcsinaltam, hogy azt a kodot listaza ki amely utoljara volt hozaadva az adatbazishoz.
A validate oszlop tartalmaza a random kodokat.
$query = mysql_query("SELECT validate FROM register ORDER BY date_entered DESC");
$fetch = mysql_fetch_array($query);
print "Aktivalashoz klik < a href=\"userval.php?key={$fetch['validate']}\">ide";
Mukodik de remelem nem tul gyerekes amit csinaltam :)
- A hozzászóláshoz be kell jelentkezni
csináld php-ból a hash és szúrd be, illetve mailezd, fölösleges újra selectelni
- A hozzászóláshoz be kell jelentkezni
sikerult, mukodik!
Elnezest kerek ha kicsit sokat kerdeztem, de azert irtam ide a forumra, mert lattam, hogy PHP szekcio is letzik es sok felhasznalo nezi meg.
Tudtok esetleg valami magyar oldalat ahol csak PHP-vel foglalkoznak?
- A hozzászóláshoz be kell jelentkezni
Nyugodtan írhatsz ide is, nem kell minden nyavajgással foglalkozni. Ahol sok a php az a weblabor.hu és a magyar nyelvű php manual: http://www.php.net/manual/hu/
- A hozzászóláshoz be kell jelentkezni
nem lehetne az ilyen színvolnalú 3133th4x0r nyavalygásokat a pécéfórumon folytatni, és esetleg a jövőben itt el se kezdeni?
- A hozzászóláshoz be kell jelentkezni