NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nefunkční přihlášení/registrace

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:9.4.2015 22:27

Ahoj.
Pomocí MVC tutoriálu jsem začal "vylepšovat" web. Skoro hned jsem ale narazil při registraci a přihlášení. Kód jsem použil ze zdejších zdrojů, upravil si své informace pro připojení k db a jiné drobnosti.. ale pokud chci zkusit registraci nebo přihlášení, nejprve mi to psalo chybovou hlášku, která ale naskočit neměla a nyní mi to vyhodí čistou stránku s hodnotou 1.

Nevím si s tím už pěkných pár hodin rady :(

 
Odpovědět
9.4.2015 22:27
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):9.4.2015 22:39

Ahoj,

je sice hezký, že ti to vyhodí čistou stránku, ale co třeba postnout nějaký kód, abychom se na to mohli podívat?

Nahoru Odpovědět
9.4.2015 22:39
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Michal Kuba
Michal Štěpánek:9.4.2015 22:41

Myslíš, že ti bez ukázky kódu někdo bude umět poradit? Trošku víc podrobností by to chtělo...

Nahoru Odpovědět
9.4.2015 22:41
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:9.4.2015 22:43

Jo, na to jsem myslel.. Snad to příliš nezahltím.. Tohle je ta důležitá část z RegistraceKon­troler.php :

public function zpracuj($parametry)
    {
                // Hlavička stránky
                $this->hlavicka['titulek'] = 'Registrace';
                if ($_POST)
                {
                        try
                        {
                                $spravceUzivatelu = new SpravceUzivatelu();
                                $spravceUzivatelu->registruj($_POST['jmeno'], $_POST['heslo'], $_POST['heslo_znovu'], $_POST['rok']);
                                $spravceUzivatelu->prihlas($_POST['jmeno'], $_POST['heslo']);
                                $this->pridejZpravu('Byl jste úspěšně zaregistrován.');
                                $this->presmeruj('administrace');
                        }
                        catch (ChybaUzivatele $chyba)
                        {
                                $this->pridejZpravu($chyba->getMessage());
                        }

Odkazuje se to na správceUzivate­lu.php :

public function vratOtisk($heslo)
        {
                $sul = 'fd16sdfd2ew#$%';
                return hash('sha256', $heslo . $sul);
        }

        // Registruje nového uživatele do systému
        public function registruj($jmeno, $heslo, $hesloZnovu, $rok)
        {

                if ($rok != date('Y'))
                        throw new ChybaUzivatele('Chybně vyplněný antispam.');
                if ($heslo != $hesloZnovu)
                        throw new ChybaUzivatele('Hesla nesouhlasí.');
                $uzivatel = array(
                        'jmeno' => $jmeno,
                        'heslo' => $this->vratOtisk($heslo),
                );
                try
                {
                        Db::vloz('uzivatele', $uzivatel);
                }
                catch (PDOException $chyba)
                {
                        throw new ChybaUzivatele('Uživatel s tímto jménem je již zaregistrovaný.');
                }
        }

        // Přihlásí uživatele do systému
        public function prihlas($jmeno, $heslo)
        {
                $uzivatel = Db::dotazJeden('
                SELECT uzivatele_id, jmeno, admin
                FROM uzivatele
                WHERE jmeno = ? AND heslo = ?
                ', array($jmeno, $this->vratOtisk($heslo)));

                if (!$uzivatel)
                        throw new ChybaUzivatele('Neplatné jméno nebo heslo.');
                $_SESSION['uzivatel'] = $uzivatel;
        }

a poslední co by to mělo ovlivňovat jsou tyto dvě metody v Dp.php :

public static function dotaz($dotaz, $parametry = array()) {
                $navrat = self::$spojeni->prepare($dotaz);
                $navrat->execute($parametry);
                return $navrat->rowCount();
        }

        // Vloží do tabulky nový řádek jako data z asociativního pole
        public static function vloz($tabulka, $parametry = array()) {
                return self::dotaz("INSERT INTO `$tabulka` (`".
                implode('`, `', array_keys($parametry)).
                "`) VALUES (".str_repeat('?,', sizeOf($parametry)-1)."?)",
                        array_values($parametry));
        }

Musí tam být ne úplně překlep, ale asi nějaká drobnost, kvůli které to vlastně vypisuje prázdné... (pole?) .

 
Nahoru Odpovědět
9.4.2015 22:43
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):9.4.2015 22:49

Ještě jsem příliš nepobral "nyní mi to vyhodí čistou stránku s hodnotou 1". Jako že ti to hodí jen bílou stránku a je tam napsaná 1?

Nahoru Odpovědět
9.4.2015 22:49
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:9.4.2015 22:51

Jo, přesně tak..předtím to házelo chybovou hlášku, kterou mám někde v kódu nastavenou.. trochu jsem si s tím pohrál a vypisuje to jedničku.. pouze jedničku..

 
Nahoru Odpovědět
9.4.2015 22:51
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:9.4.2015 22:53

Ta jednička je způsobena tímto řádkem ve spravceUzivate­lu.php pod částí, kde se definuje $uzivatel :

die(print_r($uzivatel));
Editováno 9.4.2015 22:53
 
Nahoru Odpovědět
9.4.2015 22:53
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):9.4.2015 23:28

OK, a když ten die() odstraníš, tak?

Nahoru Odpovědět
9.4.2015 23:28
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:10.4.2015 7:20

Tak mi to píše "Neplatné jméno nebo heslo." byť to ale zadávám správně, přesně jako když jsem dělal registraci (u registrace mi to háže stejný problém, ale do db se uživatel vloží)

 
Nahoru Odpovědět
10.4.2015 7:20
Avatar
Odpovídá na Michal Kuba
Michal Štěpánek:10.4.2015 8:22

Něco je špatně v tom mechanismu, který obsluhuje kontrolu zadávaných údajů

Nahoru Odpovědět
10.4.2015 8:22
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Michal Kuba:10.4.2015 9:59

To si taky myslím, jenže co? :/

 
Nahoru Odpovědět
10.4.2015 9:59
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):10.4.2015 11:26

Zkus si vypsat hash toho hesla, jestli souhlasí s tím v DB.
U podmínky WHERE záleží i na velikosti písmen (včetně jména).

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
10.4.2015 11:26
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:10.4.2015 15:11

To nebyl špatnej nápad, když si tam vypíšu hash zadaného hesla (aspoň myslím, že to je on) tak mi vyskočí ten samý co v db ale navíc je za tím nějaký další nesmyslný kus otisku toho hesla, který ale v db už není..

v db je otisk: 84990d792c1a6­834d3fdcb60360006
a mě to vypíše navíc: d2c52387e03cb­ff7e9a11dfe1cb1e39de2 (tohle pokračuje za tím nahoře)

Nechápu kde se to tam vzalo ale :/

 
Nahoru Odpovědět
10.4.2015 15:11
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:10.4.2015 15:15

Tak mám asi problém vyřešen! já si totiž v db nastavil velikost pole heslo varchar(30), jenže tento hash se vytváří asi tak sto znakový, možná i delší.. takže jsem pro jistotu navýšil na 250 a novou registraci mi to již dobře přesměrovalo do administrace!! :)) to vypsání mi pomohlo, díky :)

 
Nahoru Odpovědět
10.4.2015 15:15
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 14 zpráv z 14.