Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Znów sesje...
Forum PHP.pl > Forum > Gotowe rozwiązania
slimaczek
Mam problem ze sesjami. Szukałem na forum, ale coś nie znalazłem sad.gif
Chodzi mi dokładnie o logowanie w sesjach. Gdy się wpisze zły login (oba pola lub tylko login), zamiast pokazać tekst i zrobić funkcje (pokaże logowanie), nic się nie pokazuje w to miejsce. Zaś gdy się dobrze wpisze, zaloguje się to inni nie mogą się zalogować, lub jak się zalogują mimo to są zalogowani jako tego, którego pierwszy się zalogował. Skrypt wygląda tak:

index.php
[php:1:3c3e12e42f]
<?php
session_start();
session_unset();
session_destroy();
session_start();
?>
<?php $nazwa="Seiroth"; include("config.php"); ?>
<head>
<title><?=$nazwa?></title>
<link rel=stylesheet href=style.css>
</head>
<body>
<center>
<font size=3><b><?=$nazwa?> v. 0.1 BETA</b></font><br><br>

<table>
<tr><td width=200 style="border-right: solid #0066cc 1px;" valign=top align=left>
<center><b>Witaj !</b><br></center>
Witaj na wyspie otoczonej pełnoma tajemnicami! Zaloguj się by wej&para;ć w &para;rodek wyspy, do miasta <?=$nazwa?>, albo się zarejestruj.
</td><td width=200 valign=top align=center>
<b>Zaloguj się</b><br><br><center>
<table>

<?php
function logowanie()
{
print "<form method="POST">
<tr><td>Nick:</td><td><input type="text" name="login"></td></tr>
<tr><td>Hasło:</td><td><input type="password" name="haslo"></td></tr>
<tr><td colspan=2><center><input type="submit" name="submit" value="Zaloguj"></td></tr>
</form>";
}

if(!isset($submit))
{
logowanie();
} else {

$db=mysql_connect("localhost", "slimaczek", "y7h5n3") or die("Nie można się poł&plusmn;czyć z serwerem");
mysql_select_db("slimaczek_test", $db) or die("Problem z ł&plusmn;czeniem się z baz&plusmn; danych.");
$sql="SELECT * FROM players WHERE user = '$login' and pass = '$pass'";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$ruser=$row["user"];
$rpass=$row["pass"];

if(($haslo != $rpass) || ($login != $ruser))
{
echo("Wpisałeś zły login ilub hasło!");
} else {

$_SESSION["login"]="user";
$_SESSION["haslo"]="pass";

header("Location: stats.php");
echo("Witamy, <b>$user</b>! <a href=stats.php?php_sessid=$sess_id>WejdĽ do miasta.</a>");
} } }
?>

</table></td></tr></table><br>
<a href=register.php>Zarejestruj się</a> | <A href=index.php>Zaloguj się</a> | <a href=mailto:slimak80@wp.pl>Kontakt</a><br>
<?php $numplayers = mysql_num_rows(mysql_query("select * from players")); print "Zarejestrowanych jest już <b>$numplayers</b> ludzi!"; ?>
[/php:1:3c3e12e42f]


header.php (każdy plik do którego można wejść jak się zaloguje, includuje na samym początku ten plik):
[php:1:3c3e12e42f]
<?php
session_start();
include("config.php");
if (!isset($_SESSION["login"]))
{
header("Location: index.php");
exit();
}
$user=$_SESSION['login'];
$pass=$_SESSION['haslo'];
?>
<?php $nazwa="Seiroth"; ?>
<?php
print "<head>";
print "<title>$nazwa: $title</title>";
print "<link rel=stylesheet href=style.css>";
print "</head>";
print "<meta http-equiv="Content-Language" content="pl">";
print "<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">";

$stat = mysql_fetch_array(mysql_query("select * from players where user=$user and pass=$pass"));
$ct = time();
mysql_query("update players set lpv=$ct where id=$stat[id]");

?>

<center>
<table width=600 cellpadding=0 cellspacing=0 class=td>
<?php print "<tr><td colspan=3 align=center bgcolor=0066cc style="border-bottom: solid black 1px;"><font color=white><b>$nazwa - Wyspa pełna niespodzianek</b></u></td></tr>"; ?>
<tr><td width=110 valign=top style="border-right: solid black 1px;">
<?php
print "<center><b><u>$stat[user]</b></u> ($stat[id])</center><br>";
print "<b>Level</b>: $stat[level]<br>";
$expn = (($stat[level] * 50) + ($stat[level] * 15));
print "<b>EXP</b>: $stat[exp]/$expn<br>";
print "<b>HP</b>: $stat[hp]/$stat[max_hp]<br>";
print "<b>Energia</b>: $stat[energy]/$stat[max_energy]<br><br>";
print "<b>Złoto</b>: $stat[cash]<br><br>";
?>
<br>
- <a href=stats.php?php_sessid=<?=$sess_id?>>Statystyki</a><br>
<?php
$numlog = mysql_num_rows(mysql_query("select * from log where unread='F' and owner=$stat[id]"));
print "- <a href=log.php>Logi</a> [$numlog]<br>";
?>
- <a href=equip.php?php_sessid=<?=$sess_id?>>Ekwipunek</a><br>
<br>
- <a href=city.php?php_sessid=<?=$sess_id?>>Miasto</a><br>
- <a href=hospital.php?php_sessid=<?=$sess_id?>>Ołtarz</a><br>
- <a href=battle.php>Walka</a><br>
- <a href=mine.php>Kopalnia</a><br>
<br>
- <a href=forums.php?view=topics>Ogłoszenia</a><br>
- <a href=chat.php>Chat</a><br>
- <a href=ranking.php>Ranking</a><br>
- <a href=memberlist.php>Istoty</a>
<br>
<?php
if ($stat[rank] == Admin) { print "- <a href=admin.php>Admin</a><br>"; }
?>
- <a href=wyloguj.php>Wyloguj</a>
</td><td valign=top width=400>
[/php:1:3c3e12e42f]

W config.php zawarte jest łączenie z bazą danych.
spenalzo
1. Na początek w index.php session_start() na początek pliku .

2. php Początkujacy --> Skrypty
slimaczek
A musi być na samym początku? bo ja mam troszeczkę linijek niżej...
spenalzo
Cytat
A musi być na samym początku? bo ja mam troszeczkę linijek niżej...

Sprawdź i przekonaj sie...
[manual:46fc82d54b]session_start[/manual:46fc82d54b]
slimaczek
Mimo to nic sad.gif Jednak inaczej ten błąd się robi, gdy ja się zaloguje, inny się zaloguje to włącza się ta sama strona na której się loguje, tyle że nie ma formularzu ^^

-------------------- edit --------------------

Jednak jest całkiem inaczej sad.gif Wcześniej miałem inne logowanie z jakąś niby też sesją, to jak się zalogowało za pierwszym razem to nie można było później za kogoś innego... To że nie ma formularzu, to kiedy hasło jest nie prawidłowe.. Czemu tak jest ?
spenalzo
Tzn. dałeś session_start na poczatek?
slimaczek
Tak, w obu plikach skrypt zaczyna się tak:
[php:1:214d4c91a5]
<?php
session_start();
# dalsza część
?>
[/php:1:214d4c91a5]
spenalzo
Po prostu przy logowaniu (o ile dane są poprawne) niszcz starą sesję i zapisuj nową.
[php:1:ff9d9cdbde]<?php
session_unset();
session_destroy();
session_start();
$_SESSION["login"]="login";
// ...
?>[/php:1:ff9d9cdbde]
slimaczek
Hm, ciągle nie działa :cry:

(wstawiłem to na sam początek strony, tuż po sessionstart)
Kocurro
Cytat
$ruser=$row["user"];
$rpass=$row["pass"];

