ZeroCool
30.09.2010, 12:17:54
Witam serdecznie,
w php "siedzę" od około 2-3 miesięcy. Ostatnio zacząłem się interesować tworzeniem systemu logowania/rejestracji na stronie. I napotkałem może niezbyt wielki, ale jednak problem.
Otóż, stworzyłem formularz do logowania, gdzie użytkownik podaje nazwę usera i hasło. Jeżeli poda poprawne dane, to tworzę sesję, której przypisuję nazwę użytkownika z bazy danych: $_SESSION['username'] = $dbusername; .
Po zalogowaniu na samej górze strony pojawia się Welcome i nazwa użytkownika. Pokazuje się ona praktycznie cały czas, aż do momentu, gdy nie kliknę na pasek adresu w przeglądarce i z tego poziomu przejdę na główną stronę. Wtedy wyświetla się już tylko Welcome. Co zrobić, by nazwa użytkownika (czyli, jak dobrze rozumiem również nazwa sesji) była widoczna cały czas?
Dodam, bo być może to jest istotne, że cały system logowania mam w pliku top.php, który w pliku index.php jest dodany na początku poprzez include("top.php");
Dziękuję już teraz za wszelkie wskazówki.
Pozdrawiam
kreciko
30.09.2010, 12:21:33
A czy na początku w pliku index.php masz session_start()? A może kilka razy robisz session_start()?
ZeroCool
30.09.2010, 12:28:20
Mam w pliku index.php na początku session_start();, w pliku top.php już nie (sprawdziłem i po dodaniu w top.php nic się niestety nie zmieniło).
kreciko
30.09.2010, 12:45:08
Możesz podać więcej szczegółów, np. fragmenty kodu?
ZeroCool
30.09.2010, 12:53:25
INDEX.PHP
<?php
?>
<html>
<head>
<link rel="Stylesheet" type="text/css" href="style.css">
<link rel="stylesheet" type="text/css" href="shadowbox.css">
<script type="text/javascript" src="shadowbox.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
Shadowbox.init();
</script>
</head>
<body>
<?php include("top.php"); ?>
<div id="content">
<div id="reg"></div>
<?php
$page = $_GET['page'];
if($page)
{
$path = $page.".php";
{
include($path);
}
else
{
echo "Taka strona nie istnieje."; }
}
else
{
}
?>
</div>
</body>
</html>
TOP.PHP<div id="top">
<?php
if($_POST['login'])
{
$email = $_POST['email'];
$password = $_POST['password'];
if($username&&$password)
{
require ('connect.php');
$query = mysql_query("SELECT * FROM users WHERE email='$email' AND password='$password'");
if($numrows!=0)
{
{
$dbid = $row['id'];
$dbemail = $row['email'];
$dbfirstname = $row['firstname'];
$dblastname = $row['lastname'];
$dbpassword = $row['password'];
$dbcn = $row['cn'];
$dbrn = $row['rn'];
}
if($username==$dbusername&&$password==$dbpassword)
{
echo $_SESSION['username'] = $dbusername; }
else
{
echo "Wrong username or password."; }
}
else
echo "Wrong username or password."; }
else
{
echo "Please enter a username and a password."; }
}
?>
<?php
if($_SESSION['username'])
{
echo "<font style='font-weight: normal;'>Welcome to my<font style='color: red;'>page</font>.pl | <font style='font-weight: normal;'>".date(d
).".".date(m
).".".date(Y
)."</font>"; }
else
{
?>
<form action="index.php" method="POST">
Username: <input type="text" name="email">
Password: <input type="password" name="password"> <input type="submit" name="login" value="Login">
| <a href="register.php" rel="shadowbox;height=300;width=350">Register</a> |
<?php echo date(d
).".".date(m
).".".date(Y
); ?></form>
<?php
}
?>
</div>
<?php
echo "<div id='logo'><img src='".$losowa.".JPG'></div>"; ?>
mkdes
30.09.2010, 13:08:30
Kod
if(isset($_SESSION['username'])){
echo'Użytkownik zalogowany: '.$_SESSION['username'];
}
kreciko
30.09.2010, 13:11:21
Po prostu jak przechodzi do strony głównej nie przekazujesz żadnych zmiennych w tablicy $_POST, m.in. 'login' i dlatego ten cały wielki warunek z wyświetleniem nazwy użytkownika jest pomijany.
btw.
Cytat
by nazwa użytkownika (czyli, jak dobrze rozumiem również nazwa sesji)
To nie zawsze jest sobie równoważne. A często się zdarza, że tak nie jest. A i hasła w bazie danych powinno się trzymać w postaci zahaszowanej.
ZeroCool
30.09.2010, 13:28:13
Wskazówka mkdes pomogła, dziękuję! Kreciko, Tobie również, za poświęcony czas.
Natomiast co do hasła, to ja umieszczam je w bazie w postaci sumy (tak to się chyba mówi) md5. O to chodzi z haszowaniem?