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 – 6. diel - Ners - Editor článkov 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
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();
}
Editované
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();
}
Avatar
Lukáš D.
Člen
Avatar
Odpovedá 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

Avatar
Lukáš D.
Člen
Avatar
Odpovedá 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?

Editované
Avatar
Jan Lupčík
Tvůrce
Avatar
Odpovedá 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;
}
Editované
Odpovedať
TruckersMP vývojář
Avatar
Lukáš D.
Člen
Avatar
Odpovedá 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
...

Avatar
Lukáš D.
Člen
Avatar
Odpovedá 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>
Avatar
Lukáš D.
Člen
Avatar
Odpovedá 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)?

Avatar
Lukáš D.
Člen
Avatar
Odpovedá 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.

Editované
Avatar
Lien
Člen
Avatar
Odpovedá 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;
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 119.