IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Martin Suchodol:3.7.2014 10:32

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 Martin Suchodol
Luboš Běhounek Satik:3.7.2014 10:45

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
https://www.facebook.com/peasantsandcastles/
Avatar
Martin Suchodol:3.7.2014 11:08

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 Martin Suchodol
Luboš Běhounek Satik:3.7.2014 11:14

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
https://www.facebook.com/peasantsandcastles/
Avatar
Martin Suchodol:3.7.2014 11:20

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
Martin Suchodol:3.7.2014 11:26

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 Martin Suchodol
Luboš Běhounek Satik:3.7.2014 11:29

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
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Martin Suchodol:3.7.2014 11:32

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 Martin Suchodol
Luboš Běhounek Satik:3.7.2014 11:37

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
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Martin Suchodol:3.7.2014 11:38

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

 
Nahoru Odpovědět
3.7.2014 11:38
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Martin Suchodol
David Hartinger:3.7.2014 11:40

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
New kid back on the block with a R.I.P
Avatar
Odpovídá na Martin Suchodol
Luboš Běhounek Satik:3.7.2014 11:45

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
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na David Hartinger
Martin Suchodol:3.7.2014 11:47

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
Odpovídá na Luboš Běhounek Satik
Martin Suchodol:3.7.2014 11:48

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 Martin Suchodol
Luboš Běhounek Satik:3.7.2014 11:55

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
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Martin Suchodol:3.7.2014 11:59

Jo teď to jede jak má díky.

 
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.