Autor Zpráva
KronnY
Profil *
Ahoj,
jak mám zakázat přímé připojení na login.php?
Potřebuju to z důvodu, že pokud se na login.php přejde přímo vyhodí chyby, protože získává místo proměných nic.
Potřebuju aby se na login.php dalo přejít pouze přes index.php kde je přihlašovací dialog.

Díky!
Keeehi
Profil
KronnY:
Ošetřit ty prázdné proměnné. Funkce isset() a empty() v kombinaci s podmínkami a nebudeš muset vymýšlet takovéto blbosti.
Janča N.
Profil
To co píše Keeehi je nejjednodušší řešení
Nějak takhle:


if(isset($POST['odeslano'])){
//ok...prikazy

}
else{
$_SESSION['zprava'] = "Nepovolený přístup";
 header("Location: index.php"); 
}

S tím, že pak v index.php vypíšeš tu SESSION se zprávou. Takhle podobně si můžeš ošetřit prázdné inputy s následným výpisem, co nebylo vyplněno.

A nebo do else větve jen dej

die("Nepovolený přístup");
KronnY
Profil *
Díky moc, isset funguje,
jen je problém s tou funkcí header();

Stále vypisuje

Cannot modify header information - headers already sent by (output started at ..\login.php:6) in ..\login.php on line 69

Co s tím? Prosím :O
pcmanik
Profil
KronnY:
Mas predtym headerom nejaky textovy vypis, preto to nejde.
KronnY
Profil *
Jakej textovej výpis .. mám před ním echo, to vadí? .. Vymazal jsem to ale stále stejná chyba!
Janča N.
Profil
Není možné, abys něco vypsal echo nebo html a poté provedl přesměrování. Máš-li nějakou zprávu pro uživatele, vlož jí do SESSION a vypiš až v index.php a nebo něco uživateli vypiš, ukonči provádění skriptu buď zmiňovaným die a nebo exit; a nepřesměrovávej :)

FAQ
KronnY
Profil *
html mám úplně na začátku ... jak mám hodit zprávu do session? :D .. Né posím potřeboval bych to vysvětlit jak jí mám vypsat z login.php na index.php
Janča N.
Profil
login.php
na začátku souboru dej session_start();

vložení zprávy:
$_SESSION['zprava'] = "Tady muze byt zprava pro uzivatele"

index.php
na úplný začátek souboru dej session_start();

vypsání zprávy
echo $_SESSION['zprava'];
KronnY
Profil *
html s tím nesouvisí, smazal jsem ho a stále nic :(

Tohle je můj kód v login.php:

<html>
<!-- použití css šablony -->
<link rel="stylesheet" href="css/login.css" type="txt/css" />
</html>

<?php

if (isset($_POST['submit']))
{
 
//připojení souboru mysql.conf ze složky config a nahrání proměnných/obsahu
include("config/mysql.conf");

//proměné z formuláře
$username1_form = $_POST["username1_field"];
$username2_form = $_POST["username2_field"];
$password_form = $_POST["password_field"];

//zkrácení jména a příjmení jen na jednu proměnnou
$username_form = "$username1_form$username2_form";

//pokud je následující vyplněno
if ($username1_form&&$username2_form&&$password_form)
{

    $connect = mysql_connect("$mysql_host","$mysql_user","$mysql_pass") or die("Chyba #1! (Připojení k databázi selhalo!)");
    mysql_select_db("$mysql_db") or die("Chyba #2 (Databáze nebyla nalezena!)");
    $query = mysql_query("SELECT * FROM $mysql_query WHERE uzivatelske_jmeno='$username_form'");
    
    $num_rows = mysql_num_rows($query);
    
    if ($num_rows!=0)
    {
        
        while ($row =  mysql_fetch_assoc($query));
        {
        
        $db_username = $row["uzivatelske_jmeno"];
        $db_password = $row["uzivatelske_heslo"];
        
        }
        
        if  ($db_username==$username_form&&$db_password==$password_form)
        {
            echo ("Přihlášení proběhlo úspěšně! Budete automaticky přesměrováni.");
            header("Refresh: 3;url=view.php");
        }
        else
        {
            echo ("Chyba #5! (Chybné heslo!)");
        }
        
    }
    else
    {
        echo ("Chyba #4! (Uživatel neexistuje!)");
    }
}
else
{
    echo ("Chyba #3! (Jméno, Příjmení i heslo musí být zadáno!)");
}

}
else
{

$_SESSION["message"] = "Nepovolený přístup";
header("Location: index.php");
 
}

?>

Jak mám použít to že by se to vypsalo na indexu? .. To znamená že by se ani na login.php nemuselo přecházet?
Janča N.
Profil
Tohle tu být nesmí:

<html>
<!-- použití css šablony -->
<link rel="stylesheet" href="css/login.css" type="txt/css" />
</html>
KronnY
Profil *
Jak teda mám použít css? Tento samý odkaz funguje i v PHP?
Janča N.
Profil
K čemu tě tam css bude, když chceš všechny výpisy mít na index.php?


Co takhle to udělat tak, že login.php bude jen obslužný skript, který nebude nic vypisovat - všechny potřebné výpisy vypíšeš buď na index.php pomocí Session a nebo pokud vše proběhne úspěšně, přesměruje tě to rovnou po úspěšném přihlášení dál...
KronnY
Profil *
Pravda :) .. Mockrát děkuju, a nešlo by prosím ještě vysvětlit jak to udělat? Prosím!
Janča N.
Profil
Jen v rychlosti a bez záruky:

1) vyházíš to html

2) na začátek dáš session_start();

3) všude, kde máš nějaká echa, která vypisují chybu smažeš a přesuneš do $_SESSION["message"]; následně funkcí header přesměruješ třeba na index.php a chybu vypíšeš, jak to udělat, máš popsáno výše[#9]

4) tohle by si možná zasloužilo require místo include include("config/mysql.conf"); (vrací-li funkce require false, zastaví se provádění skriptu)


tak si hraj, snad tě moc nekecám :)
KronnY
Profil *
Mockrát děkuji :) .. Ještě jedna jediná věc co bych potřeboval.

Pokud vyplním špatně uživatele vyhodí mi to chybu že je špatný uživatel
Ale pokud podle databáze zadám správně jméno, příjmení i heslo tak mi to napíše že mám stále špatné heslo!

Děkuji
Janča N.
Profil
Na to jsem zapomněla :)

Já vždycky po výpisu (echo $_SESSION['zprava']) zprávy SESSION "mažu"...timhle stylem: $_SESSION['zprava'] = "";.
KronnY
Profil *
Asi to vyznělo jinak než jsem chtěl :D

Mám problém s tím, že když zadám správné heslo stejně to pokaždé napíše že mám heslo špatné a nepřihlásí mě to.
A ještě něco, to echo tu zprávu nevypíše ... nevím proč, na index.php to půjde, změní se SESSION zpráva, pomocí headeru
se to během chíle vrátí ale na indexu se nic nevypíše! Proč?
Janča N.
Profil
Máš na indexu na začátku souboru nastartovaný session_start(); ? Zkus si echem vypsat tu zprávu tam, kde ji nastavuješ. Vypíše se?

To přhlašování fungovalo předtím, než si to předělal na SESSION?

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:

0