Autor Zpráva
serii
Profil *
zdravím,
mám takovej problém
mám třídu,kde mám formulář...
class grafika{
  public function LoginForm(){
   $form = '
   <form method="post">
      <input type="text" name="nickname">
      <input type="password" name="pass">
      <input type="submit" name="Přihlásit se">
   </form>
   ';
   return $form;
  }
}
a potom třídu s kontrolou přihlášení..
pokud nejsem přihlášen tam by mě to mělo vypsat formulář pro přihlášení..
  public function check(){
    if(isset($_SESSION['name'])){
      return "1";
    }else{    
      $text = "Nejsi přihlášen,prosím přihlšte se pomocí tohoto formuláře.";
      return $text."".grafika::LoginForm();
    }  
  }
potíž je v tom,že pokud tam nechám return,tak mě to v php zobrazí takhle:
Nejsi přihlášen,prosím přihlšte se pomocí tohoto formuláře. <form method="post"> <input type="text" name="nickname"> <input type="password" name="pass"> <input type="submit" name="Přihlásit se"> </form>
jak udělat aby se to znova přehodilo do html?
když tam dám místo return "echo" tak to sice jde,ale zobrazí se to mimo vzhled..
Joker
Profil
serii:
jak udělat aby se to znova přehodilo do html?
Neposílat to pak do htmlspecialchars (vsadím se, že něco takového se s tím potom dělá).

Ale ten kód jako celek mi připadá jen těžko použitelný.
Metoda check dělá dvě nesouvisející věci najednou (kontroluje přihlášení a generuje HTML kód) a není moc použitelná v jiné situaci, než je konkrétně tahle.
Když budu v jiné situaci chtít úplně stejnou kontrolu, ale třeba jen trochu jinou hlášku, nelze metodu check použít.

Ještě navíc ta metoda míchá aplikační logiku (kontrola přihlášení) s prezentační logikou (HTML kód formuláře).

Dál mám podezření, že smyslem není vypsat přihlášenému uživateli text "1", ale že někde výš se detekuje, jestli ta metoda vrátila "1" nebo něco jiného, tzn. ta metoda v závislosti na situaci vrací různé navzájem nesouvisející věci.
serii
Profil *
Joker:
jo máš pravdu,já zapoměl že jsem si to tam dával.. :D
jinač myslel jsem to tak,že pokud to vrátí hodnotu 1,tak podmínka vygeneruje obsah pro přihlášené...
tohle je jen zkušební web,prostě pro zábavu a hlavně pro učení s oop..
já tu kontrolu uživatelu ani nevím jak jinak bych udělal..prostě pokud je něco v sessionu s nickem,tak bud vrátí 1 nebo 0...
tady v tomhle případě to mám už taky tak,tohle byla jen ukázka..
jinač to pak ten vzhled mám řešený v jiné funkci..která hlídá že pokud nejsem příhlášen tak to ukáže tu grafiku formuláře..
Joker
Profil
serii:
tohle je jen zkušební web,prostě pro zábavu a hlavně pro učení s oop..
Však právě proto píšu ty připomínky, co zlepšit.

já tu kontrolu uživatelu ani nevím jak jinak bych udělal..prostě pokud je něco v sessionu s nickem,tak bud vrátí 1 nebo 0...
Tohle je ovšem něco o dost jiného, než dělá kód v [#1], který pro přihlášeného uživatele vrací řetězec "1" a pro nepřihlášeného nějaký HTML kód, který se mu má zobrazit.
Což by bylo hodně vtipné třeba v situaci, kdy bych nepřihlášenému uživateli chtěl poslat řetězec "1" (kdyby to třeba jelo přes AJAX, místo textu bych chtěl zpátky poslat chybový kód a nepřihlášený uživatel by byl chybový kód 1).
Vůbec ta logika, kdy ze dvou možných situací v jedné obsah vracený uživateli sestavuje ta metoda a ve druhé to má dělat kód nad ní, je divná.

já tu kontrolu uživatelu ani nevím jak jinak bych udělal
V první řadě by ta metoda neměla dělat několik vzájemně nesouvisejících věcí. Když je to metoda na kontrolu přihlášeného uživatele, měla by vrátit, jestli je uživatel přihlášený. Do jiných věcí se vrtat nebude.
A pro rozlišení situace ano/ne máme datový typ boolean.
Taky bych to možná jasněji pojmenoval. V angličtině je výhodné metody vracející true/false pokud je/není nějaký stav, pojmenovávat „Is…“, v tomto případě třeba „IsLoggedIn“ (stejně dobře funguje při českých názvech ekvivalent „Je“, např. „JePrihlasen“)
No a když přihlášení spočívá v kontrole té položky session, implementace by měla jeden řádek:
public function IsLoggedIn() {
  return isset($_SESSION["name"]);
}
serii
Profil *
Joker:
no,já to vyřešil tak jak jsem psal ano=1 ne=0
další funkce mě řeší grafiku pro formulář
akorát mě zajímá,proč se mě nevypisujou chyby..pokud udělám chybu,tak se mě ukáže jen bílá obrazovka a v konzoli to píše 500 internal server error
zkoušel jsem chyby zapínat v htaccess ale nezabralo..
nikde je vypnutý nemám
Joker
Profil
serii:
no,já to vyřešil tak jak jsem psal ano=1 ne=0
Lepší je v takových případech boolean, ze kterého je hned zřejmé, o co jde.

akorát mě zajímá,proč se mě nevypisujou chyby
Tam hrají roli tři nastavení v konfiguraci: error_reporting (určuje co za chyby se bude oznamovat), display_errors (jestli se budou chyby zobrazovat do stránky) a log_errors (jestli se budou zapisovat do logu)

Doporučené nastavení je error_reporting - všechno (E_ALL, případně E_ALL | E_STRICT v PHP do 5.4), log_errors zapnout, display_errors na ostrém webu vypnout, ve vývojovém prostředí volitelně.

v konzoli to píše 500 internal server error
Chyby budou zapsané v logu*. Jeho umístění lze vyčíst z error_log v phpinfo.

Doplnění: *Samozřejmě pokud je zapnuté log_errors, ale to by mělo být.
serii
Profil *
Joker
hostuju na endoře,a asi před týdnem udělaly nějakou novinku,že errory se nemůžou povolovat přes htaccess ale přímo v jejich administraci,což já jsem nevěděl..
tak jsem to povolil,a pořád to nejde :D
myslím si že refresh mají každou hodinu,tak to pak skusím..
ps: pokud to nastavím jak v administraci tak v htaccess tak to píše to samý,akorát už se mě ukáže alespon ta chyba v prohlížeči... ten internal server error...
uvidím,napsal jsem jim tak snad to nějak opravěj
Joker
Profil
serii:
Jestli to pořád nebude fungovat, bude potřeba to řešit s podporou hostingu.

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: