Autor | Zpráva | ||
---|---|---|---|
Ronny Profil * |
#1 · Zasláno: 24. 3. 2008, 11:20:11
Zdravím, moc sice OOP nehovím, ale potřebuju to mít v diplomce, a takse v tom nějak šťourám.
Co jsem se zatím tak nějak dočetl, by to mohlo býti nějak takhle: class login { public function prihlaseni($odeslat, $jmeno, $heslo) { include ('pripojeni.php'); if (isset($odeslat)){ if (!$jmeno || !$heslo) { echo '<strong class="chyba">Zadejte své přihlašovací jméno a heslo!</strong>'.'<br /><br />'; } else { $sql = mysql_query("SELECT * FROM adm_login WHERE uz_jmeno = '".$jmeno."' AND uz_heslo = '".md5($heslo)."'"); $zaznam = mysql_num_rows($sql); if($zaznam == '1'){ $_SESSION['prihlasen'] = "ano"; Header("Location: index.php"); } else { echo '<strong class="chyba">Zadejte správné přihlašovací jméno a heslo!</strong>'.'<br /><br />'; } } } } } Co jsem zjistil, tak v takovém zápise nemůže být echo a header ...nevíte pls jak to napravit? |
||
Casero Profil |
#2 · Zasláno: 24. 3. 2008, 11:59:22 · Upravil/a: Casero
Ronny
Co třeba takto? class login { public $error; //výpis s chybami public function login($jmeno, $heslo) { include ('pripojeni.php'); if (!$jmeno || !$heslo) { $error='<strong class="chyba">Zadejte své přihlašovací jméno a heslo!</strong>'.'<br /><br />'; return false; } else { $sql = mysql_query("SELECT * FROM adm_login WHERE uz_jmeno = '".$jmeno."' AND uz_heslo = '".md5($heslo)."'"); if(mysql_num_rows($sql) == 1){ return true; } else { $error='<strong class="chyba">Zadejte správné přihlašovací jméno a heslo!</strong>'.'<br /><br />'; return false; } } } } if ($odeslano) { $login= new login($jmeno, $heslo); if ($login) { $_SESSION['prihlasen'] = "ano"; Header("Location: index.php"); } else echo $login->error; } Vytvořil jsem to tu z placu, možná tam sou chyby. |
||
Ronny Profil * |
#3 · Zasláno: 24. 3. 2008, 13:40:12
Casero
vyhodilo mi to hlášku Fatal error: Call to a member function login() on a non-object in ... zkoušel jsem tto zavolat následnově: $login->login($jmeno, $heslo); |
||
sicario Profil |
#4 · Zasláno: 24. 3. 2008, 14:02:29
Ronny
Takovehlemu navrhu tridy bych se obloukem vyhnul. Pripojeni k DB (include ('pripojeni.php')) bych resil mimo tridu login. Podle zapisu, ktery jsi pouzil, odhaduji, ze pouzivas PHP5. To uz umi daleko vic OOP "vychytavek" nez PHP4. Jednou z nich jsou i staticke clenske promenne. Takze ja bych postupoval tak, ze bych vytovril nejaky jednoduchy DB layer: Trida DBlayer metoda connect, query, ... Od ni bych podedil tridu tridu uzivatel s metodou login, zmen_jmeno, ... , ktere nebudou vypisovat zadne html, jen nejakym zpusobem (navratova hodnota / vyjimky) zahlasi jak dopadla operace. No a ta staticka clenska promenna se pouzije v tride DBlayer - ulozi se do ni identifikator spojeni s DB. Takze pouziti ve skriptu by mohlo vypadat zhruba takto: DBlayer::connect('prihlasovaci udaje'); // staticka metoda, po ni nasleduje vyhodnoceni uspesnosti pripojeni $uzivatel = new Uzivatel(); if ($odeslano && $uzivatel->login(stripslashes($jmeno), stripslashes($heslo)) { header('Location: ....'); exit; } elseif ($odeslano) { // zpracovani chyby prihlaseni $uzivatel->error } // a nebo totez pomoci try-catch |
||
Ronny Profil * |
#5 · Zasláno: 24. 3. 2008, 14:26:26
sicario
hm.... moc se nechytám...mohl by jsi mi prisimte ukazat jak by vypadal cely kod? ...nutne to potrebuju do zaverecne prace nejak naskladat a pak se to musim podrobneji naucit... tak jestli by si byl tak hodny a neukazal mi jak by ten skript vypadal cely.... dekuji mnohokrat |
||
Ronny Profil * |
#6 · Zasláno: 24. 3. 2008, 15:54:53
tak jsem se dostal o neco dal...
mam 2 soubory: 1.) CLASS_LOGIN.PHP <?php class login { public function prihlaseni($jmeno, $heslo) { include ('pripojeni.php'); if (!$jmeno || !$heslo) { $this->error='<strong class="chyba">Zadejte své přihlašovací jméno a heslo!</strong>'.'<br /><br />'; return false; } else { $sql = mysql_query("SELECT * FROM adm_login WHERE uz_jmeno = '".$jmeno."' AND uz_heslo = '".md5($heslo)."'"); if(mysql_num_rows($sql) == 1){ return true; } else { $this->error='<strong class="chyba">Zadejte správné přihlašovací jméno a heslo!</strong>'.'<br /><br />'; return false; } } } } ?> a druhy: CLASS_LOGIN2.PHP ?php if ($odeslano) { $login= new login($jmeno, $heslo); if ($login) { $_SESSION['prihlasen'] = "ano"; Header("Location: index.php"); } else echo $login->error; } ?> metodu volam takto: $login = new login(); $login -> prihlaseni($jmeno,$heslo); Mam problem v tom, ze se mi nezobrazi zadne hlasky v pripade spatne zadanych prihl. udaju a kdyz zadam udaje spravne, tak mi nedojde k presmerovani do administrace...:( Nevite pls co s tim muze byt? |
||
Ronny Profil * |
#7 · Zasláno: 24. 3. 2008, 19:13:19
tak postoupil jsem o neco dale:
<?php class login { public $error; //výpis s chybami public function prihlaseni($jmeno, $heslo) { include ('pripojeni.php'); if (!$jmeno || !$heslo) { $error='<strong class="chyba">Zadejte své přihlašovací jméno a heslo!</strong>'.'<br /><br />'; return false; } else { $sql = mysql_query("SELECT * FROM adm_login WHERE uz_jmeno = '".$jmeno."' AND uz_heslo = '".md5($heslo)."'"); if(mysql_num_rows($sql) == 1){ return true; } else { $error='<strong class="chyba">Zadejte správné přihlašovací jméno a heslo!</strong>'.'<br /><br />'; return false; } } } } if ($odeslat) { $login= new login($jmeno, $heslo); if ($login) { $_SESSION['prihlasen'] = "ano"; Header("Location: index.php"); } else echo $login->error; } ?> a volání metody: $login = new login(); $login -> prihlaseni($jmeno,$heslo); Ted nastal ten problem, ze at uz zadam do prihlasovacich poli cokoli nebo vubec nic, pokazde me to rpesmeruje da administrace...:( ...nevite jak tohle napravit pls? |
||
BetaCam Profil |
#8 · Zasláno: 25. 3. 2008, 10:33:00
sicario
Takze ja bych postupoval tak, ze bych vytovril nejaky jednoduchy DB layer: Trida DBlayer metoda connect, query, ... Od ni bych podedil tridu tridu uzivatel s metodou login, zmen_jmeno, ... , ktere nebudou vypisovat zadne html, jen nejakym zpusobem (navratova hodnota / vyjimky) zahlasi jak dopadla operace. Tak takovéhle řešení by mohlo mít v diplomové práci přímo fatální následky. Nezapomeň na to, že jedna z "pouček" OOP je : "Všichni potomci by měli umět zastat činnost svého rodiče" a "Potomek má být speciálním případem rodiče". Třída login, ale neni speciální případ třídy DBLayer sou to dně naprosto odlišné třídy jedna se stará o DB a druhá o login. Proto dědit DBLayer v diplomce bych radši nedělal. |
||
BetaCam Profil |
#9 · Zasláno: 25. 3. 2008, 12:32:40
Ronny
Jinak ke všem předchozím scriptům co si uvedl v tomto tématu. Řeknu to asi blbě, ale podle mého názoru by te s takovímhle scriptem musel každej vyrazit. Důvod je ten, že ty tvé scripty nejsou v žádném případě napsané jako OOP. Ty si v podstatě jenom "klasicky" napsaný kód uzavřel do třídy a jedné její metody. Musíš rozlišovat mezi OOP a uzavřením kódu do třídy. Zkus tu napsat co přesně máš vlastně zaúkol udělat pak bude jednoduší pomoct ti s přesnějším návrhem. |
||
mila Profil |
#10 · Zasláno: 25. 3. 2008, 14:57:49
Studuj tady:
http://framework.zend.com/manual/en/zend.auth.html |
||
Časová prodleva: 16 let
|
0