NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 5 - NERS - Registrace uživatelů v PHP

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na Martin Havelka
Martin Havelka:21.2.2019 17:41

Vyřešeno, bylo to tím, že v phpMyAdmin byla nastavená malá max délka hesla a hash se do ní nevešel.

 
Odpovědět
21.2.2019 17:41
Avatar
Matěj Bína
Člen
Avatar
Matěj Bína:22.2.2019 19:53

Někdy v dřívější části PHP tutoriálu se zmiňovalo, že bez htmlspecialchars() by se někdo mohl nabourat do souboru s hesly. Byla by to v tomhle případě opravdu hesla, nebo hashe? A byly by mu k něčemu, když z nich nedokáže dostat původní hesla?

 
Odpovědět
22.2.2019 19:53
Avatar
Bugy
Člen
Avatar
Bugy:3.4.2019 0:06

Zdravím. Narazi jsem na problém u přihlášení:

Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'uzivatele_id' in 'field list' in /rs/Db.php on line 42

Fatal error: Call to a member function execute() on boolean in /rs/Db.php on line 43

Zmíněné řádky v Db.php:

$statement = self::$connection->prepare($query);
$statement->execute($params);

Vypadá to jako chyba co už byla výše zmíněná, ale nevím jak ji opravit. už jsem zkoušel přepisovat snad vše :-/

 
Odpovědět
3.4.2019 0:06
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Bugy
Jaroslav Smrž:3.4.2019 7:51

Chyba není v db.php, ale ve zpracování dotazu. Máš buď špatně pojmenovaný sloupec v databázi nebo input ve formu. Někde budeš mít pravděpodobně jen překlep v uzivatele_id.

Odpovědět
3.4.2019 7:51
/* Life runs on code */
Avatar
Bugy
Člen
Avatar
Odpovídá na Jaroslav Smrž
Bugy:3.4.2019 22:24

Sloupec v DB je pojmenovaný správně. Třeba registrace se provede i mě to přihlásí. Ale když se chci pak přihlásit znova, tak už to nejde. input by měl být taky ok. Viz níže

{
        if ($_POST['rok'] != date('Y'))
                $zprava = 'Chybně vyplněný antispam.';
        else if ($_POST['heslo'] != $_POST['heslo_znovu'])
                $zprava = 'Hesla nesouhlasí';
        else
        {
                $existuje = Db::querySingle('
                        SELECT COUNT(*)
                        FROM uzivatele
                        WHERE jmeno=?
                        LIMIT 1
                ', $_POST['jmeno']);
                if ($existuje)
                        $zprava = 'Uživatel s touto přezdívkou je již v databázi obsažen.';
                else
                {
                        $heslo = password_hash($_POST['heslo'], PASSWORD_DEFAULT);
                        Db::query('
                                INSERT INTO uzivatele (jmeno, heslo)
                                VALUES (?, ?)
                        ', $_POST['jmeno'], $heslo);
                        $_SESSION['uzivatel_id'] = Db::getLastId();
                        $_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
                        $_SESSION['uzivatel_admin'] = 0;
                        header('Location: administrace.php');
                        exit();
                }
        }
}

Zkoušel jsem co mě napadlo, vše jsem tu pročetl a nevím :-(

 
Odpovědět
3.4.2019 22:24
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Bugy
Jaroslav Smrž:4.4.2019 8:30

V registraci chybu nehledej. Když tě to zaregistruje, přihlásí a přesměruje, tak je to v pořádku. Podívej se do PHPMyAdmin, zdali záznam odpovídá a dej sem zdrojový kód stránky s přihlašováním. Problém bude tam.

Odpovědět
4.4.2019 8:30
/* Life runs on code */
Avatar
Bugy
Člen
Avatar
Odpovídá na Jaroslav Smrž
Bugy:4.4.2019 9:01

V PHPMyAdmin je vše o.k. Níže stránka s přihlášením:

<?php
session_start();
require('Db.php');
Db::connect('127.0.0.1', 'aaa', 'aaa', 'aaa');

if (isset($_SESSION['uzivatel_id']))
{
        header('Location: administrace.php');
        exit();
}

if ($_POST)
{
        $uzivatel = Db::queryOne('
                SELECT uzivatele_id, admin, heslo
                FROM uzivatele
                WHERE jmeno=?
        ', $_POST['jmeno']);
        if (!$uzivatel || !password_verify($_POST['heslo'], $uzivatel['heslo']))
                $zprava = 'Neplatné uživatelské jméno nebo heslo';
        else
        {
                $_SESSION['uzivatel_id'] = $uzivatel['uzivatele_id'];
                $_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
                $_SESSION['uzivatel_admin'] = $uzivatel['admin'];
                header('Location: administrace.php');
                exit();
        }
}
?>

<!DOCTYPE html>
<html lang="cs-cz">
<head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="styl.css" type="text/css" />
        <title>Přihlášení do administrace</title>
</head>

<body>
        <article>
                <div id="centrovac">
                        <header>
                                <h1>Přihlášení do administrace</h1>
                        </header>
                        <section>
                                <?php
                                if (isset($zprava))
                                        echo('<p>' . $zprava . '</p>');
                                ?>

                                <form method="post">
                                        Jméno<br />
                                        <input type="text" name="jmeno" /><br />
                                        Heslo<br />
                                        <input type="password" name="heslo" /><br />
                                        <input type="submit" value="Přihlásit" />
                                </form>


                        </section>
                        <div class="cistic"></div>
                </div>
        </article>
</body>
</html>
 
Odpovědět
4.4.2019 9:01
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Bugy
Jaroslav Smrž:4.4.2019 9:22

Tady na první pohled nic nevidím, ale vzhledem k té chybě máš možná někde místo uzivatele_id - uzivatel_id. Zkus tedy všude (včetně databáze), kde je uzivatele_id změnit na uzivatel_id, pak by mělo vše fungovat.

Odpovědět
4.4.2019 9:22
/* Life runs on code */
Avatar
Odpovídá na Bugy
Tomáš Novotný:4.4.2019 9:24

ahoj.. s velkou pravděpodobností máš v DB sloupec 'uzivatel_id' a v SQL dotazu SELECT 'uzivatele_id'
při registraci a přihlášení ho totiž explicitně nepoužíváš (využíváš metody getLastId) - tj. funguje, ale při samostatném přihlášení už ano - tj. nefunguje

Editováno 4.4.2019 9:25
Odpovědět
4.4.2019 9:24
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Bugy
Člen
Avatar
Bugy:4.4.2019 9:29

Zde odkaz na screen databaze screen
Zkusím tedy ještě ty přepisy...

 
Odpovědět
4.4.2019 9:29
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 10 zpráv z 138.