Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problemy z kodowaniem i odczytem kodu
Forum PHP.pl > Forum > Przedszkole
sebap123
Witam
Napisałem taki kod strony służącej do zmiany hasła użytkownika:
  1. <?
  2. include("../include/sessions.inc");
  3. include("../include/connect.php");
  4. if (isset($_POST['do_change'])){//1
  5. $id=$_SESSION['id'];
  6. $login=$_SESSION['login'];
  7. $password=$_POST['o_password'];
  8. $a=mysql_query("SELECT*FROM tabela_users WHERE user_id='$id' AND user_name='$login' AND user_password=md5('$password')");
  9. $user_exists=mysql_num_rows($a);
  10. if ($user_exists==1){//2
  11. $password=$r['user_password'];
  12. $o_password=$_POST['o_password'];
  13. if ($_POST['password1']==$_POST['password2']){//3
  14. $n_password=$_POST['password1'];
  15. $b=mysql_query("UPDATE tabela_users SET user_password=md5('$n_password') WHERE user_id='$id' AND user_name='$login'");
  16. print "Pomyślnie zaktualizowano dane";
  17. print "<script>setTimeout('document.location = \"register.php\"', 2000);</script>";
  18. }//3
  19. else{//4
  20. $adres = 'http://domena.pl/user/index.php'.'?er=2';
  21. Header('HTTP/1.1 301 Moved Permanently');
  22. Header('Location: '.$adres);
  23. }//4
  24. }
  25. else{//5
  26. $adres = 'http://domena.pl/user/index.php'.'?er=1';
  27. Header('HTTP/1.1 301 Moved Permanently');
  28. Header('Location: '.$adres);
  29. }//5
  30. }//1
  31. else{
  32. if (isset($_GET['er'])){
  33. $er=$_GET['er'];
  34. switch($er){
  35. case '1':
  36. print "<b>Podałeś złe hasło</b>";
  37. break;
  38. case '2':
  39. print "Nowe hasła nie są takie same";
  40. break;}}
  41. ?>
  42. <form method="post" action="update.php">
  43. Aktualne hasło:
  44. <br />
  45. <input type="password" name="o_password" />
  46. <br />
  47. Nowe hasło:
  48. <br />
  49. <input type="password" name="password1" />
  50. <br />
  51. Powtórz hasło:
  52. <br />
  53. <input type="password" name="password2" />
  54. <br />
  55. <input type="submit" value="Aktualizuj" name="do_change" />
  56. </form>
  57. <?
  58. }
  59. ?>

Jednak mam problem ze sprawdzaniem hasła w pierwszym sparwdzeniu, bo caly czas pokazuje mi, że wpisalem złe hasło. Jednak cały czas wpisuje to samo (dobre) haslo i nic.
To jest fragment ze strony gdzie użytkownik jest rejestrowany.
  1. $add = "INSERT INTO tabela_users (user_name, user_password) VALUES ('$user', md5('$pass'))";

Osobiście jestem prawie pewien, że chodzi o kodowanie hasła, ale nie mam pojęcia gdzie jest błąd.
Proszę o pomoc.
Larges
Dodajesz wpis do bazy przy edycji hasła? party.gif

Jeśli działałbyś za pomocą UPDATE lub SELECT i chciał wykorzystać polskie znaki to zapewne radziłbym skorzystanie z convert()
http://dev.mysql.com/doc/refman/5.0/en/charset-convert.html

Tutaj nie bardzo wiem co nie gra.
Hmm chodzi o Kodowanie, czy szyfrowanie? ;>
sebap123
Mysle o czym innym i co innego pisze... laugh.gif
Kodowanie jest ok, chodziło mi o szyfrowanie. Coś mi się to md5 kopie. laugh.gif
Larges
a tak ?

  1. $add = "INSERT INTO tabela_users (user_name, user_password) VALUES ('$user', " . md5($pass) . ")";
sebap123
Nie chodzi mi o dodanie (raczej zmiane) hasła tylko o samo sprawdzenie na początku (po wpisaniu pierwotnego hasła).
  1. if (isset($_POST['do_change'])){//1
  2. $id=$_SESSION['id'];
  3. $login=$_SESSION['login'];
  4. $password=$_POST['o_password'];
  5. $a=mysql_query("SELECT*FROM tabela_users WHERE user_id='$id' AND user_name='$login' AND user_password=md5('$password')");
  6. $user_exists=mysql_num_rows($a);
  7. if ($user_exists==1){//2

Z tego mi wynika, że taki użytkownik nie istnieje bo nie spełnia wszystkich warunków (czyli hasła).
Tutaj jest własnie problem.
Larges
W czym piszesz?
Polecam ZEND lub Eclipse - fajnie kolorują składnię.

Jak się przypatrzysz zapytania SQL masz nieprawidłowe:
  1. $a=mysql_query("SELECT*FROM tabela_users WHERE user_id='$id' AND user_name='$login' AND user_password=md5('$password')");

W nim funkcja md5() nie działa bo nie tak z cudzysłowiem masz ;]

Spróbuj:
  1. $a=mysql_query("SELECT * FROM tabela_users WHERE user_id='$id' AND user_name='$login' AND user_password='" . md5($password) . "'");
sebap123
Piszę w Dreamweaver.
Nie działa mi ten twój kod. Ale zadziałał nieco inny:
  1. $a=mysql_query("SELECT*FROM tabela_users WHERE user_name='$login' AND user_password=md5('$password')");

Jednak teraz mam inny problem, bo hasło nie chce się wpisać do bazy. Niby wyświetla, że zaktualizowano, ale jak się wyloguje i wpisuje nowy kod to pokazuje, że jest zły. Jak wpisze stary to się loguje.
Larges
A jakie masz pole w tabeli na hasło - typ, długość? smile.gif

Poza tym Ty działasz na SELECT (wyszukujesz) i INSERT (dodajesz) a wg mnie powinieneś aktualizować za pomocą UPDATE exclamation.gif smile.gif
http://dev.mysql.com/doc/refman/5.0/en/update.html
sebap123
text
Ale nie sądze, że tabela jest winna ponieważ w pozostałych miejscach strony i dodaje i sprawdza. Nie chce tylko zupdatowac.
Larges
O masz UPDATE, w tym gąszczu pominąłem.

wstaw:
  1. mysql_query("UPDATE tabela_users SET user_password='" . md5($n_password) . "' WHERE user_id='$id' AND user_name='$login'");


po co przed zamytaniem (przed mysql_query('xxx') dajesz np. $b ?
sebap123
Nic... sad.gif
Znowu nie działa.
Larges
sporo Twoich problemów tkwi zapewne w złym używaniu cudzysłowu i apostrofu.
Polecam korzystanie z programu który dobrze koloruje skladnię PHP. Dzięki niemu możesz poznać przed wysłaniem na serwer gdzie tkwi błąd (zaznaczy linijke z błędem) lub czy dobrze użyłeś apostrof, cudzysłów. Poza tym Masz jakąś książkę do PHP? Warto wertować kartki z uwagą.

Nie bardzo wiem już jak Tobie pomóc. To co u mnie ZEND zaznacza jako ok u Ciebie nie działa? ;>
sebap123
OK. Popatrzę jeszcze. Dremweaver dobrze zaznacza, tylko w takich złożonych sprawach się czasami gubi i sobie ułatwia. Poczytam jeszcze i pobrobuję może coś znajdę.
Jak by coś Ci się udało wymyślić to napisz.
Dzięki za pomoc.
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-2025 Invision Power Services, Inc.