if(($haslo != $pass) || ($login != $user))


Na mój gust to problem tkwi w tym, że nie korzystasz z user i rpass ale z user i pass - mogę się mylić
slimaczek
Mimo to nic nie pomogło sad.gif Dzieje się ciągle tak samo... Ja się w grze zalogowałem jako pierwszy, i teraz inni też się logują za mnie mimo czy będę wylogowany czy nie...
Kocurro
A może problem tkwi w tym, że w formularzu masz pole o nazwie $haslo a potem odwołujesz się do tego pola jako $pass questionmark.gif możliwe, że to powoduje iż query do bazy danych jest źle wykonane
slimaczek
$user i $pass są przemienione z $login i $haslo do następnych sesji...
$login i $haslo to zmienne z formularza...

Spróbuje wykasować zmienne z sesji z wcześniejszego formularza, choć już stosowałem session_unset i session_destroy ...

=========== EDIT =============

Nic nie daje, bo i tak by nic to nie dało laugh.gif
slimaczek
Doigrałem się z tym, i to naprawiłem. Zrobiłem proste błędy... A tak pozatym, temat możecie zamknąćusunąć.
Kocurro
slimaczek to napisz chociaż co było nie tak...nie jestem jestem zbyt zaawansowany w te klocki i chętnie bym poznał jakie można błędy popełnić...poza tym wszyscy chcemy zobaczyć koto był najbliżej...

pozdro
slimaczek
index.php
[php:1:827ae6b94c]
<?php
session_start();
?>
<?php $nazwa="Sethiria"; ?>
<html>
<head>
<title><?=$nazwa?></title>
<link rel=stylesheet href=styl/<?=$id?>/style.css>
</head>
<body>
<center>
<font size=3><b><?=$nazwa?> v. 0.1</b></font><br><br>

<table>
<tr><td width=200 style="border-right: solid #0066cc 1px;" valign=top align=left>
<center><b>Witaj !</b><br></center>
Witaj na wyspie otoczonej pełnoma tajemnicami! Zaloguj się by wej&para;ć w &para;rodek wyspy, do miasta <?=$nazwa?>, albo się zarejestruj.
</td><td width=200 valign=top align=center>
<b>Zaloguj się</b><br><br><center>
<table>
<?php
function logowanie()
{
print "<form method="POST">
<tr><td>Nick:</td><td><input type="text" name="login"></td></tr>
<tr><td>Hasło:</td><td><input type="password" name="haslo"></td></tr>
<tr><td colspan=2><center><input type="submit" name="submit" value="Zaloguj"></td></tr>
</form>";
}

if(!isset($submit))
{
logowanie();
}
else
{
$db=mysql_connect($sql_host, $sql_user, $sql_pass) or die("Nie można się poł&plusmn;czyć z serwerem");
mysql_select_db($sql_base, $db) or die("Problem z ł&plusmn;czeniem się z baz&plusmn; danych sad.gif");
$sql="SELECT * FROM players WHERE user = '$login'";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$rpass=$row["pass"];
$ruser=$row["user"];
if (($haslo != $rpass) || ($login != $ruser)) {
echo("Wpisałe&para; zły login ilub hasło!");
logowanie();
} else {
$_SESSION["login"] = $login;
Header("Location: stats.php");
exit();
} } }
?></table></td></tr></table><br>
<a href=register.php>Zarejestruj się</a> | <A href=index.php>Zaloguj się</a> | <a href=mailto:slimak80@wp.pl>Kontakt</a><br>
<?php #$numplayers = mysql_num_rows(mysql_query("select * from players")); print "Zarejestrowanych jest już <b>$numplayers</b> ludzi!"; ?>
</body></html>
[/php:1:827ae6b94c]

header.php (każdy plik do którego można wejść tylko po zalogowaniu, inkluduje na samym początku ten plik)
[php:1:827ae6b94c]
<?php
session_start();

