Php-ban saját függvény írása, meghívása
Hello
Valaki eltudná magyarázni nekem, hogy php-ban ha írunk függvényt, akkor milyen célra irjuk? Mármint milyen kódot írunk bele...adatbázis műveleteket, lekérdezést, ciklust...és hogy hivjuk meg ezt a függvényt?
Van egy kis kódom, ezzel a jelszavát tudja módosítani a user. Ez jó így ahogy van(isset-el aktiválódik), vagy ezt is lehetne függvénnyé alakítani? Javascript függvénynél az oké, hogy egy onclick-nél hívom meg például, de php-ban?
■ Valaki eltudná magyarázni nekem, hogy php-ban ha írunk függvényt, akkor milyen célra irjuk? Mármint milyen kódot írunk bele...adatbázis műveleteket, lekérdezést, ciklust...és hogy hivjuk meg ezt a függvényt?
Van egy kis kódom, ezzel a jelszavát tudja módosítani a user. Ez jó így ahogy van(isset-el aktiválódik), vagy ezt is lehetne függvénnyé alakítani?
if(isset($_POST['jelszo_submit']))
{
$jelszavam=$user_adat['Jelszo'];
$en=$user_adat['Felhasznalonev'];
$pass1=mysql_real_escape_string($_POST['pass1']);
$pass_hiba=array();
if($pass1==$jelszavam)
{
$pass2=mysql_real_escape_string($_POST['pass2']);
if(strlen($pass2)>=6 && strlen($pass2)<=15)
{
$pass3=mysql_real_escape_string($_POST['pass3']);
if($pass2==$pass3)
{
$pass_csere=mysql_query("update regisztracio set Jelszo='$pass2' where Felhasznalonev='$en'");
$_SESSION['adatok']['Jelszo']=$pass2;
$pass_modosit=1;
$_POST=array();
}
else
{
$pass_hiba[]="A megadott új jelszavak nem egyformák.";
}
}
else
{
$pass_hiba[]="Az új jelszó minimum 6, maximum 15 karakter legyen.";
}
}
else
{
$pass_hiba[]="A jelenlegi jelszavát hibásan adta meg.";
}
}
Újrafelhasználható kód miatt
A kódodban ellenőrzöd, hogy 6 és 15 karakter között legyen a jelszó. Ezt a fajta ellenőrzést, nem csak itt végezheted el, hanem elképzelhető, hogy még lesz az alkalmazásodban jó pár helyen olyan kód, amivel ezt szeretnéd ellenőrizni.
Jelzik a felhasználók, hogy ők kevesebb mint hat karaktert használtak, mégis beengedte őket a rendszer, másoknak meg nem fogadta el a 12 karakter hosszú jelszavát se.
Vizsgálódás után rájössz, hogy az a probléma, hogy ékezetes karaktereket használnak a felhasználók és az alap PHP string függvények(5.3-ra is igaz ez?) ezt nem kezelik, ahhoz az mb_ kezdetű függvények kellenek.
Ha írtál volna egy between nevű függvényt akkor nem kéne több helyen átírnod most a kódodat, hanem elég lenne csak egy helyen módosítani.
Természetesen a példa sántít, mint minden példa, mert itt az mb_ kezdetű függvényeket kéne már eleve használnod, de talán érthető amit írtam.
De ez egyébként egy tipikusan olyan kérdés, amit felesleges magyarázni, előbb utóbb úgy is rájössz, csak el kell kezdened kódolni és már minimális komplexitásnál előjön az igényed rá.
pp
(a $pass1 és a $jelszavam nem fog egyezni, ha ' jel van benne, mivel az egyiket eszképeled, míg a másikat nem.)
Hello Köszi a választ. De
Köszi a választ. De egyezik a $pass1 és a $jelszavam, a $jelszavam az session-bol van kiszedve, ott azért nincs real escape...
Ne
mysql_real_escape_string
-el van kódolva?Hát ami session-ból van,
Egyébként ez a login, itt állítom be a sessiont.
nem
És miket kellene javítanom?
Címszavakban
- Jelszó titkosítása a táblában (sózás, stb)
- IP-t is tárolj, valamint belépési és oldaltöltésenként frissített időpontot (táblában)
- Fenti kettővel biztonságosabbá teheted a működést, ha minden kérés elején ellenőrzöd az IP-t, valamint időkorlátot állítasz be (pl. ha a legutóbbi kérés több, mint 10 perce volt, akkor logout)
- Ahogy PP is javasolta: min. függvényekbe írd a cuccost, de nem ártana egy Login osztály.
A login osztálynak hogy
felhasználokezeles
8-asra
- Először is PHP manual: objektumok és osztályok, session.
- Itteni cikkek a témában, Munkmenetkezelés, Felhasználókezelés
- Első nekifutásra én azt javasolnám, hogy egyetlen login osztályból indulj ki, majd később, ha jobban belejössz, úgyis szét fogod szedni több részre.
- Határozd meg pontosan, hogy milyen adatokra lesz szükséged a Júzertől ill. a progidtól. Ez alapján készítsd el az adattáblákat. (Különösen figyelj a titkosítandó adatok hosszára.) Ne lepődj meg, ha nem egyetlen táblában tudod megoldani, pl. ha különböző jogosultságokat / csoportokat akarsz.
- A (hívjuk most így:) users táblában legyen egy user_data text-oszlopod is, ezt később tudod majd egyéb (szerializált) adatok tárolására használni.
- Szép sorban írd meg a szükséges fv-eket, regisztrációtól ki- és beléptetésen át a mindennemű ellenőrzésekig, naplózás, stb.
- Teszteld sokat, javítsd ha kell.
- Lehetőleg használj a különféle űrlapokhoz (reg., belépés form, stb.), megjelenítendő adatokhoz (Júzer adatlapja, stb.) sablonokat, akár általad készített nagyon egyszerűeket.
- SESSION-ben csak olyan adatot tárolj, amit akár "képernyőre is kiírsz". Minden oldalkérés elején hívd majd meg a "user_check" fv-edet, ebben a fv-ben fogod ellenőrizni a timelimit-et, be van-e logolva, stb-t; a végén, ha minden OK, akkor egy megfelelő változódba betöltheted a Júzer szükséges adatait (itt sem a jelszavát, hanem a felhasználónevét, jogosultságait, ...), és ezt a változót (objektumot) "viszed tovább" a többi programrészhez, amik pl. a fórumot kezelik.
- Csak akkor használd fel az osztályt (fórumhoz, stb.), ha már jól letesztelted és "átment".
Remélem így érthetőbb, sok sikert!