Zdravím,
Již jsem se s touhle problematikou zabýval zde:
http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=156115
Zde tedy ještě uvedu kód:
<?php
$path = "/login/"; // máte-li stránky v rootu, nechte bezezměny, pokud je provozujete v nějakém podadresáři, zadejte jeho jméno
// např. stránky mám na moje-domena.cz/adresar/, tak zadám $path = "/adresar/";
// funkce pro ošetření vstupních dat od uživatele
// viz http://cz.php.net/…guration.php#…
function db_escape($str)
{
return mysql_real_escape_string(@get_magic_quotes_gpc() ? stripslashes($str) : $str);
}
$link = mysql_connect("localhost", "uz.jmeno", "heslo");
mysql_select_db("database", $link);
session_start(); // tohle je nezbytné a je nutné uvést tuto funkci na všech stránkách, kam se přihlášený uživatel dostane
// možnost nastavit automatické spouštění session_start() nechávám stranou
// zjistíme, co chce uživatel dělat
if (isset($_SESSION['nick']) && isset($_GET['logout']))
{
// uživatel je přihlášen a chce se odhlásit, takže smažeme údaje o přihlášení
$_SESSION = array();
if (isset($_COOKIE[session_name()]))
{
setcookie(session_name(), '', time()-42000, '/');
}
session_unset();
session_destroy();
// a přesměrujeme na index.php
header("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
exit;
}
elseif (isset($_SESSION['nick']))
{
//session_regenerate_id(); // ochrana před session fixation, lze vynechat
// uživatel je přihlášen a nechce se odhlásit, zde zobrazíme obsah pro registrované
// můžeme využit include apod.
// tohle informuje uživatele, že je přihlášen a vypíše odkaz pro odhlášení
// můžeme to ale přemístit do includovaného souboru (kam se nám hodí)
echo "<p>Přihlášen: $_SESSION[nick] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout=1\">odhlásit</a></p>\n";
echo "Email: $result[email]";
}
else
{
// uzivatel není přihlášen
// pokud odeslal přihlašovací údaje, snaží se přihlásit
if (isset($_POST['nick']) && isset($_POST['heslo']))
{
// ošetříme vstupní údaje od uživatele
// funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce
$nick = db_escape(trim($_POST['nick']));
$heslo = db_escape(trim($_POST['heslo']));
// zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem
// více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/…ni-hesel.php
$result = mysql_query("SELECT * FROM uzivatele WHERE nick = '$nick' AND heslo = sha1('$heslo')", $link);
if (mysql_num_rows($result)) // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false
// true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla
{
$row = mysql_fetch_assoc($result);
echo $row["nick"];
echo $row['email'];
echo $row["heslo"];
// uložíme potřebné SESSION proměnné
$_SESSION['nick'] = $nick;
$_SESSION['heslo'] = $row['heslo'];
$_SESSION['email'] = $result['email'];
$_SESSION['cas_prihlaseni'] = time(); // čas, kdy se uživatel přihlásil, pozor, nejedná se o čas poslední akce, nevím, jestli ho využijete, může být smazán
// po přihlášení uživatele přesměrujeme na index.php
header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303);
exit; // aby bylo pravidlům učiněno zadost, zde stejně končí podmínka a jiná nemůže být splněna
}
else
{
// uživatel zadal neplatné přihlašovací údaje
// přesměrujeme ho na index.php a zobrazíme chybovou hlášku
header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php?incorrect_login=1", TRUE, 303);
exit;
}
}
else
{
// uživatel není přihlášen a ani neodeslal přihlašovací formulář, tak mu ho zobrazíme
echo "<div>";
if (isset($_GET['incorrect_login']))
{
echo "<center><p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</center></p>\n";
}
// zobrazíme formulář pro přihlášení
?>
<center><div class='container2'>
<form action="index.php" method="post">
<div class="box">
Jméno: <input name="nick" class="input_text" type="text"><br>
Heslo: <input name="heslo" class="input_text" type="password"><br>
<input name="submit" type="submit" class="button" value="Přihlásit">
</form>
</div>
<?php
}
}
?>
$_SESSION['nick'] se normálně vypíše a po přihlášení to napíše: Přihlášen: Fastmancz
Bohužel u $_SESSION['email'] to nic nevypíše (přitom v tabulce email existuje).
Nevíte kde by mohla být chyba? Doufám, že aspoň vy budete vědět.
Děkuji za odpověď.
*Cílem je, aby se po přihlášení uživateli (např. Fastmancz) vypsali veškeré informace z jeho tabulky z databáze (email a další) ty si bude moc dál editovat a ukládat.