Autor Zpráva
Ronny
Profil *
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
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 *
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
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 *
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 *
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 *
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
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
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
Studuj tady:
http://framework.zend.com/manual/en/zend.auth.html

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: