Słuchajcie, mam dosyć dziwny problem. Mianowicie robię panel klienta i wszystko jest zrobione od jakiegoś czasu. Nie testowałem skryptu logowania - do dzisiaj. gdy chcę się zalogować do bazy a hasło mam ustawione test1234 to zaloguje. Natomiast gdy wyłączę kompa i włączę jeszcze raz to hasło się zmienia (resetuje) na:
Kod
d41d8cd98f00b204e9800998ecf8427e
Z tego co się dowiedziałem u wujka Google oznacza to null lub inaczej 0 czy nawet brak znaków. Czym to może być spowodowane ? Tak wygląda struktura: password | varchar(32) | latin2_general_ci | Nie | None
if ($_GET["login"]=="end") { session_unset(); session_destroy(); } else if ($login<>"" and $haslo<>"") { $password = md5($haslo); if ($connect) { if (mysql_select_db($mysql_baza)) { $wynik=mysql_query("SELECT * FROM clients WHERE login='$login' and password='$password'"); if (mysql_num_rows($wynik)==1) { $dane=mysql_fetch_array($wynik); $_SESSION["logged"]="yes"; $_SESSION["login"]=$dane["login"]; $_SESSION["email"]=$dane["email"]; ... } } else echo "Nie można połączyć się z bazą"; mysql_close($connect); } }
Chyba zadziałało usunięcie. Ale teraz trzeba kliknąć dwa razy w butona aby wylogowało. No tyle mogą zrobić klienci Jeśli coś będzie nie działać będę pisał.
Pewnie $_POST['password'] masz puste. I pewnie wiem dlaczego: nie sprawdzasz czy formularz został wysłany tylko z pały aktualizujesz dane. Sprawdź czy formularz został wysłany (np. count($_POST) > 0) albo sprawdź samą długość $_POST['password'] > 0.
darophp
16.06.2010, 17:23:36
No właśnie ... tylko jak to zrobić .. ?
Kod
if ($page=="settings") { echo "<p>Twój login: ".$_SESSION["login"]."<br/>Twój email: ".$_SESSION["email"]."</p>"; $password = md5($_POST["password"]); if ($connect) { $wynik = mysql_query("UPDATE clients SET password='$password' WHERE login='{$_SESSION["login"]}'"); if (empty($_POST["submit"])) { echo <<<FORM <form action="/index.php?page=settings" method="post"> <p>Hasło: <input type="password" name="password" /></p> <input type="submit" class="change" value=" " /> </form> FORM; } else { echo "Błąd. Nie zmieniono hasła."; } } echo "<div style=\"margin-top: 310px;\"></div>"; }
thek
16.06.2010, 20:18:42
$_POST w formularzu zawsze będzie > 0, bo zaliczy submita choćby więc to żadne zabezpieczenie. Tu trzeba sprawdzać prędzej czy aby !empty( $_POST['password'] ) i od tego uzależniać także czy update jest czy nie. Oczywiście to tylko z grubsza zarysowane. Powinieneś od razu zabezpieczać form przed odświeżaniem
phpion
17.06.2010, 07:00:30
Cytat(thek @ 16.06.2010, 21:18:42 )
$_POST w formularzu zawsze będzie > 0, bo zaliczy submita choćby więc to żadne zabezpieczenie.
Na marginesie: nie zgodzę się. Jeśli nie nadasz nazwy submitowi (poprzez atrybut name) to nie pojawi się on w tablicy $_POST.
thek
17.06.2010, 09:51:18
No tak... o Tym przypadku zapomniałem Choć z drugiej strony dowolny input type="text", też sprawi, że $_POST nie będzie pusta. A w sumie rzadko używa się formularzy, które nie mają żadnego pola do uzupełnienia.
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.