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

PHP PHP Nefunkční přihlášení/registrace American English version English version

Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

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):

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
Avatar
Odpovídá na Michal Kuba
Michal Štěpánek:

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
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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):

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
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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:

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
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Michal Kuba:

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):

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 10.4.2015 11:26
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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
Redaktor
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Michal Kuba:

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  +1 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.