[PHP] Zapomina hasło

Witam!

Mógłby mi ktoś poradzić czemu owy skrypt Księgi Gości, w którym jest niewielki panel administratora nie pamięta hasła administratora. Gdy wprowadzam hasło przy logowaniu, przechodzi dalej - pokazują się różne opcje dla admina, lecz gdy chcę kliknąć na którą zaraz wracam do strony przed logowaniem, czyli tracę owe opcje. Nie pamięta sesji…

Skrypt działał poprawnie na PHP 4.4 lecz po aktualizacji na serwerze na wersję 5, już nie chce…

Proszę o pomoc :wink:

ODPOWIEDZIALNE ZA TO LINIE W KODZIE:

$gb_psswd="password";




if($_POST['action'] == "logon"){

 if ($_POST['password'] == $gb_psswd){

 session_register("psswd");

 $psswd = $_POST['password'];

 }

 else {$_GET['$msg_txt']=$lgerr[5]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

}


if($_GET['msgdelete'] || $_POST['msgdelete'] == "0" ){

 if ($_POST['$psswd']==$gb_psswd){

 $data = file($gb_data);

 rsort ($data);

 unset($data[$_POST['msgdelete']]);

 $fp = fopen($gb_data,"w");

 foreach ($data as $row){fputs($fp, $row);}

 fclose($fp);

 }

 else{$_GET['$msg_txt']=$lgerr[6]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

}


if($_GET['msgedit'] || $_POST['msgedit'] == "0" ){

 if ($_POST['$psswd']==$gb_psswd){

 $_GET['$id']="edit";

 }

 else{$_GET['$msg_txt']=$lgerr[7]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

}


if($_POST['msgreplace']){

 if ($_POST['$psswd']==$gb_psswd){

 $data = file($gb_data);

 rsort ($data);

 $message = flt_tags ($message,$gb_flthtml);

 $comment = flt_tags ($comment,0);

 $data[$num] = "".$_POST['index']."|".$_POST['day']."|".$_POST['time']."|".$_POST['ip']."|".$_POST['browser']."|".$_POST['name']."|".$_POST['email']."|".$_POST['page']."|".$_POST['message']."|".$_POST['comment']."|0\r\n";

 $fp = fopen($gb_data,"w");

 foreach ($data as $row){fputs($fp, $row);}

 fclose($fp);

 }

 else{$_GET['$msg_txt']=$lgerr[6]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

Dziękuje za daną pomoc. Pozdrawiam!

A nie zgubiłeś czasem session_start();?

niestety nadal traci ;(

A gdzie masz tutaj jakieś użycie $_SESSION?

poczyniłem takie coś i zamieniłem session_register () na $_SESSION.

if($_POST['action'] == "logon"){

 if ($_POST['password'] == $gb_psswd){

 $_SESSION['psswd'];

 $psswd = $_POST['password'];

 }

 else {echo $_GET['$msg_txt']=$lgerr[5]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

}


if($_GET['msgdelete'] || $_GET['msgdelete'] == "0" ){

 if ($_POST['psswd']==$gb_psswd){

 $data = file($gb_data);

 rsort ($data);

 unset($data[$_POST['msgdelete']]);

 $fp = fopen($gb_data,"w");

 foreach ($data as $row){fputs($fp, $row);}

 fclose($fp);

 }

 else {echo $_GET['$msg_txt']=$lgerr[6]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

}


if($_GET['msgedit'] || $_GET['msgedit'] == "0" ){

 if ($_POST['psswd']==$gb_psswd){

 $_GET['$id']="edit";

 }

 else {echo $_GET['$msg_txt']=$lgerr[7]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

}


if($_POST['msgreplace']){

 if ($_POST['$psswd']==$gb_psswd){

 $data = file($gb_data);

 rsort ($data);

 $message = flt_tags ($message,$gb_flthtml);

 $comment = flt_tags ($comment,0);

 $data[$num] = "".$_POST['index']."|".$_POST['day']."|".$_POST['time']."|".$_POST['ip']."|".$_POST['browser']."|".$_POST['name']."|".$_POST['email']."|".$_POST['page']."|".$_POST['message']."|".$_POST['comment']."|0\r\n";

 $fp = fopen($gb_data,"w");

 foreach ($data as $row){fputs($fp, $row);}

 fclose($fp);

 }

 else {echo $_GET['$msg_txt']=$lgerr[6]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

nadal traci hasło i wszystko znika…

session_start(); jest na samej górze w index.php

W 2 wierszu (pominąłem pierwszy wiersz - pusty) tworzysz zmienną sesyjną psswd ($_SESSION[‘psswd’]), jest ona pusta i nic z nią później się nie dzieje. Czyli po prostu nie sprawdzasz, czy jesteś zalogowany.

Dalej sprawdzasz, czy zmienna $_POST[psswd’] jest Twoim tajnym hasłem, ale żeby to działało musiałbyś za każdym razem wysyłać hasło przez formularz (wiersze 10, 22, 29). I to chyba w tych wierszach powinieneś sprawdzać warunek ze zmienną sesyjną.

Połącz trzeci i czwarty wiersz, tzn. $_SESSION[‘psswd’] = $_POST[‘password’].

jesli chodzi o taki zapis, jesli dobrze kojarze to teraz w ogole sie nie loguje, nawet na pierwsza strone ;(

tak zrobilem - sam poczatek skryptu

0 

1 if($_POST['action'] == "logon"){

2 if ($_POST['password'] == $gb_psswd){

3	$_SESSION['psswd'] = $_POST['password'];

4 }

5 else {echo $_GET['$msg_txt']=$lgerr[5]; $_GET['$msg_cap']=$lgerr[0]; $_GET['$id']="message";}

6 }

nadal nic…