NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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
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>
Editováno 11.1.2017 1:22
 
Odpovědět
11.1.2017 1:19
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá 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?

Odpovědět
11.1.2017 6:32
TruckersMP vývojář
Avatar
tomgerzicak
Člen
Avatar
Odpovídá 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.

 
Odpovědět
11.1.2017 7:57
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovídá 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. :)

Odpovědět
11.1.2017 15:37
TruckersMP vývojář
Avatar
tomgerzicak
Člen
Avatar
Odpovídá 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

 
Odpovědět
11.1.2017 16:47
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 :-)

 
Odpovědět
19.1.2017 0:12
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");
Odpovědět
19.1.2017 16:57
TruckersMP vývojář
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá 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.

Odpovědět
19.1.2017 17:27
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/

Odpovědět
11.7.2017 4:03
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.

Editováno 4.11.2017 22:00
 
Odpovědět
4.11.2017 21:58
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.