NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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 6 - NERS - Editor článků 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
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
Tvůrce
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
3.2.2015 6:29
TruckersMP vývojář
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
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
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 119.