Autor Zpráva
Pearljam
Profil
Zdravím, prosím o radu, nevím jak vyřešit oznámení o chybně zadaném uživatelském jménu nebo heslu při loginu.
V scriptu mám při nesprávném zadaní uživatelského jména nebo hesla aby se objevilo okno se zprávou, ale po kliknutí se objeví hláška, místo přesměrování na znovu index.php s formulářem.

Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/139518/virtual/www/login.php:19) in /data/web/virtuals/139518/virtual/www/login.php on line 20

<?php session_start();
include("config.php");
if(isset($_POST['login']))
{
    $userName = secure($_POST['username'], $mysqli);
    $pass =  secure($_POST['password'], $mysqli);
    
    $q = "SELECT * FROM user WHERE username = '$userName' AND pass = '$pass'";
    if($res = $mysqli->query($q))
    {
        if($res->num_rows > 0)
        {
            $_SESSION['userName'] = $userName;
            header("Location:admin.php");
            exit;
        }
        else
        {
            echo'<script>alert("Chybně zadané uživatelské jméno nebo heslo !");</script>';
            header("Location:index.php");
            exit;
        }
    }
}
nodo
Profil
Problém je obvykle v tom, že na začiatku kódu je prázdny riadok alebo medzera.. Funkcie ktoré menia hlavičky stránky (header, session_start, set_cookie), musia byť pred tým ako začneš niečo vypisovať (echo, print).
Čiže v tvojom prípade session_start(); daj na stránku ako prvú vec
TomášK
Profil
nodo
To není mezera, má ta echo před header,
echo'<script>alert("Chybně zadané uživatelské jméno nebo heslo !");</script>';
header("Location:index.php");

Hlavičky se musí posílat před obsahem. Navíc, pokud stránka přesměrovává, nemá žádný obsah. Upozornění je potřeba zobrazit až na stránce, kam je uživatel přesměrovaný.
Pearljam
Profil
TomášK:
Děkuji, pokud odstraním řádek 19 echo s oznámením tak bezproblému se vrátím na index s přihlašovacím formulářem, ale bez oznámení to ano, ale chtěl bych sotat hlášku o neplatném přihlášení.
Keeehi
Profil
Pearljam:
Tak přesměruj třeba na stránku
header("Location:index.php?badlogin=1");
No a na index.php pak už lehce poznáš, zda máš hlášku zobrazit či ne.
WAWApUKUI
Profil *
Alebo daj echo'<script>alert("Chybně zadané uživatelské jméno nebo heslo !"); setTimeout("location.href='index.php'",100);</script>';
Hando
Profil
WAWApUKUI:
Dobrá rada nad zlato. :) Uvozovky, apostrofy - vše dohromady, včetně chyby...
V čem si pomůže, když nahradí krátký nežádoucí výstup před header() tvým dlouhým ne nutně spolehlivým výstupem? Spoléhat se v běhu scriptu na JS mi nepřijde jako vhodné řešení...

Když nebude chtít použít řešení od Keeehiho, tak se může držet použití session, uložit chybu a po přesměrování zkontrolovat, zda existuje zpráva o chybě a případně zprávu vypsat a příslušnou proměnnou smazat...
Keeehi
Profil
Hando:
Jediný problém se session je, že se může pak to oznámení zobrazit v jiném okně. Což se asi většinou nestane ale teoretická šance tu je.
Pearljam
Profil
Hando:
Děkuji velice za názory, pomocí toho scriptu to řešit nechci, spíše bych šel cestou jak píše Hando ,nevím jestli jsem to pochopil správně, takže do proměnné vložit text s hláškou a až v index.php s přihlašovacím formulářem vypsat pomocí echo text s proměné ? Takhle by to mohlo fungovat ?
Hando
Profil
Ano, myšlenka je taková - když dojde k chybě, uložíš si hlášku do session (může to být i více hlášek, abys toho člověka nevracel zpět kvůli každé jedné chybě), přesměruješ na původní stránku a podíváš se, jestli session obsahují hlášku o chybě, třeba $_SESSION['error']['nějaká hláška']. Pokud ano, zpracuješ je, zobrazíš a smažeš, aby se ti nezobrazovaly pořád znovu.
Samozřejmě si musíš být vědom toho, na co upozorňoval Keeehi:
Jediný problém se session je, že se může pak to oznámení zobrazit v jiném okně. Což se asi většinou nestane ale teoretická šance tu je.
Ale pokud neděláš nějaký významný projekt, kde by na tom hodně záleželo, tak bych to asi moc neřešil...
blaaablaaa
Profil
Hando
Pripadne presmeruje s nejakym hashem v getu, ktery si ulozis i k sessione a podle toho pak zobrazi chybove hlasky ve spravnem okne :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: