Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Problém s přihlášením do databáze

Dobrý den,

tentokrát mám patálie s administrací WEBU. Snažím se postupovat podle tutoriálu z IT Network - je to můj první databázový systém a nějak se začít musí... Bohužel tam nikdo můj problém v komentářích neřešil, a já mám strach že bych se nemusel dočkat brzké odpovědi.

Všechno mi funguje až do okamžiku když se chci se zaregistrovaným uživatelem přihlásit. Pokaždé dostanu chybovou hlášku i přesto, že uživatel je vytvořený v databázi správně.

Útržek registrace:

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 lang="cs-cz">
<head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="styl.css" type="text/css" />
        <title>Registrace</title>
</head>

<body>
        <article>
                <div id="centrovac">
                        <header>
                                <h1>Registrace</h1>
                        </header>
                        <section>
                                <?php
                                        if (isset($zprava))
                                                echo('<p>' . $zprava . '</p>');
                                ?>

                                <form method="post"><input type="hidden" name="PHPSESSID" value="IJL9Dye9jaOXkvjAfiChGz7LZxb" />
                                        Jméno<br />
                                        <input type="text" name="jmeno" /><br />
                                        Heslo<br />
                                        <input type="password" name="heslo" /><br />
                                        Heslo znovu<br />
                                        <input type="password" name="heslo_znovu" /><br />
                                        Zadejte aktuální rok (antispam)<br />
                                        <input type="text" name="rok" /><br />
                                        <input type="submit" value="Registrovat" />
                                </form>
                        </section>
                        <div class="cistic"></div>
                </div>
        </article>
</body>

Útržky funkcí:

public static function querySingle($query) {
		$statement = self::executeStatement(func_get_args());
		$data = $statement->fetch();
		return $data[0];
	}

public static function query($query) {
		$statement = self::executeStatement(func_get_args());
		return $statement->rowCount();
	}

public static function getLastId()
	{
		return self::$connection->lastInsertId();
	}

public static function queryOne($query) {
		$statement = self::executeStatement(func_get_args());
		return $statement->fetch(PDO::FETCH_ASSOC);
	}

Útržek prihlášení:

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

if ($_POST)
{
        $uzivatel = Db::queryOne('SELECT uzivatele_id, admin FROM uzivatele WHERE jmeno=? AND heslo=SHA1(?)', $_POST['jmeno'], $_POST['heslo'] . "t&#ssdf54gh");
        if (!$uzivatel)
                $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();
        }
}
Omlouvám se za nepřehlednost, ale jsem už docela zoufalý. Snad to bude jenom nějaká banalita kterou přehlížím.

Mnohokrát předem děkuji člověku který by se mi rozhodl pomoci v mém donquichotském boji s PHP. :D

Zdrojové kódy vkládejte do tagu Code (Kurt)

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny