Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 5. diel - Ners - Registrácia užívateľov v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Odpovedá 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.

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?

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

Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
/* Life runs on code */
Avatar
Bugy
Člen
Avatar
Odpovedá 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 :-(

Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
/* Life runs on code */
Avatar
Bugy
Člen
Avatar
Odpovedá 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>
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovedá 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.

Odpovedať
/* Life runs on code */
Avatar
Odpovedá 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

Editované
Odpovedať
∞ ... 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...

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 138.