Autor Zpráva
theNookyn
Profil
Udělal jsem s pomocí kamaráda nedodělanou aplikaci pro uživatelskou část. Mám jen registraci a protože jsem dnes pochopil jak na OOP, tak se chci zeptat jestli by se dalo ještě něco změnit/zlepšit.

<?php
require("db.php");
class Uzivatele{
  function registrace($prezdivka, $email, $heslo){
    $prezdivka = str_replace(" ", "_", $prezdivka);
    if(!empty($prezdivka) AND !empty($email) AND !empty($heslo)){
      $pocet_uzivatelu = mysql_num_rows(mysql_query("SELECT * FROM uzivatele WHERE email='".$email."'"));
      if($pocet_uzivatelu<1){
        $query = "INSERT INTO uzivatele (prezdivka, email, heslo, ip, datum) VALUES ('".mysql_real_escape_string($prezdivka)."', '".mysql_real_escape_string($email)."', '".sha1(md5($heslo))."', '".$_SERVER['REMOTE_ADDR']."', now())";   
        if(mysql_query($query)==true){
          print "Úspěšně zaregistrován!";
        }else{
          print "Chyba při registraci!";
        }
      }else{
        print "Tento email je již použit!";
      }
    }else{
      print "Pole nesmí být prázdné!";
    }
  }
}
$uzivatel = new Uzivatele;
$uzivatel->registrace("Nookyn", "theNookyn@gmail.com", "test");
?>


Chybí mi ještě upravení profilu uživatele a zobrazení profilu.
Tori
Profil
theNookyn:
Mohlo by tam být aspoň přihlášení/odhlášení, případně smazání uživatele. Pokud budete mít i několik typů uživatelů s různými oprávněními, tak by těch funkcí bylo potřeba více (blokování uživatelů, změny oprávnění apod.)

Jinak osobně bych místo print "Výsledek akce" jen vracela tu chybovou hlášku (v případě chyby) anebo true (když všechno proběhne jak má). Ale možná na tohle ostatní budou mít jiný názor.
Tirus
Profil
theNookyn:
jak řekla Tori, ale myslím. že k tomu budeš stejně směřovat. můžu ti ukázat své co sám ještě dělám. Neni to úžasná práce, ale pro inspiraci. Sám se OOP učím.
Odkaz
Sám momentálně koukám, že mi tam chybí kontrola duplicity
theNookyn
Profil
Tori:
Toto je jen uživatelská část, nikoliv administrátorská.
Z pohledu uživatele bych radši volil možnost print "Výsledek akce", než vypsání celé chyby. Navíc neni problém ten kus přepsat tak, aby se dala ta chyba zjistit.

// Až budu mít více, určitě ještě dodám.

Tirus:
Určitě se podívam na tvé práce :)
Tirus
Profil
theNookyn:
s tím smazáním uživatele, dej ho tam.. nebuď jak na facebooku :) ... uživatel by měl mít právo si sám smazat svůj účet.
theNookyn
Profil
Tirus:
Já jsem si na facebooku "smazal" (deaktivoval) účet už 4× s tím, že se už nikdy na fb nevrátím. Ale opak byl pravdou, hned po pár hodinách jsem zase projížděl příspěvky. To mě zaráží ještě teď že nenechají člověka si smazat účet.
Tirus
Profil
theNookyn:
proto ti to říkám. Uživatel by měl mít právo s jeho účtem (resp. údaji) nakládat jak myslí (ovšem aby neohrozil tvoji aplikaci)
Tirus
Profil
theNookyn:
udělal jsem ve svém kódu pár úprav, včetně kontroly duplicity uživatelského jména a emailu. Když tě k tomu něco napadně, či tam něco objevíš. Napiš, budu rád.
theNookyn
Profil
Tirus:
Ok. A děkuji za inspiraci :)!
Tirus
Profil
theNookyn:
pak se poděl semnou ;) .. v mém profilu najdeš email ;) tak se klidně ozvi
theNookyn
Profil
Tirus:
Určitě napíšu :D
joe
Profil
1. Rozmysli si název třídy, buď Uživatel nebo Uživatelé a pak s tím dále počítej. Třídu máš pojmenovanou Uživatelé a přiřazuješ ji do proměnné $uzivatel
2. Nauč se používat vyjímky, v budoucnu to usnadní práci.
3. Z funkcí vracej nějaké hodnoty - TRUE/FALSE/NULL nebo nějaký řetězec, podle kterého poznáš, jak se funkce vykonala
4. Při vkládání do databáze je dobré z té funkce vracet číslo vloženého řádku
5. sha1(md5($heslo)) tohle je zbytečné, místo toho přidej k heslu raději nějaký řetězec, nejlépe pro každého uživatele jiný, stačí tedy použít třeba jen sha1($heslo . 'neco')
Tirus
Profil
joe:
k tomuhle se přidám i já... máš po ruce nějakej článek o vyjímkách či ne? :)
Bertram
Profil
Já bych asi třídu uživatel nezanášel registrací, ale vytvořil třídu registrace která by se o tuto funkčnost starala spolu s validací a věcmi s tím spojené.
theNookyn
Profil
joe:
vyjímky? ještě jsem o nich neslyšel...
Bertram
Profil
Pouze demonstrativní příklad jak třídy Registration, tak i zpracování vyjímky.
<?php
  class RegistrationException extends Exception { }
  
  
  class Registration
  { 
    // místo databáze
    private $userName = "theNookyn";
    
    public function isValidUserName($name)
    {
      //Pokud se toto userName už používá, vyhodí se výjimka.
      if($name == $this->userName) 
      {
        throw new RegistrationException("<p style='color:red'>Uživatelské jméno \"$name\" se už používá!</p>");
      }
      else 
      {
        print "<p>Uživatelské jméno \"$name\" je jedinečné</p>";
      }
    }
  }
  
  
  try {
      $objRegistrace = new Registration;
      $objRegistrace->isValidUserName ('Lojza');
      $objRegistrace->isValidUserName ('theNookyn');
  }
  catch (RegistrationException $e) {
      print ($e->getMessage());
  }
?>
blizzboz
Profil
theNookyn:
to čo si predviedol neni OOP, je tam len jedna procedúra ktorú si obalil do triedy. pri OOP tvoria základ architektúry dáta, nie procedúry a funkcie.
theNookyn
Profil
S OOP začínam, tak je jasné, že ze začátku nebudu mít celý script na jedničku.

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: