ITnetwork Flashka zdarma C# týden
Akce! Pouze tento sleva až 80 % na kurzy C# .NET. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Lekce 6 - NERS - Editor článků v PHP

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, NERS - Registrace uživatelů v PHP, jsme dokončili administrační stránku jednoduchého redakčního systému. V dnešním PHP tutoriálu přidáme přihlašování.

Přihlašování

Vytvoříme skript prihlaseni.php. Jeho HTML část bude následující:

<!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>

                                <p>Pokud ještě nemáte účet, <a href="registrace.php">zaregistrujte se</a>.</p>
                        </section>
                        <div class="cistic"></div>
                </div>
        </article>
</body>
</html>

Vidíme PHP direktivu pro výpis chybové zprávy (pokud existuje) a formulář se jménem a heslem. Kód je téměř totožný s tím u registračního formuláře a měl by být tedy srozumitelný.

Nad HTML vložíme následující PHP blok:

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

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();
        }
}
?>

První řádky nám zpřístupní session a připojí se k databázi. Pokud je uživatel přihlášený, tak mu přihlašovací stránku zobrazovat nebudeme a přesměrujeme ho rovnou na administraci a skript zastavíme.

Pokud byl odeslán formulář, vybereme z databáze informace o uživateli podle zadaného jména a zkontrolujeme, zda se zadané heslo shoduje s otiskem hesla. Toho docílíme funkcí password_verify(), které zadáme jako parametry heslo a jeho otisk. Funkce nám následně vrátí true/false, podle toho, zda heslo souhlasí, či nikoliv. Pokud uživatele nenajdeme nebo bylo zadáno chybné heslo, uložíme chybovou hlášku. V případě úspěchu uložíme načtené informace o uživateli do session a tím ho přihlásíme. Dále ho přesměrujeme na administraci.

Můžete se zkusit přihlásit. Pokud jste ještě přihlášení z registrace, tak se odhlaste a přihlaste znovu.

Přihlašování uživatelů v PHP

Přidělení role administrátora

V našem systému máme u každého uživatele sloupec admin. Ten bude nabývat hodnoty 0 nebo 1 podle toho, zda je uživatel administrátor. Tuto hodnotu může nastavit nově registrovanému uživateli pouze administrátor webu pomocí phpMyAdmin. Přesuneme se tedy do phpMyAdmin a přepneme hodnotu admin u našeho účtu na 1 (na políčko stačí jen poklikat a hodnotu přepsat).

Administrátorská práva v phpMyAdmin

Nyní se odhlaste a přihlaste.

Editor článků

Přejděme k editoru článků. Vytvořme soubor editor.php a vložme do něj HTML blok:

<!DOCTYPE html>
<html lang="cs-cz">
<head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="styl.css" type="text/css" />
        <title>Editor článků</title>
</head>

<body>
        <article>
                <div id="centrovac">
                        <header>
                                <h1>Editor článků</h1>
                        </header>
                        <section>
                                <?php
                                if (isset($zprava))
                                        echo('<p>' . $zprava . '</p>');
                                ?>

                                <form method="post">
                                        <input type="hidden" name="clanky_id" value="<?= htmlspecialchars($clanek['clanky_id']) ?>" /><br />
                                        Titulek<br />
                                        <input type="text" name="titulek" value="<?= htmlspecialchars($clanek['titulek']) ?>" /><br />
                                        URL<br />
                                        <input type="text" name="url" value="<?= htmlspecialchars($clanek['url']) ?>" /><br />
                                        Popisek<br />
                                        <input type="text" name="popisek" value="<?= htmlspecialchars($clanek['popisek']) ?>" /><br />
                                        Klíčová slova<br />
                                        <input type="text" name="klicova_slova" value="<?= htmlspecialchars($clanek['klicova_slova']) ?>" /><br />
                                        <textarea name="obsah"><?= htmlspecialchars($clanek['obsah']) ?></textarea>
                                        <input type="submit" value="Odeslat" />
                                </form>
                        </section>
                        <div class="cistic"></div>
                </div>
        </article>
        <script type="text/javascript" src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
        <script type="text/javascript">
                tinymce.init({
                        selector: "textarea[name=obsah]",
                        plugins: [
                                "advlist autolink lists link image charmap print preview anchor",
                                "searchreplace visualblocks code fullscreen",
                                "insertdatetime media table contextmenu paste"
                        ],
                        toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
                        entities: "160,nbsp",
                        entity_encoding: "named",
                        entity_encoding: "raw"
                });
        </script>
</body>
</html>

Kód obsahuje opět jen jednoduchý HTML formulář a výpis chybové zprávy. Data se do formulářových polí vypisují z pole $clanek. Formulář má ještě jednu zvláštnost a tou je skryté pole s ID daného článku. Podle tohoto pole poznáme, zda vkládáme nový článek (bude prázdné) nebo zda editujeme existující (bude v něm ID tohoto článku).

Zajímavý je JavaScript na konci souboru, ve které načteme WYSIWYG editor TinyMCE. To je editor vzhledově podobný např. MS Wordu, který nám generuje HTML kód podle toho, co v něm naklikáme.

První skript je odkaz na online úložiště, ze kterého si prohlížeč TinyMCE stáhne. Druhý skript obsahuje nastavení editoru, zvolíme, že editor chceme vytvořit z textarea s názvem obsah. Další řádky nastavují pluginy a vypínají převod české diakritiky na entity, což je jinak poměrně nepříjemná záležitost.

Nad HTML kód dodejme obslužný PHP blok:

<?php
session_start();
if (empty($_SESSION['uzivatel_admin']))
        die('Nedostatecna opravneni');

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

$clanek = array(
        'clanky_id' => '',
        'titulek' => '',
        'obsah' => '',
        'url' => '',
        'popisek' => '',
        'klicova_slova' => '',
);
if ($_POST)
{
        if (!$_POST['clanky_id'])
        {
                Db::query('
                        INSERT INTO clanky (titulek, obsah, url, popisek, klicova_slova)
                        VALUES (?, ?, ?, ?, ?)
                ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova']);
        }
        else
        {
                Db::query('
                        UPDATE clanky
                        SET titulek=?, obsah=?, url=?, popisek=?, klicova_slova=?
                        WHERE clanky_id=?
                ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['clanky_id']);
        }
        header('Location: index.php?clanek=' . $_POST['url']);
        exit();
}
else if (isset($_GET['url']))
{
        $nactenyClanek = Db::queryOne('
                SELECT *
                FROM clanky
                WHERE url=?
        ', $_GET['url']);
        if ($nactenyClanek)
                $clanek = $nactenyClanek;
        else
                $zprava = 'Článek nebyl nalezen';
}

?>

Pokud uživatel není administrátor, zastavíme celý skript s chybovou hláškou. Pro kontrolu přihlášení administrátora nám nestačí isset(), ale musíme použít empty(). V session totiž může existovat klíč 'uzivatel_admin', ale může mít hodnotu 0.

Dále se připojíme k databázi a do proměnné $clanek si připravíme pole s prázdnými hodnotami. To aby se do formuláře nic nevypsalo a zároveň nám PHP neohlásilo chybu s neexistující proměnnou.

Pokud byl odeslán formulář, podíváme se do skrytého pole. Pokud je prázdné, vložíme nový článek do databáze. Pokud je v skrytém poli nějaká hodnota, updatujeme článek s tímto ID. SQL příkaz UPDATE jsme si ještě nepředstavovali, ale je velmi jednoduchý. Pomocí SET jednoduše nastavíme pole která potřebujeme. Co je důležité je nezapomenout na klauzuli WHERE, kde určíme které řádky se mají takto updatovat. Bez ní by se updatovaly všechny články na tyto hodnoty!

Po přidání nebo editaci článku na něj přesměrujeme.

Pokud nebyl odeslaný formulář, podíváme se, zda nemáme v GET url článku. To by znamenalo, že chceme nějaký editovat a proto se do pole $clanek pokusíme nahrát data z článku s tímto URL. Data se potom předvyplní do polí formuláře. Při neúspěchu vypíšeme chybovou hlášku.

Nyní si editor spusťte a vložte si článek s URL "uvod". To bude hlavní stránka našeho webu:

Editor článků TinyMCE v PHP

Článek uložte do databáze. Pokračovat budeme zas v příští lekci, NERS - Výpis článků v PHP.


 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
17 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
NERS - Registrace uživatelů v PHP
Všechny články v sekci
Databáze v PHP pro začátečníky
Miniatura
Následující článek
NERS - Výpis článků v PHP
Aktivity (5)

 

 

Komentáře

Avatar
Q.
Člen
Avatar
Q.:21.3.2014 20:42

No to je paráda.:)

 
Odpovědět 21.3.2014 20:42
Avatar
jos.pekar
Člen
Avatar
jos.pekar:22.4.2014 14:19

Ahoj. V Chrome nejde zobrazování javascriptové části (v nastavení je vše povoleno). V IE9 je vše v pořádku. Netušíte kde může být problém?

 
Odpovědět 22.4.2014 14:19
Avatar
Matěj Kripner
Redaktor
Avatar
Matěj Kripner:1.6.2014 16:38

Úžo :D Fakt krásně psaný

Odpovědět 1.6.2014 16:38
Give me a deep enough pipeline, and I shall move the world.
Avatar
Lukáš Linhart:17.6.2014 19:39

Ahoj mám takový problém že mi to nejde vůbec :D ... myslím tím přihlašování. když dám přihlásit nic se nestane i když uživatel existuje . kody jsou zkopírované přesně s přepsanou databází. takže já už fakt nevím děkuji předem

 
Odpovědět 17.6.2014 19:39
Avatar
Matěj Kripner
Redaktor
Avatar
Odpovídá na Lukáš Linhart
Matěj Kripner:18.6.2014 7:37

Navrhuju zkusit sehnat nějakou chybovou hlášku. Může ji vyhazovat např. prohlížeč nebo php.

Odpovědět 18.6.2014 7:37
Give me a deep enough pipeline, and I shall move the world.
Avatar
Lukáš Linhart:18.6.2014 20:46

Nemám zádnou chybovou hlášku, akorád když dám jakože přihlásit se, tak zmízí všechno prázdná stránka, a url je pořád stejná :/

 
Odpovědět 18.6.2014 20:46
Avatar
kivi8
Člen
Avatar
kivi8:2.7.2014 16:09

Ahoj :) Článek a obecně celou síť musím pochválit moc mi obojí pomohlo. Teď píšu jeden menší projekt a potřeboval jsem vyřešit klasickou registraci a přihlášení. Použil jsem wrapper z předchozích článku (upřímně netuším jak to funguje, ale evidentně to usnadňuje práci s databází :D) no a blbne to. Připojení a nahrávání - registrace funguje jak má, ale kód pro přihlášení - čtení z databáze mi vyhazuje tohle:

Warning: PDO::prepare(): SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IM­PLICIT) and (utf8_general_ci,CO­ERCIBLE) for operation '=' in /home/krystof/Net­BeansProjects/ner­s/Db.php on line 60

Fatal error: Call to a member function execute() on a non-object in /home/krystof/Net­BeansProjects/ner­s/Db.php on line 61

Zkusil jsem stáhnout konečný redakční systém a chyba stejná.
Nějaká chyba s kódováním či co ????
Jak tak čtu někdo asi řeší stejný problém :D

 
Odpovědět  +1 2.7.2014 16:09
Avatar
kivi8
Člen
Avatar
kivi8:2.7.2014 16:26

Omlouvám se že to tady spamuju - už jsem to vyřešil.... nějak mě nanapadlo, že musím nastavit kódování utf8_general_ci když vytvářím databázi.

 
Odpovědět 2.7.2014 16:26
Avatar
Marek2nd
Člen
Avatar
Marek2nd:2.8.2014 23:17

Lukáš Linhart

Možno si to už medzitým vyriešil, ale keď tak chyba je v administrace.php, kde na začiatku je:

<?php
session_start();
if (!isset($_SESSION['uzivatel_id']))
{
        header('Location: prihlaseni.php');
        exit();
}

if (isset($_GET['odhlasit']))
{
        session_destroy();
        header('Location: prihlaseni.php');
        exit();
}
?>

takže v podstate sa prihlasiš a presmeruje ťa to do administracie, ale tak dôjde hneď k presmerovaniu naspäť do prihlaseni.php tým že podmienka je splnená :), tak to vyzerá ako by sa nič nestalo, podľa mňa to tam netreba, ja som to zakomentoval, veď po registrácií ma to hneď aj prihlási, už sa nepotrebujem manuálne prihlásiť ... inak odhlasovanie tam ostáva, ak by som sa po odhlásení chcel prihlásiť na iný účet

Editováno 2.8.2014 23:20
 
Odpovědět 2.8.2014 23:17
Avatar
Tomas2D
Redaktor
Avatar
Tomas2D:14.12.2014 10:05

Nebylo by lepší dotaz mít v tomhle formátu?

$dotaz = $db->prepare("UPDATE clanky SET **titulek=:titulek** WHERE **clanky_id=:clanky_id LIMIT 1"**);
$dotaz->bindParam('clanky_id', $_POST['clanky_id'], PDO::PARAM_STR);
$dotaz->bindParam('titulek', $_POST['titulek'], PDO::PARAM_STR);
$dotaz->execute();
 
Odpovědět 14.12.2014 10:05
Avatar
Lukáš D.
Člen
Avatar
Lukáš D.:2.2.2015 8:33

Potřeboval bych po úspěšném přihlášení přesměrovat na předchozí stránku, ze které bylo přihlášení vyvoláno.
Toto mi nefunguje a není mi jasné proč:

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: ".$_SERVER[HTTP_REFERER]);
                exit();
        }
}

Mohl by si mi s tím prosím poradit?
Vždy to do $_SERVER[HTTP_RE­FERER] uloží adresu přihlášení a předchozí adresa, ze které jsem vyvolal přihlášení je až druhá, je přepsána aktuální přihlašovací, má to souvislost s if ($_POST)?

Když stejný postup použiji pro odhlášení, vše funguje jak má, přesměruje to adresu na stránku, ze které jsem odhlášení vyvolal

if (isset($_GET['odhlasit']))
{
session_destroy();
header("Location: ".$_SERVER[HTTP_REFERER]);
exit();
}
Editováno 2.2.2015 8:37
 
Odpovědět 2.2.2015 8:33
Avatar
Lien
Člen
Avatar
Lien:2.2.2015 14:33

Já tohle řeším trošičku jinak. Kontroluji si funkcí, jesli je uživatel přihlášený (pomocí session) a pokud ne, tak ho hodím na přihlašovací stránku a jako argument použiju PHP_SELF. Takže stránku, ze které uživatel přišel, mám v parametru...
asi takhle:

session_start();
header("Cache-control: private");
$self = htmlspecialchars($_SERVER['PHP_SELF']);
//Pokud není uživatel přihlášen, pošleme mu přihlašovací formulář s parametrem (jméno stránky odkud přišel)
if ($_SESSION["user_is_logged"] != 1) {
        $header = "Location: login.php?page=$self";
        header($header);
        exit();
}
 
Odpovědět 2.2.2015 14:33
Avatar
Lukáš D.
Člen
Avatar
Odpovídá na Lien
Lukáš D.:3.2.2015 6:07

Dík za příspěvek, toto řešení však danému problému nepomůže. $_SERVER['PHP_SEL­F'] nevyřeší předchozí stránku, přesměruje pouze na index.php

 
Odpovědět 3.2.2015 6:07
Avatar
Lukáš D.
Člen
Avatar
Odpovídá na Lukáš D.
Lukáš D.:3.2.2015 6:13

Zpět k mému problému s přesměrováním.

  1. stojím na stránce clanky.php a zde aktuvuji prihlášení, což mě přesměruje na prihlaseni.php
  2. zadám přihlašovací údaje a odešlu formulář, na což zareaguje header("Location: ".$_SERVER[HTTP_RE­FERER]), ve kterém je nyní uloženo prihlaseni.php a ne clanky.php
  3. nyní na stránce prihaseni.php zareaguje
if (isset($_SESSION['uzivatel_id']))
{
        header("Location: /administrace");
        exit();
}

a přesměruje mě to na administrace.php

Poradí někdo jak toto vyřešit aby mě to přesměrovalo zpět na clanky.php, asi bude potřeba předělat if ($_POST) na něco jiného?

Editováno 3.2.2015 6:15
 
Odpovědět 3.2.2015 6:13
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Lukáš D.
Jan Lupčík:3.2.2015 6:29

Pokud použiješ již zmíněný příspěvek nad námi, stačí do prihlaseni.php tam, kde se přihlašuje, toto:

if($_GET['page']) {
header('Location: /' . $_GET['page']);
exit;
}
Editováno 3.2.2015 6:30
Odpovědět  +1 3.2.2015 6:29
Cokoliv a kdokoliv může jednou uspět.
Avatar
Lukáš D.
Člen
Avatar
Odpovídá na Jan Lupčík
Lukáš D.:3.2.2015 7:13

Když použiji $_GET['page'] tak mi to přeci udělá v adrese tohle login.php?page=in­dex.php.

Mám ale složitější stránky a pro přihlášení používám tohle:
/index.php?ad­min=prihlaseni
A pro články toto:
/index.php?clan­ky=clanek
Na webu toho mam více
/index.php?re­cepty=recept
...

 
Odpovědět 3.2.2015 7:13
Avatar
Lukáš D.
Člen
Avatar
Odpovídá na Jan Lupčík
Lukáš D.:3.2.2015 7:22

Celý problém spočívá v tom, že když kliknu ve formuláři na tlačítko, které mě přihlásí, hodnota v proměnné
$_SESSION['url'] = $_SERVER['HTTP_RE­FERER'];
kde mám uloženou předchozí adresu, odkud uživatel přišel se přepíše na adresu přihlášení.
V tento okamžik tedy nemám kde vzít tu předchozí adresu.
Nešlo by sí jí někam uložit, kde by se po odeslání formuláře nepřepsala?

Přikládám kód celé stránky přihlášení:

<?php
session_start();
$_SESSION['url'] = $_SERVER['HTTP_REFERER']; //HTTP_REFERER  REQUEST_URI

require('./tools/Db.php');
Db::connect(...);

$a = $_SESSION['url'];
$d[] = $a;

if (isset($_SESSION['uzivatel_id']))
{
        header("Location: /administrace");
        exit();
}
if ($_POST)
{
        $d[] = $_SERVER['HTTP_REFERER'];
        $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($a);
                                //exit();
        }
}
?>
<div id="mp_text">
        <div id="okraj10">
                <header>
                                <h1>Přihlášení do systému</h1>
                </header>

                        <?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>
                        <p>Pokud ještě nemáte účet, <a href="registrace">zaregistrujte se</a>.</p>
        </div>
</div>
 
Odpovědět 3.2.2015 7:22
Avatar
Lukáš D.
Člen
Avatar
Odpovídá na Jan Lupčík
Lukáš D.:3.2.2015 7:44

Tak už jsem to pochopil, omlouvám se, že mi to hned nedocvaklo.

Když vyvolám přihlášení s page=$_SERVER[RE­QUEST_URI], vrátí mi to jako parametr např. tuhle stránku:
page=/index.php?re­cepty=recepty_vy­pis&recept=pa­lacinky

Teď už mám jen ten problém, když zavolám $_GET['page'], načte se mi pouze první:
/index.php?re­cepty=recepty_vy­pis a konkrétní recept, oddělený & to samozřejmě nenačte.

Nyní tedy můj poslední dotaz je jak vyřešit toto, aby jsem přesměrování měl konkrétní na recept (/index.php?re­cepty=recepty_vy­pis&recept=pa­lacinky)?

 
Odpovědět 3.2.2015 7:44
Avatar
Lukáš D.
Člen
Avatar
Odpovídá na Lukáš D.
Lukáš D.:3.2.2015 8:01

Tak vyřešit to lze např. takto:
$uri = $_SERVER[REQU­EST_URI];
$co = '&';
$cim = '*';
$uri_prenos = str_replace($co, $cim, $a);

Na druhé straně opačně a je to.

Jestli to je ale pěkné a správné řešení, tak to nevím, každopádně to funguje.

Všem děkuji za spolupráci a kdyby někdo měl lepší řešení, tak dejte vědět.

Editováno 3.2.2015 8:02
 
Odpovědět  +1 3.2.2015 8:01
Avatar
Lien
Člen
Avatar
Odpovídá na Lukáš D.
Lien:3.2.2015 16:29

ááá, jsem to ale trubka... nedodal jsem zbytek :[
na stránce login.php mám po ověření uživatele něco jako toto:

/* parametrem např. pokud volam z 'https://www.mojestranky.com/seznam_aplikaci.php'
/ tak jeden z parametru  je '/seznam_aplikaci.php'
*/
$page = filter_input(INPUT_POST, 'page');
if (!$page) {
    $page="index.php";
}
//...kod, ukladajici info o casu a odkud je prihlaseny + vytvoreni session
//tohle vraci uzivatele na predchozi stranku nebo pokud neni zadano, tak na uvodni stranku chranene sekce
header("Location: $page");
exit;
 
Odpovědět 3.2.2015 16:29
Avatar
Martin Píštěk (Denir):10.2.2015 23:25

Musí se v editoru na začátku kontrolovat administrátor přes empty()? Když zadám:

if (!$_SESSION['uzivatel_admin'])
        die('Nedostatecna opravneni');

a hodnota je 0, tak se podminka splni a skript se ukončí. Pokud je hodnota 1 skript pokračuje.

Editováno 10.2.2015 23:28
 
Odpovědět 10.2.2015 23:25
Avatar
Lien
Člen
Avatar
Odpovídá na Martin Píštěk (Denir)
Lien:10.2.2015 23:45

To je stejný :-)

 
Odpovědět 10.2.2015 23:45
Avatar
filip.skrivanek:21.2.2015 17:10

Ahoj, mám dotaz použil jsem Script TinyMCE, ale potřeboval bych možnost uploadovat do textu obrázky. Dočetl jsem se, že k tomu slouží TinyBrowser, ale nedaří se mě ho rozchodit. Neměl by někdo nějaký návod nebo nějakou radu ?. Předem Děkuji za odpověď

 
Odpovědět 21.2.2015 17:10
Avatar
Martin Plesh
Člen
Avatar
Martin Plesh:23.6.2015 17:35

Uvítal bych, kdyby se tady objevil i článek, kde bude výpis všech článků + stránkování (seznam např. 5ti článků na stránku) ;)

Odpovědět 23.6.2015 17:35
Když nejde o život, tak o ho*no jde.
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Martin Plesh
Jan Lupčík:23.6.2015 17:36

http://www.itnetwork.cz/…kovani-v-php :)
A výpis všech článků dokážeš, ne?

Odpovědět  +1 23.6.2015 17:36
Cokoliv a kdokoliv může jednou uspět.
Avatar
Martin Plesh
Člen
Avatar
Odpovídá na Jan Lupčík
Martin Plesh:23.6.2015 17:40

To jsem potřeboval ;) díky

Odpovědět 23.6.2015 17:40
Když nejde o život, tak o ho*no jde.
Avatar
Marián Šmárik:9.7.2015 15:49

Čaute potrebujem pomoc všetko mi ide ale v prihlaseni mi píše toto :
Notice: Use of undefined constant uzivatel_id - assumed 'uzivatel_id' in C:\xampp\htdoc­s\NERS\prihla­senie.php on line 6

 
Odpovědět 9.7.2015 15:49
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na Marián Šmárik
Petr Štechmüller:9.7.2015 15:53

máš na řádku 6 opravdu toto:

if (isset($_SESSION['uzivatel_id']))
Odpovědět 9.7.2015 15:53
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Shark
Člen
Avatar
Shark:30.11.2015 21:52

Ahoj, nevíte prosím někdo proč mi nejde prihlasovani.php? Tuším že to je něco s přihlášením do databáze, ale nevím jak to opravit. Chybové hlášky:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1049] Base 'ners_db' inconnue' in C:\wamp\www\web\Db­.php on line 48

PDOException: SQLSTATE[HY000] [1049] Base 'ners_db' inconnue in C:\wamp\www\web\Db­.php on line 48

Za případnou pomoc děkuji :).

 
Odpovědět 30.11.2015 21:52
Avatar
Shark
Člen
Avatar
Shark:30.11.2015 21:57

Tak se omlouvám, nakonec jsem na řešení přišel. Zadával jsem proměnné $host atd. na špatné místo :).

 
Odpovědět 30.11.2015 21:57
Avatar
Shark
Člen
Avatar
Shark:12.12.2015 21:12

Ahoj, udělal jsem si systém komentářů (zatím jen zapisování). Vše funguje, až na jednu věc, a to že php háže chybu Notice: Array to string conversion in /3w/wz.cz/m/myn­hl/Db.php on line 68. Nevím kde mám pole namísto řetězce. Mohl by mi prosím někdo pomoci? Díky :).

<?php


$komentar = array(
        'komentar_id' => '',
        'komentar_clanek' => '',
        'autor' => '',
        'komentar' => '',


);

$url = $_GET["clanek"];
$clanekId = Db::queryOne('
        SELECT clanky_id
        FROM clanky
        WHERE url=?
', $url);



if ($_POST)     {
        if (empty($_SESSION['uzivatel_jmeno'])) {

                echo "Prihlaste se.";
        }

        else if ($_SESSION['uzivatel_jmeno'])   {
                $uzivatel_jmeno = $_SESSION['uzivatel_jmeno'];


               Db::query('
                        INSERT INTO komentare (komentar_clanek, autor, komentar)
                        VALUES (?, ?, ?)
                ', $clanekId, $uzivatel_jmeno, $_POST['komentar']);
        }




}

        ?>
 
Odpovědět 12.12.2015 21:12
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Shark
Jan Lupčík:12.12.2015 22:14
Db::query('
    INSERT INTO komentare (komentar_clanek, autor, komentar)
    VALUES (?, ?, ?)
', $clanekId['clanky_id'], $uzivatel_jmeno, $_POST['komentar']);

Snad je to správně, moc se v tom nevyznám. Jde ale o to, že proměnná $clanekId, i když vybíráš pouze 1 hodnotu, je pole.

Editováno 12.12.2015 22:14
Odpovědět 12.12.2015 22:14
Cokoliv a kdokoliv může jednou uspět.
Avatar
Shark
Člen
Avatar
Odpovídá na Jan Lupčík
Shark:12.12.2015 22:45

Díky moc! :)

 
Odpovědět  +1 12.12.2015 22:45
Avatar
michal.smatlak:4.1.2016 12:45

Zdravím. K editoru som si pridal pole autor. Potrebujem ale aby sa rovnalo s menom aktuálne prihláseného uživateľa ktoré mám v session.Skúsil som to takto:

if ($_POST)
{
    if ($_POST['autor'] == $_SESSION['uzivatel_meno'])
    {
        Db::query('
            INSERT INTO clanky (autor)
            VALUES (?)
        ', $_POST['autor']);
    }
    else
        $sprava = 'Meno autora musí byť rovnaké ako prihlasovacie meno.';
}

ale neviem prečo mi to nefunguje.
Poraďte mi prosím Vás.
Za všetky rady vopred ďakujem.

 
Odpovědět  -1 4.1.2016 12:45
Avatar
Odpovídá na michal.smatlak
Michal Šmahel:4.1.2016 22:39

Tak to nastav přímo. Tím se zbavíš nevědomí o jménu autora.

$autor = $_SESSION['uzivatel_meno'];

DB::query("
    INSERT INTO clanky (autor)
    VALUES(?)
", $autor)
Odpovědět  +1 4.1.2016 22:39
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
michal.smatlak:8.1.2016 11:43

Zdravím. Ďakujem za radu, toto mi už ide. Ale mám ešte problém s výpisom článkov v administrácií podľa toho ktorý užívateľ je prihlásený. Skúsil som to takto:

$meno = $_SESSION['uzivatel_meno'];

$clanky = Db::queryAll('
        SELECT *
        FROM clanky
        WHERE autor = $meno
        ORDER BY clanky_id DESC

ale hádže mi to chybu: Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column '$meno' in 'where clause' in C:\xampp\htdoc­s\Recenzie\db­.php on line 60

Fatal error: Call to a member function execute() on a non-object in C:\xampp\htdoc­s\Recenzie\db­.php on line 61
Ako to mám urobiť, aby mi to fungovalo?
Databázový wrapper používam ten čo je tu na itnetworku.
Za všetky rady vopred ďakujem.

 
Odpovědět 8.1.2016 11:43
Avatar
Odpovídá na michal.smatlak
Michal Šmahel:9.1.2016 15:01
// Ziskani jmena uzivatele
$meno = $_SESSION['uzivatel_meno'];

// Vypis clanku, ktere uzivatel pridal
DB::queryAll("
    SELECT *
    FROM clanky
    WHERE autor=?
    ORDER BY clanky_id DESC
", $meno);

Ahoj, používá se tu PDO wrapper, takový, aby fungoval bez použití objektů. To však neznamená, že jeho základní "syntaxe" se mění. Místo přímého vkládání proměnné se dávají zástupné znaky, buď jen otazník (?) nebo proměnná ve tvaru :nazev. Tato proměnná se musí také deklarovat jako otazník (viz. příklad dole). Tímto se liší PDO od zastaralého mysql_.

//Totez jen za pouziti pojmenovane promenne v dotazu

// Ziskani jmena uzivatele
$meno = $_SESSION['uzivatel_meno'];

// Vypis clanku, ktere uzivatel pridal
DB::queryAll("
    SELECT *
    FROM clanky
    WHERE autor=:meno
    ORDER BY clanky_id DESC
", ':meno' => $meno);
Odpovědět  +1 9.1.2016 15:01
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
michal.smatlak:9.1.2016 15:33

Ďakujem za radu, veľmi mi to pomohlo.

 
Odpovědět 9.1.2016 15:33
Avatar
Odpovídá na michal.smatlak
Michal Šmahel:9.1.2016 18:32

Není zač, kdyby něco, můžeš se zase optat. Na globálnější věci ale raději otevírej novou diskuzi, k článkům totiž někdo ani nechodí.

Odpovědět 9.1.2016 18:32
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
michal.smatlak:31.1.2016 16:15

Zdravím. Do editoru som si pridal plugin file_browser_ca­llback na upload obrázkov. Jedná sa o ikonku ktorú môžete vidieť na obrázku. Ale potrebujem poradiť ako spraviť to že po kliknutí na túto ikonku sa mi otvorí prehliadač súborov.Tu je môj kód:

<script type="text/javascript" src="//tinymce.cachefly.net/4.0/tinymce.min.js"></script>
        <script type="text/javascript">
          tinymce.init({
          selector: "textarea[name=obsah]",
          plugins: [
                  "advlist autolink lists link image charmap print preview anchor",
                  "searchreplace visualblocks code fullscreen",
                  "insertdatetime media table contextmenu paste"
           ],
          toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
          entities: "160,nbsp",
          entity_encoding: "named",
          entity_encoding: "raw",
          file_browser_callback: function(field_name, url, type, win) {
          win.document.getElementById(field_name).value = '';
          }
          });
      </script>

Poraďte mi prosím Vás. Za všetky rady vopred ďakujem.

 
Odpovědět 31.1.2016 16:15
Avatar
Odpovídá na michal.smatlak
michal.smatlak:15.2.2016 19:04

Zdravím. Tak nakoniec som sa na ten plugin vykašlal a rozhodol sa že to spravím klasicky. Ale potrebujem poradiť ako obrázky nahrať k danému článku do databázy samozrejme s určitými rozmermi a ako ich pri výpise článku zobraziť. Prosím Vás som začiatočník takže dajte mi k tomu aj zdroják. Za všetky rady vopred ĎAKUJEM. Potrebujem to súrne pretože ŠTVRTOK musím projekt odovzdať.

 
Odpovědět 15.2.2016 19:04
Avatar
Mark Vajšbejn:15.2.2016 19:29

Do databáze si přidej políčko 'image' a defaultně na něj hoď NULL - NULL jako NULL, né jako text, snad chápeš. :-D .. a do toho políčka z $_FILES variablu přidávej data do db takto .. samozřejmě obrázek i nahraj. Tohle je část pro databázi

$jmeno_souboru = time() + rand(0,100);

$file_name = basename($_FILES['name']);
$file_name = explode(".", $file_name);

$file_type = strtolower($file_name[1]);

$nazev_souboru_kterej_das_do_ty_db = $jmeno_souboru . "." $file_type;

a když budeš získávat obrázek k danýmu článku, tak budeš získávat i to pole 'image' z databáze a v případě že

($data_z_db['image'] != null)

tak si nastyluješ místo na obrázek a -> <img src="../ta/hlav­ni/cesta/k/ty/tvy/­slozce/kam/nah­ravas/obrazky<?= $data_z_db['i­mage']; ?>"> Což automaticky obrázek zobrazí, následně ho jen škáluj pomocí CSS, a parametry obrázku do db nedávej, je to blbost. Od toho máš stylování. Jo, a mimochodem, to $jmeno_souboru - respektive tahle proměnná kterou jsi si definoval na hoře - bylo by super i pod tímhle ten soubor uložit na server ;) Jinak se ti ten obrázek nenačte.

Snad jsi to nějak pobral. Jinak pro tohle si příště asi založ nějakej vlastní topic a směřuj sem - i když se mi stejně zdá že už seš offtopic, s tím že to nepoužíváš. (ten editor, ps: příspěvek jsem nečetl)

 
Odpovědět 15.2.2016 19:29
Avatar
Kristian Kiko Babic:10.4.2016 23:47

Prosím o pomoc, mám takýto kód a vyriešil som k novinkám aj obrázok no editor funguje len na pridávanie a nie na editovanie člankov, nechápem prečo kontrolujem riadok po riadku a nerozumiem tomu. V pohode pridá novú novinku ale vobec nechce už pridanu editovať. Vlastne edituje len obrázok nič viac. Vie niekto kde tam je chyba?

$clanek = array(
        'clanky_id' => '',
        'titulek' => '',
        'obsah' => '',
        'url' => '',
        'popisek' => '',
        'klicova_slova' => '',
                'datum' => '',

);
if ($_POST)
{
        if (!$_POST['clanky_id'])
        {
                $target_dir = "./img/uploads/";
                $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
                $uploadOk = 1;
                move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);

                Db::query('
                        INSERT INTO clanky (titulek, obsah, url, popisek, klicova_slova, datum, obrazok)
                        VALUES (?, ?, ?, ?, ?, ?, ?)
                                                WHERE clanky_id=?
                ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['datum'], $_FILES["fileToUpload"]["name"]);
        }
        else
        {
                if(!empty($_FILES["fileToUpload"]["tmp_name"])) {
                  $target_dir = "./img/uploads/";
                  $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
                  $uploadOk = 1;
                  move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
                  Db::query('
                        UPDATE clanky
                        SET obrazok=?
                        WHERE clanky_id=?
                ', $_FILES["fileToUpload"]["name"], $_POST['clanky_id']);
                }
                Db::query('
                        UPDATE clanky
                        SET titulek=?, obsah=?, url=?, popisek=?, klicova_slova=?, datum=?
                        WHERE clanky_id=?
                ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['clanky_id'], $_POST['datum']);
        }
        header('Location: clankya.php?clanek=' . $_POST['url']);
        exit();
}
 
Odpovědět 10.4.2016 23:47
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Kristian Kiko Babic
Jan Lupčík:11.4.2016 6:23

Pokud používáš místní wrapper, tak hned 2 věci:

  1. Podívej se na tu třídu. Můžeš používat metody jako jsou insert nebo update.
  2. Parametry dotazu se přidávají v poli.

Tedy z tohoto:

  Db::query('
        UPDATE clanky
        SET obrazok=?
        WHERE clanky_id=?
', $_FILES["fileToUpload"]["name"], $_POST['clanky_id']);

vznikne toto:

Db::update('clanky', array('obrazok' => $_FILES["fileToUpload"]["name"]), 'WHERE clanky_id=?', array($_POST['clanky_id']));

Všimni si toho posledního pole, kde se předává ten parametr v poli, i když je pouze jeden. :)

Odpovědět 11.4.2016 6:23
Cokoliv a kdokoliv může jednou uspět.
Avatar
Kristian Kiko Babic:12.4.2016 0:24

Áno pokiaľ chápem tak sme si len zjednodušili ten kód čo sme mali? alebo sa mýlim?

a áno pužívam wrapper z tadiaľto.

No a k tomu kódu ak by to nebolo len zjednodušené tak som to skúšal a tiež to nefunguje, nemôže byť problém v tomto:

else
       {
               if(!empty($_FILES["fileToUpload"]["tmp_name"])) {
                 $target_dir = "./img/uploads/";
                 $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
                 $uploadOk = 1;
                 move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
                 Db::query('
                       UPDATE clanky
                       SET obrazok=?
                       WHERE clanky_id=?
               ', $_FILES["fileToUpload"]["name"], $_POST['clanky_id']);
               }
               Db::query('
                       UPDATE clanky
                       SET titulek=?, obsah=?, url=?, popisek=?, klicova_slova=?, datum=?
                       WHERE clanky_id=?
               ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['clanky_id'], $_POST['datum']);
       }

Keďže mi edituje len obrázky a zvyšok nie tak som rozmýšlal že tie metody sa prekrývaju a skúšal som ich aj spojiť ale nefunguje to ani tak. A aj po tvojom zjednodušení to funguje rovnako na tom že editor dokáže editovat len obázok a nič iné.

Alebo je môžnosť že tomu stále dobre nechápem a robím dačo zle. :(

Samozrejme keď som upravil kód na tento:

else
        {
                if(!empty($_FILES["fileToUpload"]["tmp_name"])) {
                  $target_dir = "./img/uploads/";
                  $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
                  $uploadOk = 1;
                  move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);
                 Db::update('clanky', array('obrazok' => $_FILES["fileToUpload"]["name"]), 'WHERE clanky_id=?', array($_POST['clanky_id'])); <!-- tu je zmena -->
                Db::query('
                        UPDATE clanky
                        SET titulek=?, obsah=?, url=?, popisek=?, klicova_slova=?, datum=?
                        WHERE clanky_id=?
                ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['clanky_id'], $_POST['datum']);
        }

Tak to bolo rovnaké, ešte ma napadá že mám aj tu druhú metódu zmeniť na update?

Editováno 12.4.2016 0:26
 
Odpovědět 12.4.2016 0:24
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Kristian Kiko Babic
Jan Lupčík:12.4.2016 6:56

Ano, i tu druhou změň. Jak jsem psal, parametry do dotazu musí být v poli. Což to první zjednodušení na konci má (poslední parametr metody update).

Odpovědět 12.4.2016 6:56
Cokoliv a kdokoliv může jednou uspět.
Avatar
Martin K--a
Člen
Avatar
Martin K--a:13.4.2016 13:20

má tu takový malý problém když se chci přihlásit tak mi to píše
Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'uzivatele_id' in 'field list' in C:\xampp\htdoc­s\jachting\Db­.php on line 60

Fatal error: Call to a member function execute() on boolean in C:\xampp\htdoc­s\jachting\Db­.php on line 61

a píše mi to pořád i když nic nezadám nebo zadám neexistujícího uživatele
stránku mam takto:

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

if (isset($_SESSION['uzivatel_id']))
{
        header('Location: admin.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: admin.php');
                exit();
        }
}
?>

samozdřeme podtím html s přihlašováním. díky za radu

Odpovědět 13.4.2016 13:20
Člověk jako jedinec je inteligentní a racionálně myslící bytost, lidstvo jako celek je stádo nemyslících zvířat
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Martin K--a
Jan Lupčík:13.4.2016 16:26

Neexistuje sloupec uzivatele_id (metoda Db::queryOne()).

Odpovědět 13.4.2016 16:26
Cokoliv a kdokoliv může jednou uspět.
Avatar
Martin K--a
Člen
Avatar
Odpovídá na Jan Lupčík
Martin K--a:13.4.2016 19:53

supr diky uz to mam

Odpovědět 13.4.2016 19:53
Člověk jako jedinec je inteligentní a racionálně myslící bytost, lidstvo jako celek je stádo nemyslících zvířat
Avatar
Lukáš Hypša:22.5.2016 19:17

Do prihlaseni.php jsem zkopíroval oba zdrojáky z článku, po pokusu o přihlášeni (ať už se správným nebo špatným heslem) mi vyskočí tato chyba. Nevíte někdo co s tím? :(

Odpovědět 22.5.2016 19:17
Jsem lama co se roky snaží naučit napsat aspoň pár řádků a furt mu to nejde...
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Lukáš Hypša
mayo505:22.5.2016 21:35

však v tej chybovej hláške máš aj dôvod :D
nemáš stĺpec uzivatele_id

 
Odpovědět 22.5.2016 21:35
Avatar
Odpovídá na mayo505
Lukáš Hypša:22.5.2016 21:46

A jak to mám vyřešit? Já s wrapperem neumím :)

Odpovědět 22.5.2016 21:46
Jsem lama co se roky snaží naučit napsat aspoň pár řádků a furt mu to nejde...
Avatar
mayo505
Redaktor
Avatar
Odpovídá na Lukáš Hypša
mayo505:23.5.2016 13:42

tak pochop ako funguje ten wrapper, neviem v akom štádiu si
- ak sa učíš, tak nemá význam iba zlepovať dokopy nejaké zdrojáky bez pochopenia čo robia, síce postupuješ "rýchlo" v učení, ale v podstate nič nevieš
- ak ti dal niekto robiť web a viac PHP riešiť nechceš, tak to ešte chápem, ale boh ochraňuj ten web

vyriešiš to buď tak, že pridáš ten stĺpec do DB, alebo upravíš ten dotaz čo ten stĺpec používa -> ak ani teraz nevieš, odporúčam sa vrátiť o pár krokov dozadu a pochopiť prácu s databázou

 
Odpovědět  +1 23.5.2016 13:42
Avatar
Odpovídá na mayo505
Lukáš Hypša:23.5.2016 15:13

Tak jo, díky :)

Odpovědět 23.5.2016 15:13
Jsem lama co se roky snaží naučit napsat aspoň pár řádků a furt mu to nejde...
Avatar
Enigmated
Člen
Avatar
Enigmated:29.5.2016 17:00

Dobrý den,

funguje tady XSS ochrana pomocí toho htmlspecialchars()? Mně přijde, že i když to htmlspecialchars tam nedám, tak stejně žadné značky ani scripty nefungují... Například, že bych chtěl uložit jako popisek textu obrázek, tak se stejně vypíše jen kód.

Jsem z toho nějaký zmatený. Díky

Editováno 29.5.2016 17:01
 
Odpovědět 29.5.2016 17:00
Avatar
pgarsky
Člen
Avatar
pgarsky:19.8.2016 11:43

Nešlo by místo toho UPDATE clanky SET blablabla dát SET * ?

Odpovědět 19.8.2016 11:43
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Snaige
Člen
Avatar
Snaige:22.11.2016 11:49

Čaute, pri pokuse o odoslanie článku do databázy na mňa vyskočí toto. Viete čo s tým môže byť?
Warning: PDO::prepare(): SQLSTATE[42000]: Syntax error or access violation: 1064 You
have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 in /Applications/XAM­PP/xamppfiles/htdoc­s/ners/Db.php on line 60

Fatal error: Call to a member function execute() on boolean in /Applications/XAM­PP/xamppfiles/htdoc­s/ners/Db.php on line 61

 
Odpovědět 22.11.2016 11:49
Avatar
Peter Schoeller:29.12.2016 12:00

Ahojte,
mam otazku ohladne vylepsenia (notifikacie emailom) tejto casti kodu:

else
        {
                $_SESSION['uzivatel_id'] = $uzivatel['uzivatele_id'];
                $_SESSION['uzivatel_jmeno'] = $_POST['jmeno'];
                $_SESSION['uzivatel_admin'] = $uzivatel['admin'];
                header('Location: administrace.php');
                exit();
        }

a sice, kde a ako treba vlozit cast kodu, aby mi pri vlozeni noveho uzivatela prisiel email.
Skusal som tuto cast vlozit aj pred "header", aj pred "exit", ale nefunguje.

        // our modified code for sending the email notification
@mail(
        /* comma-separated list of recipients */
        "[email protected]",

        /* message subject */
        "New order added",

        /* message contents */
        "A new record has been added".\n\n".
        "To view it, please go to:\n".
        "https://www.xxxxxxx.xxx",

        /* we must add sender email similar to this */
        "From: [email protected]"
);
 
Odpovědět 29.12.2016 12:00
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Peter Schoeller
Jan Lupčík:29.12.2016 15:37

Ve funkci mail() máš ve třetím parametru uvozovky navíc. Nemělo by to být takto?

mail(
        "[email protected]",
        "New order added",
        "A new record has been added\n\n" .
        "To view it, please go to:\n" .
        "https://www.xxxxxxx.xxx",
        "From: [email protected]"
);
Odpovědět  +1 29.12.2016 15:37
Cokoliv a kdokoliv může jednou uspět.
Avatar
Odpovídá na Jan Lupčík
Peter Schoeller:29.12.2016 18:00

Dakujem za opravu, bola to chyba, ale aj tak to neprechadzalo, az ked som zmenil Gmail. Neviem preco na gmail sa to neda odoslat. Po zmene vsetko funguje ako ma. :)

 
Odpovědět 29.12.2016 18:00
Avatar
michal.smatlak:2.1.2017 17:50

Zdravím, potrebujem poradiť. Keď vytvorím článok tak v url sú medzery nahradené znakom %20 napr: index.php?cla­nok=Samsung%20Ga­laxy%20J5%20Du­os. Ja ale chcem aby namiesto %20 bola medzera nahradená - napr: index.php?cla­nok=Samsung-Galaxy-J5-Duos. Poraďte mi prosím vás ako už pri vytváraní článku nahradím medzeru -. Za všetky rady vopred ďakujem.

 
Odpovědět 2.1.2017 17:50
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na michal.smatlak
Jan Lupčík:2.1.2017 18:05
$newUrl = str_replace(' ', '-', $_POST['url']);

A pak tuto proměnnou vložíš do DB místo toho $_POST.

Odpovědět 2.1.2017 18:05
Cokoliv a kdokoliv může jednou uspět.
Avatar
Odpovídá na Jan Lupčík
michal.smatlak:2.1.2017 20:32

Ďakujem, funguje to a ešte mám jednú otázku. Teraz URL adresa vyzerá takto: http://www.recension4u.com/index.php?… ale ja chcem aby vyzerala takto: http://www.recension4u.com/…axy-J5-Duos/ čiže nice URL čo znamená že tam už nebude index.php?clanok= ale rovno len titulok článku. Viem že časť z toho sa robí cez .htaccess a tak som použil toto:

RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
RewriteRule ^(.+[^/])$ http://www.recension4u.com/$1/ [R=301]

ale keď načítam článok tak stále sa zobrazuje tá url ktorú nechcem a keď z nej dám preč index.php?clanok= a dám ju načítať tak mi namiesto článku vyhodí Error 404. Chcem sa teda spýtať čo ešte treba urobiť v php aby to fungovalo. Za všetky rady vopred ďakujem.

 
Odpovědět 2.1.2017 20:32
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na michal.smatlak
Jan Lupčík:2.1.2017 21:20
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /?clanok=$1 [L]

Našel jsem to na netu, nezkoušel jsem to. Snad si poradíš, když to nepůjde.

Odpovědět 2.1.2017 21:20
Cokoliv a kdokoliv může jednou uspět.
Avatar
Peter Schoeller:20.1.2017 21:56

Zdravim komunitu...
Viete mi poradit, ako rozsirit prihlasenie do administracie o pripad, ak uzivatel zabudne heslo?
Doteraz to funguje tak, ze mi on posle mail, ze zabudol heslo, ja ho vymazem z databaze a on sa potom nanovo zaregistruje a ja mu nakoniec zas pridelim admin prava. (zmena z hodnoty 0 na 1).
Jednoduchsie by to bolo pridanim stranky "reset.php", kde by dotycny vyplnil svoj email a ak by sa ten nachadzal v databaze, poslal by mu email, ze heslo bolo zresetovane a potom presmerovanie na dalsiu stranku "new_password­.php", kde by sa vygenerovalo nove heslo a dosadilo do jestvujuceho zaznamu uzivatela. Nasledne by ho to presmerovalo na uvodnu stranku, kde by sa uz prihlasil svojim loginom a novym heslom.
Na webe som nasiel tento navod navod, ale neviem si s nim poradit.
Dakujem za odpovede.

Editováno 20.1.2017 21:58
 
Odpovědět 20.1.2017 21:56
Avatar
Petr Langer
Člen
Avatar
Odpovídá na Peter Schoeller
Petr Langer:21.1.2017 14:50

Zatim jsem nic podobnyho nedelal, ale asi bych to resil tak, ze bych pro uzivatele vygeneroval nejakej klic (treba 20 nahodnejch cislic a pismen), ulozil bych ho do db ke konkretnimu uzivateli a emailem mu poslal odkaz na zmenu hesla, kde by byl v get parametru prave ten klic, pomoci nehoz bych overoval uzivatele

 
Odpovědět  +1 21.1.2017 14:50
Avatar
Odpovídá na Petr Langer
Peter Schoeller:21.1.2017 15:43

No to uz je jednoduchsie ten zaznam vymazat a nech sa uzivatel registruje este raz.
Praveze ja by som chcel, nech si to uzivatel riesil sam...
Nieco ako scenar: Je email v databazi?
Nie? -> Koniec (resp. registracia)
Ano? -> odoslat na ten email odkaz, ktorym sa vymaze z databaze v riadku,kde je ten email, bunka password a umozni sa zadat nove heslo.

 
Odpovědět 21.1.2017 15:43
Avatar
Petr Langer
Člen
Avatar
Odpovídá na Peter Schoeller
Petr Langer:21.1.2017 16:53

Jestli ti hosting umoznuje posilani emailu pres php, tak si na to muzes udelat script a bude se to delat automaticky

 
Odpovědět 21.1.2017 16:53
Avatar
Odpovídá na Petr Langer
Peter Schoeller:22.1.2017 1:28

Bohuzial neumoznuje, ale uz som to vyriesil tak, ako som si to predstavoval :)
Vdaka za ochotu.

 
Odpovědět 22.1.2017 1:28
Avatar
mkores.mk
Člen
Avatar
mkores.mk:25.1.2017 11:58

Ahoj,
mám takový problém s přihlášením do administrace - pokud kliknu na login (i když mám správně vyplněný formulář nebo ne), tak mi to vyhodí chybovou hlášku -

Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'uzivatele_id' in 'field list' in C:\xampp\htdocs\zwa - project\Db.php on line 42

Fatal error: Uncaught Error: Call to a member function execute() on boolean in C:\xampp\htdocs\zwa - project\Db.php:43 Stack trace: #0 C:\xampp\htdocs\zwa - project\Db.php(74): Db::executeSta­tement(Array) #1 C:\xampp\htdocs\zwa - project\prihla­seni.php(18): Db::queryOne('\r\n ...', 'test2', 'testt&#ssdf54gh') #2 {main} thrown in C:\xampp\htdocs\zwa - project\Db.php on line 43

Nemáte s tím někdo zkušenosti? Db.php jsem nijak neupravoval a jinak ten kód na přihlášení je v podstatě stejný jako je zde

 
Odpovědět 25.1.2017 11:58
Avatar
mkores.mk
Člen
Avatar
Odpovídá na mkores.mk
mkores.mk:25.1.2017 12:20

Ještě tedy doplním, že databáze je taky stejná, akorát tam mám navíc sloupec email.

Pokud se registruju, tak mi to do administrace jde v pořádku jít, ale když se odhlásím a znovu se chci přihlásit, tak mi to tohle vypíše

Editováno 25.1.2017 12:21
 
Odpovědět 25.1.2017 12:20
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na mkores.mk
Jan Lupčík:25.1.2017 15:44

Sloupec uzivatele_id neexistuje. Buď ho nemáš v databázi nebo ho máš jinak pojmenovaný.

Odpovědět  +2 25.1.2017 15:44
Cokoliv a kdokoliv může jednou uspět.
Avatar
mkores.mk
Člen
Avatar
Odpovídá na Jan Lupčík
mkores.mk:25.1.2017 19:23

Máš pravdu, děkuju :)

 
Odpovědět  +1 25.1.2017 19:23
Avatar
marasol
Člen
Avatar
marasol:2.3.2017 21:19

Ahoj :-) potřeboval bych poradit, články se mi neukazují v databázi. Mohl by mi někdo pomoci? Pošlu co mám. Díky

 
Odpovědět 2.3.2017 21:19
Avatar
Odpovídá na marasol
Michal Pácal [Mysak0CZ]:4.3.2017 13:25

Ahoj, hází ti to nějakou chybu,nebo všechno proběhne v pořádku ale článek se neuloží?

 
Odpovědět 4.3.2017 13:25
Avatar
marasol
Člen
Avatar
Odpovídá na Michal Pácal [Mysak0CZ]
marasol:4.3.2017 13:29

Všechno proběhne v pořádku, ale do databáze se nic neuloží. Názvy v databázi souhlasí s tím co mám ve scriptu. Nejsem tak zkušený, tak nevím, kde jinde bych měl hledat chybu.

 
Odpovědět 4.3.2017 13:29
Avatar
Peter Schoeller:4.3.2017 15:20

Ahojte, mam otazku ohladne kontroly duplicity emailu pri registracii, ak sa nachadza vo dvoch stlpcoch.
Ide o tuto cast kodu:

$existuje_mail = Db::querySingle('
                        SELECT COUNT(*)
                        FROM members
                        WHERE email=?
                        LIMIT 1
                ', $_POST['email']); // nastavenie duplicity emailu

Skusal som to modifikovat tymto, ale nefunguje to.

$existuje_mail = Db::querySingle('
                        SELECT COUNT(*)
                        FROM members
                        WHERE email=? OR email_2=?
                        LIMIT 1
                ', $_POST['email']); // nastavenie duplicity emailu

Mam obsadene obe polia (email aj email2), ale len pri prvom mi hlasi, ze email sa uz pouziva. Pri druhom prebehne riadne registracia, co je neziaduce.
Viete mi poradit ako to vyriesit?
Dakujem

 
Odpovědět 4.3.2017 15:20
Avatar
Peter Schoeller:4.3.2017 15:32

Ospravedlnujem sa, ale hned ako som odoslal otazku, som nasiel riesenie :)

$existuje_mail = Db::querySingle('
                        SELECT COUNT(*)
                        FROM members
                        WHERE (?) IN (email, email_2)
                        LIMIT 1
                ', $_POST['email']); // nastavenie duplicity emailu
 
Odpovědět 4.3.2017 15:32
Avatar
Odpovídá na Peter Schoeller
Michal Pácal [Mysak0CZ]:4.3.2017 21:19

2 otazníky => 2 hodnoty ;-)

$existuje_mail = Db::querySingle('
                        SELECT COUNT(*)
                        FROM members
                        WHERE email=? OR email_2=?
                        LIMIT 1
                ', $_POST['email'], $_POST['emai]); // nastavenie duplicity emailu
 
Odpovědět  +1 4.3.2017 21:19
Avatar
Martin Bušek:30.1.2018 21:20

Ahoj používám DB.php wraper a resim problem.
Napsal jsem si funkci ktera mi ma vracet pocet radku "zaznamu" v DB

Pokud primo v SQL zadam dotaz

SELECT COUNT(`uzivatele_id`) FROM `db_uzivatele`

Vrati se mi 4.

Pokud napisu funkci

function spocitej_techniku(){
$technika_pocet = Db::queryAll('SELECT COUNT(uzivatele_id)
                                FROM db_uzivatele
                                ');
return $technika_pocet;
}

Vrati se mi mi slovo Array, Neco asi delam spatne ale nemam tuseni co :(

 
Odpovědět 30.1.2018 21:20
Avatar
Hando
Člen
Avatar
Odpovídá na Martin Bušek
Hando:30.1.2018 22:09

Ahoj.
No, pokud by ses podíval do zdrojového kódu toho db wrapperu, tak bys našel toto:

/**
 * Spustí dotaz a vrátí všechny jeho řádky jako pole asociativních polí. Dále se předá libovolný počet dalších parametrů.
 * @param string $query Dotaz
 * **@return mixed Pole řádků nebo false při neúspěchu**
 */
public static function queryAll($query) {
        $statement = self::executeStatement(func_get_args());
        return $statement->fetchAll(PDO::FETCH_ASSOC);
}

Zkus Db::querySingle :)

 
Odpovědět  +1 30.1.2018 22:09
Avatar
Martin Bušek:30.1.2018 22:52

Diky funguje, jsem zacatechnik, obsahu Db.php absolutne nerozumim, tak sem to zatim neotviral :D

Muze nekdo znalejsi vysvetlit rozdil mezi

DB::query, DB::querySingle, Db::queryOne, Db::queryAll

At v tom mám jasno, předpokládam ze vic jich není.
zajímámě k cemu každý dotaz slouži jak zpracova data a k cemu se primarne vyuziva, jiste to pouze i dalsim uzivatelum:)

Dekuji

 
Odpovědět 30.1.2018 22:52
Avatar
Hando
Člen
Avatar
Odpovídá na Martin Bušek
Hando:31.1.2018 0:01

Tak ono je to jednoduché, pokud si projdeš zdejší tutoriály, tak je tam tvorba takového wrapperu popsána a kód je i docela pěkně zdokumentován, takže z toho rozdíly mezi jednotlivými funkcemi (resp. metodami) vyčteš.
Nechce se mi tu popisovat nějak obsáhle, čím se co liší, ale ve zkratce:

  • query - obecné dotazy, update, insert atd., vrací počet ovlivněných řádků.
  • queryOne - vrátí ti pole jednoho řádku.
  • querySingle - vrátí ti jednu vybranou hodnotu jednoho řádku (např. select id from... vrátní právě hodnotu toho id)
  • queryAll - vrátí ti pole všech řádků (resp. pole polí) nebo false.

Více najdeš zde:
7. díl - Databázový wrapper
Rozšíření je v pokračování seriálu (metody 'zmen', 'vloz'...), další rozvoj a převedení do ang. mutace je v seriálu o objektovém programování e-shopu.

Editováno 31.1.2018 0:03
 
Odpovědět  +2 31.1.2018 0:01
Avatar
Hando
Člen
Avatar
Odpovídá na Martin Bušek
Hando:31.1.2018 0:12
  • pokračování, co jsem dopisoval v editaci - nebylo by možné prodloužit limit na editaci? Těch pár minut je zbytečně málo.

V seriálu o e-shopu v OOP (MVC) je toho pak o něco víc (metody 'vložVše', 'uprav', transakce...) a pokud to myslíš s programováním vážně, tak to je docela dobrá volba, jelikož v češtině takový seriál podle všeho neexistuje a naučí tě spoustu věcí.

Ale pokud budeš plánovat další rozvoj práce s db, tak je potřeba se naučit číst dokumentaci a zkoumat cizí kód, protože teprve tehdy si zvládneš správě vybrat, jaká knihovna je pro tebe ta pravá. Složitější dotazy na databázi tyhle věci odhalí. Můžeš se zkusit podívat třeba na českou DIBI ( DIBI ) nebo na jakýkoliv balík, které používají frameworky - na githubu je toho spoustu.

 
Odpovědět  +1 31.1.2018 0:12
Avatar
Bohuslav Holček:17.7.2018 12:05

musim uznat ze na netu je spousty mozna 90% info o php je zastarale informace z minuleho stoleti. tady na itnetwork je fakt kvalitne zpracovane a studuji podle toho. je to smutne jak je internet zaplevelenej tim starym mnohdy uz neplatnim kodem o mysql prikazech nemluvne. ucim se tak sem rad jak za serial tak i za PDO wrapper a klobouk dolu. a je usmevne kolik lidi komentuje ze jim neco nefunguje a vzdy to skonci tim ze chybu mneli nekde oni... jeste jednou diky za serial....

 
Odpovědět 17.7.2018 12:05
Avatar
Marty
Člen
Avatar
Marty:7.10.2018 2:06

NetBeans mě upozorňuje na tuhle chybu:

Do not Access Superglobal $_POST Array Directly

Už dlouho se používá $_POST, tak proč by se to najednou mělo psát funkcí filter_input(IN­PUT_POST...)?
Co konkrétně by se eventuálně mohlo stát, při použití přímého přístupu?

 
Odpovědět 7.10.2018 2:06
Avatar
Zdeněk Srb
Člen
Avatar
Odpovídá na Marty
Zdeněk Srb:7.10.2018 9:50

Tak říkáš aplikaci jaké proměnné z toho formuláře očekáváš a zbytek tě nazajímá, jde o další vrstvu ochrany proti koncovému uživateli.

 
Odpovědět  +1 7.10.2018 9:50
Avatar
Michal Lustig:28. ledna 11:18

Co mi chybí u editoru je upload obrázků do článku. Nebo Vám to funguje?

 
Odpovědět 28. ledna 11:18
Avatar
Michal Lustig:30. ledna 12:14

Prosím, potřebuji poradit. Jak dostanu do Tiny plugin na přidání obrázků z localu?

 
Odpovědět 30. ledna 12:14
Avatar
Tomáš Novotný:25. února 9:00

Ahoj,
jak se by se dalo řešit případné podvrhnutí id clanku, když bych skrytý input změnil? Jde mi spíše o principiální přístup. Nápady? Praxe?

Odpovědět 25. února 9:00
∞ ... the exact amount of possibilities how to deal with the situation ... so by calm, your solution is one of many
Avatar
Stivko
Člen
Avatar
Stivko:Včera 16:14

Zdravím,

Mám problém. Udělal jsem vše dle návodu, ale když se chci přihlásit a zadám jakékoliv jméno a heslo napíše mi prohlížeč tohle: Fatal error: Uncaught Error: Call to undefined method Db::querryOne() in "umístění souboru, řádek 12"

<?php
session_start();
require('Db.php');
Db::connect('localhost', 'loginsystem', 'root', '');

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

if ($_POST) {
    $uzivatel = Db::querryOne('
    SELECT user_id, user_password
    WHERE user_uid=?', $_POST['username']);

    if (!$uzivatel || !password_verify($_POST['password'], $uzivatel['user_password'])) {
        $zprava = "Nesprávné uživatelské jméno nebo heslo";
    }
    else {
        $_SESSION['uzivatel_id'] = $uzivatel['user_id'];
        $_SESSION['uzivatel_jmeno'] = $uzivatel['user_uid'];
        header ('Location: administrace.php');
    }


}

Nevíte, kde je chyba? Budu rád za každou radu. Děkuji

Odpovědět Včera 16:14
Nikdy není pozdě začít s něčím novým
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Stivko
Jan Lupčík:Včera 17:13

Ahoj, jak již z chyby vyplývá (Uncaught Error: Call to undefined method), voláš neexistující metodu. Totiž querryOne s dvěma R neexistuje :`
Asi jsi měl na mysli metodu queryOne :)

Odpovědět Včera 17:13
Cokoliv a kdokoliv může jednou uspět.
Avatar
Stivko
Člen
Avatar
Odpovídá na Jan Lupčík
Stivko:Včera 17:17

Ahoj,

Že mě to nenapadlo hned. Nicméně pokud jdu dále, vyskočí na mě error, který souvisí s Db.php a jelikož to jsem stáhl v rámci studijních materiálu, protože k objektovému programování jsem se ještě nedostal, tady asi můj zásah končí. Error mi zobrazí tohle.

"Warning: PDO::prepare(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE user_uid=?' at line 2 in C:\xampp\htdoc­s\steven\admin\Db­.php on line 60

Fatal error: Uncaught Error: Call to a member function execute() on bool in C:\xampp\htdoc­s**********\Db­.php:61 Stack trace: #0 C:\xampp\htdoc­s************\Db­.php(92): Db::executeSta­tement(Array) #1 C:\xampp\htdoc­s**********\lo­gin.inc.php(13): Db::queryOne('SE­LECT user_id ...', 'admin') #2 {main} thrown in C:\xampp\htdoc­s************\Db­.php on line 61"

Je možné, že se za tu dobu, co autor vytvořil pro tuto vyuku soubor Db.php něco změnilo? Děkuji za případne rady

Editováno Včera 17:18
Odpovědět Včera 17:17
Nikdy není pozdě začít s něčím novým
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Stivko
Jan Lupčík:Včera 17:26

V tom dotazu ti chybí FROM uzivatele. Nevšiml jsem si toho hned napoprvé, moje omluva :`
Správně by to teda mělo být:

$uzivatel = Db::queryOne('
    SELECT user_id, user_password
    FROM uzivatele
    WHERE user_uid=?
', $_POST['username']);

Za předpokladu, že sloupeček user_uid existuje a nemá to být user_id :)

Odpovědět Včera 17:26
Cokoliv a kdokoliv může jednou uspět.
Avatar
Stivko
Člen
Avatar
Odpovídá na Jan Lupčík
Stivko:Včera 17:35

Ano, máš pravdu. Teď je akorát divné to, že pokud se nyní zkusím přihlásit, tak se mi za každých okolností (správné, špatné heslo, či nevyplnění) zobrazí prázdná stránka, ikdyž jsem nastavil, že při správném hesle se mám přesměrovat na administrace.php viz kod. Nevíš čím, to může být?

<?php
session_start();
require('Db.php');
Db::connect('localhost', 'loginsystem', 'root', '');

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

if ($_POST) {
    $uzivatel = Db::queryOne('SELECT user_id, user_password
    FROM users WHERE user_uid=?', $_POST['username']);

    if (!$uzivatel || !password_verify($_POST['password'], $uzivatel['user_password'])) {
        $zprava = "Nesprávné uživatelské jméno nebo heslo";
    }
    else {
        $_SESSION['uzivatel_id'] = $uzivatel['user_id'];
        $_SESSION['uzivatel_jmeno'] = $uzivatel['user_uid'];
        header ('Location: administrace.php');
        exit();
    }


}

tady je výstřižek na to "přesměrování"

else {
    $_SESSION['uzivatel_id'] = $uzivatel['user_id'];
    $_SESSION['uzivatel_jmeno'] = $uzivatel['user_uid'];
    header ('Location: administrace.php');
    exit();
}
Editováno Včera 17:36
Odpovědět Včera 17:35
Nikdy není pozdě začít s něčím novým
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 95 zpráv z 95.