Avatar
tribal.cz
Redaktor
Avatar
tribal.cz:

Ahoj mám menší problém. Mám skript pro přihlašování který funguje jak má dokonce i přesměrování na jinou stránku když odešlu formulář, ale jen do chvíle něž ověřuji login a heslo pomocí databaze.

if($_SESSION['login'] == false){
                                        $log = $_POST['login'];
                                        $pass = $_POST['password'];
                                        $verification = $this->selectUser($log, $pass)->rowCount();
                                        $row = $this->selectUser($log, $pass)->fetch();
                                        if($verification == 1) {
                                                $_SESSION['login'] = stripslashes($_POST['login']);
                                                $_SESSION['function'] = $row['function'];
                                                header("Location: admin.php");
                                        } else {
                                                throw new UserException('Zadaná kombinace loginu a hesla je neplatná');
                                        }
                                } else {
                                        throw new UserException('Již jste přihlášn/a');
                                }

vím že před voláním header nesmí být žádný html výstup a také tam není, ale jak jsem už řekl když header umístím takto:

header("Location: admin.php");
if($_SESSION['login'] == false){
                                        $log = $_POST['login'];
                                        $pass = $_POST['password'];
                                        $verification = $this->selectUser($log, $pass)->rowCount();
                                        $row = $this->selectUser($log, $pass)->fetch();
                                        if($verification == 1) {
                                                $_SESSION['login'] = stripslashes($_POST['login']);
                                                $_SESSION['function'] = $row['function'];
                                        } else {
                                                throw new UserException('Zadaná kombinace loginu a hesla je neplatná');
                                        }
                                } else {
                                        throw new UserException('Již jste přihlášn/a');
                                }

tak vše funguje jak má.

 
Odpovědět 3.7.2014 10:32
Avatar
Odpovídá na tribal.cz
Luboš Běhounek (Satik):

Nedojde tam k nějaké chybě, která by se před tím zavoláním header() vypsala?
Případně co je uvnitř funkcí selectUser?

Pokud to pořád nepomůže, zkusil bych prostě postupně kód odmazávat a zjistit, která část to způsobuje.

EDIT: Případně bych místo toho header() zkusil skript ukončit a kouknout se, jestli tam nebylo něco vypsáno (předpokládám, že zavoláním header() na špatném místě se ten původní obsah stránky přebije, takže bys tu případnou chybovou hlášku ani neviděl).

Editováno 3.7.2014 10:49
Nahoru Odpovědět 3.7.2014 10:45
:)
Avatar
tribal.cz
Redaktor
Avatar
tribal.cz:

select user je jednoduché statické volání datábaze ve formátu Db::query("SELECT * FROM users WHERE login = ? AND password = ?", array($login, $pass).

Nevím jestli jsem tě teď pochopil ale zavolám-li funkci header jak je tak se mi vypíše klasická hláška

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\e85\class\Login.php:35) in C:\wamp\www\e85\class\Login.php on line 42.

ale skusím postupně zakomentovat jednotlivé čáti skriptu

 
Nahoru Odpovědět 3.7.2014 11:08
Avatar
Odpovídá na tribal.cz
Luboš Běhounek (Satik):

Co se stane, pokud před tím header něco vypíšeš - třeba takto:

echo "ahoj";
header("Location: admin.php");

zůstane tam to ahoj nebo na té stránce bude jen ten warning od header()?

Editováno 3.7.2014 11:14
Nahoru Odpovědět 3.7.2014 11:14
:)
Avatar
tribal.cz
Redaktor
Avatar
tribal.cz:

ani jedno normálně se to přesměruje v případě že dám header před podmínkua v případě že je header v podmínce tak se vypíše ahoj ale i hláška

 
Nahoru Odpovědět 3.7.2014 11:20
Avatar
tribal.cz
Redaktor
Avatar
tribal.cz:

tak jo ted to funguje ale je to osekané o kontrolu toho zda je uživatel online

//if($_SESSION['login'] == false){
                                        $log = $_POST['login'];
                                        $pass = $_POST['password'];
                                        $verification = $this->selectUser($log, $pass)->rowCount();
                                        $row = $this->selectUser($log, $pass)->fetch();
                                        if($verification == 1) {
                                                $_SESSION['login'] = stripslashes($_POST['login']);
                                                //$_SESSION['function'] = $row['function'];
                                                header("Location: admin.php");
                                        } else {
                                                throw new UserException('Zadaná kombinace loginu a hesla je neplatná');
                                        }
                                //} else {
                                //      throw new UserException('Již jste přihlášn/a');
                                //}
 
Nahoru Odpovědět 3.7.2014 11:26
Avatar
Odpovídá na tribal.cz
Luboš Běhounek (Satik):

Máš tam nějaké kontroly na ty proměnné, co používáš?
Něco jako.

if (isset($_SESSION['login']))
Nahoru Odpovědět 3.7.2014 11:29
:)
Avatar
tribal.cz
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
tribal.cz:

pokud myslíš platnost $_SESSION['login'] tak na to používám

if($_SESSION['login'] == true/false)
 
Nahoru Odpovědět 3.7.2014 11:32
Avatar
Odpovídá na tribal.cz
Luboš Běhounek (Satik):

Ano,ale co když tam ta sešna vůbec není, co když jsi ji předtím ani nenastavil?

Nahoru Odpovědět 3.7.2014 11:37
:)
Avatar
tribal.cz
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
tribal.cz:

uch jak to teď myslíš jako že je prázdná jo?

 
Nahoru Odpovědět 3.7.2014 11:38
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tribal.cz
David Čápka:

Také jsi mohl zapomenout na session_start(). Mysli i na to, že SESSION ti za pár minut zmizí, všude musí být isset nebo !empty.

Nahoru Odpovědět 3.7.2014 11:40
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na tribal.cz
Luboš Běhounek (Satik):

Jj, že by byla prázdná, pokud si to dobře pamatuju, tak PHP pak vyhodí výjimku?

Nahoru Odpovědět 3.7.2014 11:45
:)
Avatar
tribal.cz
Redaktor
Avatar
Odpovídá na David Čápka
tribal.cz:

session_start() mám. Bez toho by se mi to ani nepřihlásilo no teď ale aspoň vím co přesně to dělalo tak si s tim pohraju a snad na něco přijdu

 
Nahoru Odpovědět 3.7.2014 11:47
Avatar
tribal.cz
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
tribal.cz:

ale to je účel té podmínky když se odhlašuju tak voláam session_destroy() což mi smaže všechny proměnné SESSION a když se přihlašuji tak musí být prázdná ne?

 
Nahoru Odpovědět 3.7.2014 11:48
Avatar
Odpovídá na tribal.cz
Luboš Běhounek (Satik):

Pokud je prádzná, tak tuším není ani true ani false , myslím, že by tam mělo být něco jako

if (!isset($_SESSION['login']) || !$_SESSION['login'])
Nahoru Odpovědět 3.7.2014 11:55
:)
Avatar
tribal.cz
Redaktor
Avatar
 
Nahoru Odpovědět 3.7.2014 11:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.