include("config.php");
if (!isset($_SESSION["login"]))
{
print "
<html>
<head>
<title>Sethiria - Sesja Wygasła</title>
<link rel=stylesheet href=styl/1/style.css>
</head><body>
<div align=center>
<table width=400 height=100 cellpadding=0 cellspacing=0 class=td>
<tr><td bgcolor=#8b8b8b valign=top><center><br><br>
Sesja wygasła, zaloguj się jeszcze raz. <br>
Możliwe, że weszłe&para; tu, ale się wcale nie zalogowałe&para;. <br>
(Jeżeli chczesz się zalogować, <a href=index.php>naci&para;nij tutaj</a>.)<br><br>
<A href=index.php>Zaloguj się</a> | <a href=mailto:slimak80@wp.pl>Kontakt</a><br>
</center></td></tr></table>
</body></html>
";
exit();
}

$nazwa="Sethiria";

print "<html>";
print "<head>";
print "<title>$nazwa: $title</title>";
print "<link rel=stylesheet href=styl/$id/style.css>";
print "</head>";
print "<meta http-equiv="Content-Language" content="pl">";
print "<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">";

$stat = mysql_fetch_array(mysql_query("select * from players where user='$_SESSION[login]'"));
$ct = time();
mysql_query("update players set lpv=$ct where id=$stat[id]");

?>

<center>
<table width=600 cellpadding=0 cellspacing=0 class=td>
<?php print "<tr><td colspan=3 align=center bgcolor=0066cc style="border-bottom: solid black 1px;">
<font color=white><b>&brvbar;wiat $nazwa, miasto Leethar</b></u><br>
</td></tr>"; ?>
<tr><td bgcolor=#808080 width=125 valign=top style="border-right: solid black 1px;">
<?php
print "<center><b><u>$stat[user]</b></u> ($stat[id])</center><br>";
print "<b>Poziom</b>: $stat[level]<br>";
print "<b>Lv. magii</b>: $stat[levmag]<br>";
print "<b>AP</b>: $stat[ap] <a href=ap.php>(wymień)</a><br>";
$expn = (($stat[level] * 50) + ($stat[level] * 15));
print "<b>EXP</b>: $stat[exp]/$expn<br>";
print "<b>HP</b>: $stat[hp]/$stat[max_hp]<br>";
print "<b>Energia</b>: $stat[energy]/$stat[max_energy]<br><br>";
print "<b>Złoto</b>: $stat[cash]<br>";
print "<b>Złoto (bank)</b>: $stat[bank]<br>";
?>
<hr color=black size=1>
- <a href=stats.php>Statystyki</a><br>
<?php
$numlog = mysql_num_rows(mysql_query("select * from log where unread='F' and owner=$stat[id]"));
print "- <a href=log.php>Logi</a> [$numlog]<br>";
?>
- <a href=equip.php>Ekwipunek</a><br>
<br>
- <a href=city.php>Miasto</a><br>
- <a href=hospital.php>Ołtarz</a><br>
- <a href=battle.php>Walka</a><br>
- <a href=mine.php>Kopalnia</a><br>
- <a href=bank.php>Skarbiec</a><br>
<br>
- <a href=chat.php>Chat</a><br>
- <a href=ranking.php>Ranking</a><br>
- <a href=memberlist.php>Istoty</a><br>
<br>
<?php
if ($stat[rank] == Bóg) { print "- <a href=admin.php>Admin</a><br>"; }
?>
- <a href=wyloguj.php>Wyloguj</a>
</td><td bgcolor=#8b8b8b valign=top>
[/php:1:827ae6b94c]

Dokładnie tak jest zrobione i działa... Jeden z błędów, był taki że...
[php:1:827ae6b94c]
<?php
$stat = mysql_fetch_array(mysql_query("select * from players where user='$_SESSION[login]'"));
?>
[/php:1:827ae6b94c]
między zmienną nie było znaków "'". Nie wiem dokładnie co poprawiłem, bo w miedzyczasie cos pogrzebałem ^^
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.