Autor Zpráva
Schindler
Profil *
Dobrý večer,
buduji stránky založené následujícím způsobem. V adresáři webu mám klasický index.php, který je základní stavební jednotkou celého webu. Obsahuje hlavičku, obsah i patičku, přičemž obsah je proměnný a ještě závislý na přihlásění uživatele.

Takže pokud je uživatel přihlášen, tak obsah vypádá nějak následovně:

if($_SESSION['username']!=""){
    if($_GET['page'] == "page"){include "pages/index.php";}
    
    /* Verification */
    elseif($_GET['settings'] == "verification" && $_GET['verification'] == "login"){include "settings/verification/login/index.php";}
    elseif($_GET['settings'] == "verification" && $_GET['verification'] == "logout"){include "settings/verification/logout/index.php";}

    
    /* Else */
    else {include "pages/index.php";}

Takže pokud odkážu např. na index.php?page=verification&verification=logout, tak se mi odstraní zápis ze session a uživatel se odhlásí. Všechno tohle mi funguje a stánky se mění na základě odkazu.

Ale teď nastává problém. Pokud já chci uživatele přihlásit přes odkaz index.php?page=verification&verification=login, tak se nic nestane, resp. zápis do session, mám podezení, že include stánky pro zápis do session nefunguje, ale proč? Pokud použiji klasickou cestu settings/verification/login/index.php, tak se zápis do session povede, ale pokud bych chtěl přihlašování pomocí index.php?page=verification&verification=login??

else {
        echo "      <div class='login-page'>\n";
        echo "         <form action='index.php?page=verification&verification=login?' method='post'>\n";  
        echo "            <h1>Login</h1>\n";
        echo "            <label id='username'>Username:</label>\n";
        echo "            <input id='username' type='text' name='username' size='30' tabindex='1' /><br />\n";
        echo "            <label id='password'>Password:</label>\n";
        echo "            <input id='password' type='password' name='password' size='30' tabindex='2' /><br />\n";
        echo "            <input id='button' type='submit' name='submit' value='Login' tabindex='3' />\n";
        echo "         </form>\n";
        echo "      </div>\n";
}

Moc děkuji za odpovědi.
Alphard
Profil
Obecně nastavení sessions musí fungovat kdekoliv v průběhu zpracování stránky, tj. i v libovolně zanořeném include.
session_start() dejte na začátek toho základního index.php.

Konkrétněji těžko radit, když neuvádíte přihlašovací script.

Davex [#3]:
Aha, na to jsem se nesoustředil.
Davex
Profil
Schindler:
U nepřihlášeného uživatele by nemělo být známo uživatelské jméno, takže není splněna první podmínka a skočí se na větev vypisující přihlašovací formulář (pokud je ten druhý výpis pokračováním prvního).

A kromě toho by ty odkazy pro přihlášení a odhlášení měly vypadat jinak: index.php?settings=verification&verification=login.

Doporučuji prostudovat Nejčastější potíže s PHP (FAQ) » Registrace uživatelů.
Schindler
Profil *
Děkuji za odpovědi.
Co se týče té špatné adresy, tak tím to nebylo, respektivě večer jsem zkoušel více možností, a tak jsem jí sem pro kázku rychle napsal, avšak špatně. Co se týče přihlašování a odhlašování ... To mi funguje naprosto správně, dokonce i mé víceúrovnňové přihlášení, ale pouze pokud bych chtěl udělat přihlášení přes tento odkaz, tak se nic nestane, do session se nic nezapíše ... pokud použiju pevnou cestu k souboru, tak se přihlášení zdaří. Pro chod stránky to není nijak závažné a obejdu se bez toho, ale přece jenom bych to měl raději přes odkaz index.php?vefi....... Díky za další rady, doufám že vám přiložené kódy pomohou.
PS: Nějak se poslední vložený text nevypisuje celý, ale ta podstata přihlášení tam je (pouze chybí část s přesměrováním po přihlášení a při nezdařelém přihlášení)

Základní soubor index.php
<?php

header("Cache-control: private");

echo "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'><html xmlns='http://www.w3.org/1999/xhtml'>\n";

echo "<head>\n";
echo "   <title>VACC-CZ - Events manager</title>\n";
echo "   <meta name='author' content='Bedřich Schindler'>\n";
echo "   <meta name='description' content='Events Manager of VACC-CZ. Only for competent persons.'>\n";
echo "   <meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n";
echo "   <link rel='stylesheet' type='text/css' href='."/settings/style.css'>\n]http://".$_SERVER['HTTP_HOST']."/settings/style.css'>\n";
echo "</head>\n";

echo "<body>\n";

session_start();

if($_SESSION['username']!=""){
    
    echo "   <div class='header'>VACC-CZ Events manager</div>\n";
    echo "   <div class='user-panel'>";
        if($_SESSION["access_level"]==""){echo "";} /* Doplnit adresu */
        elseif($_SESSION["access_level"]=="User"){echo $_SESSION["first_name"]." ". $_SESSION["last_name"]." | <a href='index.php?settings=verification&verification=logout'>Logout</a> | <a href='index.php?page='>Setting</a>";} /* Doplnit adresu */
        elseif($_SESSION["access_level"]=="Administrator"){echo $_SESSION["first_name"]." ". $_SESSION["last_name"]." | <a href='index.php?settings=verification&verification=logout'>Logout</a> | <a href='index.php?page='>Setting</a> | <a  href='index.php?page='>Administration</a>";} /* Doplnit adresu */    
    echo "</div>\n";
    echo "   <div class='navigation-panel'>\n";
    echo "      <div class='navigation'>\n";
    echo "         <ul class='level-1'>\n";
    echo "            <li class='level-1'><a href=''>Booking</a>\n";
    echo "               <ul class='level-2'>\n";
    echo "                  <li class='level-2'><a href=''>Insert</a></li>\n";
    echo "                  <li class='level-2'><a href=''>Update</a></li>\n";
    echo "                  <li class='level-2'><a href=''>Delete</a></li>\n";
    echo "               </ul>\n";
    echo "            </li>\n";
    echo "            <li class='separator'> | </li>\n";
    echo "            <li class='level-1'><a href=''>Events</a>\n";
    echo "               <ul class='level-2'>\n";
    echo "                  <li class='level-2'><a href=''>Insert</a></li>\n";
    echo "                  <li class='level-2'><a href=''>Update</a></li>\n";
    echo "                  <li class='level-2'><a href=''>Delete</a></li>\n";
    echo "               </ul>\n";
    echo "            </li>\n";
    echo "            <li class='separator'> | </li>\n";
    echo "            <li class='level-1'><a href=''>About</a>\n";
    echo "            </li>\n";
    echo "         </ul>\n";
    echo "      </div>\n";
    echo "   </div>\n";    
    ....
    ....
    ....
    echo "   <div class='content'>\n";    
    require "index.dat";    
    echo "   </div>\n";            
    }
    else {
        echo "   <div class='header'>VACC-CZ Events manager</div>\n";
        echo "   <div class='user-panel'>";
            if($_SESSION["access_level"]==""){echo "";} /* Doplnit adresu */
            elseif($_SESSION["access_level"]=="User"){echo $_SESSION["first_name"]." ". $_SESSION["last_name"]." | <a href='index.php?settings=verification&verification=logout'>Logout</a> | <a href='index.php?page='>Setting</a>";} /* Doplnit adresu */
            elseif($_SESSION["access_level"]=="Administrator"){echo $_SESSION["first_name"]." ". $_SESSION["last_name"]." | <a href='index.php?settings=verification&verification=logout'>Logout</a> | <a href='index.php?page='>Setting</a> | <a  href='index.php?page='>Administration</a>";} /* Doplnit adresu */    
    echo "</div>\n";
        echo "      <div class='login-page'>\n";
        echo "         <form action='index.php?settings=verification&verification=login' method='post'>\n";  
        echo "            <h1>Login</h1>\n";
        echo "            <label id='username'>Username:</label>\n";
        echo "            <input id='username' type='text' name='username' size='30' tabindex='1' /><br />\n";
        echo "            <label id='password'>Password:</label>\n";
        echo "            <input id='password' type='password' name='password' size='30' tabindex='2' /><br />\n";
        echo "            <input id='button' type='submit' name='submit' value='Login' tabindex='3' />\n";
        echo "         </form>\n";
        echo "      </div>\n";        
    }
echo "   <div class='endora'><endora></div>\n";
echo "</body>\n";
echo "</html>\n";
?>
Požadovaný soubor (obsah) index.dat
<?php    
    if($_GET['page'] == "page"){include "pages/index.php";}    
    /* Verification */
    elseif($_GET['settings'] == "verification" && $_GET['verification'] == "login"){include "settings/verification/login/index.php";}
    elseif($_GET['settings'] == "verification" && $_GET['verification'] == "logout"){include "settings/verification/logout/index.php";}    
    /* Else */
    else {include "pages/index.php";}
?>
Soubor pro zpracování příhlášení
 <?php
$username = $_POST["username"];
$password = md5($_POST["password"]);
require "../../database/index.php";

$query = mysql_query("SELECT * FROM _em_users WHERE username = '$username' AND password = '$password'");
$authentication = mysql_num_rows($query);
$extract = mysql_fetch_array($query);

if($authentication == 1) {
    session_start();
        $_SESSION["user_id"] = $extract["user_id"];
        $_SESSION["username"] = $extract["username"];
        $_SESSION["password"] = $extract["password"];
        $_SESSION["access_level"] = $extract["access_level"];
        $_SESSION["first_name"] = $extract["first_name"];
        $_SESSION["last_name"] = $extract["last_name"];
        $_SESSION["cid"] = $extract["cid"];        
    $redir = "http://".$_SERVER["HTTP_HOST"];        
    header("Location: $redir");    
    die();
    }
else {
    $redir2 = "."/settings/error/login-error.php]http://".$_SERVER["HTTP_HOST"]."/settings/error/login-error.php";
    header("Location: $redir2");
}
?>
Micruss
Profil
jen se chci zeptat... a zkoušel si vypsat echo $_POST['username']; když to odesíláš na ten server ... ted nevím jak je ta adresa &verification=login bo tak nějak... zkus to schválně co to vypíše, třeba že to není nadefinovaný

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: