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
tomgerzicak
Člen
Avatar
tomgerzicak:11.1.2017 1:19

Čau, mám takový problém, vždycky, když se zkouším přihlásit se mi vypíší tyto chyba, nemáte s tím někdo zkušenosti, děkuji.
Chyby:
Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Champ 'jmeno' inconnu dans where clause in C:\wamp\www\re­dakcak\Db.php on line 60

Fatal error: Call to a member function execute() on a non-object in C:\wamp\www\re­dakcak\Db.php on line 61

tady je můj zdroják, ale myslím, že bude spíš problém v Db :/

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

if ($_POST)
{
        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
                {
                        Db::query('
                                INSERT INTO uzivatele (jmeno, heslo)
                                VALUES (?, SHA1(?))
                        ',$_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");
                        $_SESSION['uzivatel_id'] = Db::getLastId();
                        $_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
                        $_SESSION['uzivatel_admin'] = 0;
                        header('Location: administrace.php');
                        exit();
                }
        }
}
?>


<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Registrace</title>
</head>

<body>
<form method="post">

        <?php if(isset($zprava)){ echo("<p>".$zprava."</p>");} ?>
        <p>Jméno: <input type="text" name="jmeno"></p>
        <p>Heslo: <input type="text" name="heslo"></p>
        <p>Heslo znovu: <input type="text" name="heslo_znovu"></p>
        <p>Aktuální rok: <input type="text" name="rok"></p>
        <input type="submit" value="Registrovat">
</form>
</body>
</html>
Editované
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovedá na tomgerzicak
Jan Lupčík:11.1.2017 6:32

Vždyť tohle je registrace, ne přihlášení. o_O
Jinak jsi si jistý, že máš v databázi sloupec jmeno?

Odpovedať
TruckersMP vývojář
Avatar
tomgerzicak
Člen
Avatar
Odpovedá na Jan Lupčík
tomgerzicak:11.1.2017 7:57

Jo, promiň, už bylo celkem pozdě a seděl jsem nad tím už hodně dlouho, sloupec jméno tam mám, právě, když jsem si stáhl i tu závěrečnou verzi z poslední lekce a ukazuje to uplně stejnou chybu.

Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovedá na tomgerzicak
Jan Lupčík:11.1.2017 15:37

Pokud je tedy přiložený kód registrace a máš problém s přihlášením, hodil by se zdrojový kód přihlášení. Stačí ten kód nahrát např. pomocí zdejšího Dev-Lighteru a odpovědět mi na tento komentář jenom odkazem na zdrojový kód. :)

Odpovedať
TruckersMP vývojář
Avatar
tomgerzicak
Člen
Avatar
Odpovedá na Jan Lupčík
tomgerzicak:11.1.2017 16:47

Tak se omlouvám, problém jsem vyřešil, jsem totiž **** , byla chyba v databázi, místo sloupečku 'jmeno' jsem měl 'jméno' a pak to házelo chyby. Děkuji za pomoc

Avatar
Doktor
Člen
Avatar
Doktor:19.1.2017 0:12

Zdravím,
mám problém s registrací. Konkrétně s tím, že se mi neuloží data do db. Hodí mě to na administraci, vypíše, že jsem přihlášen jako bla bla bla... Ale data v db poté nejsou. Ze zoufalosti jsem to celý zkopíroval i názvy proměnných jsem nechal prostě vše. Tak buď jsem kolosální blbec (nevylučuju to) a nebo nevím.

Když jsem zadal do databáze data "ručně", tak mi to přihlásit jde. Zadat tam to zahashované heslo bylo něco, ale to je fuk. Takže problém je jen v tý registraci. Nějaký nápad?

Díky za rady :-)

Avatar
Jan Lupčík
Tvůrce
Avatar
Jan Lupčík:19.1.2017 16:57

Oprava problému s nezaregistrováním uživatele, ale pouhým přihlášením
Po komunikaci přes soukromé zprávy s Doktor jsme zjistili v čem je chyba - DB si neví rady s nezadanou hodnotou admin. Pokud tedy není tento sloupec nastaven na některou z výchozích hodnot, vyhodí to pouze Warning (jednoduše - nezastaví to běh skriptu, ale ani se nikdo nedozví chybu). Pokud má někdo podobný problém, stačí pouze udělat některou z uvedených možností.

  1. V tabulce nastavit sloupečku admin výchozí hodnotu NULL nebo vlastní - 0.
  2. Opravit SQL dotaz pro registraci na následující podobu:
Db::query('
        INSERT INTO uzivatele (jmeno, heslo, admin)
        VALUES (?, SHA1(?), 0)
', $_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");
Odpovedať
TruckersMP vývojář
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Jan Lupčík
David Hartinger:19.1.2017 17:27

Díky, ono MySQL měnilo výchozí chování. Mám to v plánu upravit, v zakládacích skriptech by měla být výchozí hodnota.

Odpovedať
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:11.7.2017 4:03

Dobrý den mám problém s tímto scriptem vždy když ho dám na web nezobrazí stranka a pouze se mi vypíše chyba Tato stránka nefunguje HTTP ERROR 500. Podle všeho by ale web by měl podporovat plně php. Nějak se s tím už delší dobu trápím protože bych rád dal dohromady redakční systém pro muj portál. http://obscurefreaks.tk/

Odpovedať
Neaktivní uživatelský účet
Avatar
Peter Schoeller:4.11.2017 21:58

Zdravim komunitu.
Dnes som sa vratil k tomuto skriptu a z dovodu ze vraj SHA1 uz nie je bezpecny som skusil opravit hash. Chcem sa opytat na vas nazor, ci to je bezpecne.
Povodna cast:

Db::query('
       INSERT INTO uzivatele (jmeno, heslo)
       VALUES (?, SHA1(?))
       ', $_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");

a moja upravena verzia: (mam tam viac parametrov na vlozenie, ale primarna otazka znie na bezpecnost hesla)

Db::query('
       INSERT INTO members (login, vorname, nachname, email, heslo, date_reg)
       VALUES (?, ?, ?, ?, ?, NOW())
        ', $_POST['login'], str_replace(' ','-', $_POST['vorname']), str_replace(' ','-', $_POST['nachname']), $_POST['email'], password_hash($_POST['heslo'], PASSWORD_BCRYPT));

Potom pri naslednom prihlasovani je tato cast:

$uzivatel = Db::queryOne('
     SELECT id, login, admin, heslo
     FROM members
     WHERE login=?
        ', $_POST['login']);
        if (!password_verify($_POST['heslo'], $uzivatel['heslo'])) {
        // chybove hlasenie
        } else {
        // pokracovanie

Dakujem za vase nazory.

Editované
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.