Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zmiana wartości rekordu w tabeli...
Forum PHP.pl > Forum > Bazy danych > MySQL
egorz
Nie do końca wiem gdzie umieścić ten temat ale dam go na razie tutaj. Mam problem - zrobiłem skrypt zmieniający hasło danego użytkownika aczkolwiek mimo braku błędu nie działa on. Prosiłbym o pomoc w zlokalizowaniu problemu oraz naprawie smile.gif

change_password.php
  1. <?php
  2. //formularz
  3. <form action=\"index.php?action=change_password\" method=post>
  4. <input class=login type=password name=old_password></input>
  5. <input class=login type=password name=new_password></input>
  6. <input class=submit type=submit value=Zmień></input>
  7. </form>
  8. ";
  9.  
  10. //spr. czy akcja start
  11. if( $_GET['action']=="change_password" && isset($_POST['old_password']) && isset($_POST['new_password']) )
  12.  
  13. {
  14. //Pobranie zmiennych z formularza, zakodowanie hasła, by później mogło zostać porównane z tym z bązą danych.
  15. $old_password = md5($_POST['old_password']);
  16. $new_password = md5($_POST['new_password']);
  17.  
  18. //Połączenie z bazą danych, wybranie odpowiedniej bazy, wysłanie zapytania o hasło do konkretnego loginu.
  19. $db = mysql_connect( $db_server, $db_user, $db_pass );
  20. mysql_select_db( $db_name );
  21. $query = "SELECT `password` FROM `users` WHERE `login`='$login'";
  22. $query = mysql_query( $query );
  23. $haslo = mysql_fetch_row( $query );
  24.  
  25. //Porównanie wpisanego hasła, z hasłem z bazy danych. Jeżeli poprawne, następuje kontynuacja.
  26. if( $haslo[0]==$old_password )
  27. {
  28. //zmiana hasła
  29. $query = "UPDATE `users` (`id`, `login`, `password`) VALUES ('id', 'login', '$new_password') ";
  30. if( $log = mysql_query($query) ){ echo "<b>OK</b><br>Hasło zostało zmienione!"; }
  31. else{ echo"Coś poszło nie tak.<BR>"; }
  32.  
  33. }
  34.  
  35. mysql_close( $db );
  36. }
  37.  
  38. ?>


index.php:

  1. <?php
  2. //zaladowanie plików
  3. include("config.php");
  4. include("sessions.php");
  5.  
  6. //Sprawdzenie, czy użytkownik jest zalogowany. Jeżeli tak, wyświetlamy treść dostępną tylko dla zalogowanych,
  7. //jeżeli nie, wyświetlamy formularz logowania.
  8. if($_SESSION["USER_AUTH"]==TRUE){ include("panel.php"); }
  9. else{
  10. include("login.php");
  11. include("register.php");
  12. }
  13. ?>


sessions.php

  1. <?php
  2.  
  3. //Rozpoczynamy sesje. Ważnym jest, by ta funkcja znalazła się zawsze na początku, gdyż wysyła ona do przeglądarki
  4. //odpowiednie nagłówki, i poprzedzona przez cokolwiek innego - nie zadziała.
  5.  
  6. //Zwraca wartość zmiennej $_SESSION["USER_AUTH"].
  7. function auth()
  8. {
  9. return $_SESSION["USER_AUTH"];
  10. }
  11.  
  12. //Nadaje zmiennym odpowiednie wartości (dzięki nim, użytkownik będzie traktowany jako zalogowany).
  13. function login( $login )
  14. {
  15. $_SESSION["USER_AUTH"]=TRUE;
  16. $_SESSION["USER_ID"]=$login;
  17. }
  18.  
  19. //Przywraca zmiennym wartości domyślne, by użytkownik był traktowany jako wylogowany.
  20. function logout()
  21. {
  22. $_SESSION["USER_AUTH"]=FALSE;
  23. $_SESSION["USER_ID"]="";
  24. }
  25.  
  26. //wylogowanie
  27. if( $_GET['action']=="logout" ){ logout(); }
  28.  
  29. ?>
darko
1. Na pierwszy rzut oka widzę:

12. if( $_GET['action']=="change_password" &&
a dane z formularza idą metodą POST, właśnie popraw method=post na method="POST" czy tam method=\"POST\"

2. popraw to zapytanie: $query = "UPDATE `users` (`id`, `login`, `password`) VALUES ('id', 'login', '$new_password') "; (gdzie tu jakiś warunek where?, update klucza podstawowego tabeli ?)
egorz
Poprawiłem plik change_password.php według Twoich wskazówek lecz nadal nie działa.

  1. <?php
  2. //formularz
  3. <form action=\"index.php?action=change_password\" method=\"POST\">
  4. <input class=login type=password name=old_password></input>
  5. <input class=login type=password name=new_password></input>
  6. <input class=submit type=submit value=Zmień></input>
  7. </form>
  8. ";
  9.  
  10. //spr. czy akcja start
  11. if( $_POST['action']=="change_password" && isset($_POST['old_password']) && isset($_POST['new_password']) )
  12.  
  13. {
  14. //Pobranie zmiennych z formularza, zakodowanie hasła, by później mogło zostać porównane z tym z bązą danych.
  15. $old_password = md5($_POST['old_password']);
  16. $new_password = md5($_POST['new_password']);
  17.  
  18. //Połączenie z bazą danych, wybranie odpowiedniej bazy, wysłanie zapytania o hasło do konkretnego loginu.
  19. $db = mysql_connect( $db_server, $db_user, $db_pass );
  20. mysql_select_db( $db_name );
  21. $query = "SELECT `password` FROM `users` WHERE `login`='$login'";
  22. $query = mysql_query( $query );
  23. $haslo = mysql_fetch_row( $query );
  24.  
  25. //Porównanie wpisanego hasła, z hasłem z bazy danych. Jeżeli poprawne, następuje kontynuacja.
  26. if( $haslo[0]==$old_password )
  27. {
  28. //zmiana hasła
  29. $query = "UPDATE `users` SET `password` = '$new_password' WHERE `login` = '$login'";
  30. if( $log = mysql_query($query) ){ echo "<b>OK</b><br>Hasło zostało zmienione!"; }
  31. else{ echo"Coś poszło nie tak.<BR>"; }
  32.  
  33. }
  34.  
  35. mysql_close( $db );
  36. }
  37.  
  38. ?>


Chyba, że coś źle poprawiłem :/
darko
to znaczy, co nie działa questionmark.gif Jakiś komunikat błędu poproszę, np. mysql_error()
ps. najlepiej robić update po kluczu
ps2. w logout lepiej session_unset(); i/lub session_destroy();
ps3.
linia 23
  1. $resource = mysql_query($query);
  2. if(!$resource) {
  3. }
egorz
Dobra, nie wywalało żadnego błędu bo jedna zmienna była schrzaniona lecz już ją poprawiłem i dałem to co radziłeś, po czym wywalił mi błąd:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users' WHERE 'login' = 'admin'' at line 1

Sam plik change_password.php obecnie wygląda tak:

  1. <?php
  2. //formularz
  3. <form action=\"index.php?action=change_password\" method=\"POST\">
  4. <input class=login type=password name=old_password></input>
  5. <input class=login type=password name=new_password></input>
  6. <input class=submit type=submit value=Zmień></input>
  7. </form>
  8. ";
  9.  
  10. //spr. czy akcja start
  11. if( $_GET['action']=="change_password" && isset($_POST['old_password']) && isset($_POST['new_password']) )
  12.  
  13. {
  14. //Pobranie zmiennych z formularza, zakodowanie hasła, by później mogło zostać porównane z tym z bązą danych.
  15. $old_password = md5($_POST['old_password']);
  16. $new_password = md5($_POST['new_password']);
  17.  
  18. //Połączenie z bazą danych, wybranie odpowiedniej bazy, wysłanie zapytania o hasło do konkretnego loginu.
  19. $db = mysql_connect( $db_server, $db_user, $db_pass );
  20. mysql_select_db( $db_name );
  21. $query = "SELECT 'password' FROM 'users' WHERE 'login' = '".$_SESSION["USER_ID"]."'";
  22. $resource = mysql_query($query);
  23. if(!$resource) {
  24. }
  25. $haslo = mysql_fetch_row( $query );
  26.  
  27. //Porównanie wpisanego hasła, z hasłem z bazy danych. Jeżeli poprawne, następuje kontynuacja.
  28. if( $haslo[0]==$old_password )
  29. {
  30. //zmiana hasła
  31. $query = " UPDATE `users` SET `password` = '$new_password' WHERE 'login' = '".$_SESSION["USER_ID"]."'";
  32. if( $log = mysql_query($query) ){ echo "<b>OK</b><br>Hasło zostało zmienione!"; }
  33. else{ echo"Coś poszło nie tak.<BR>"; }
  34.  
  35. }
  36.  
  37. mysql_close( $db );
  38. }
  39.  
  40. ?>
darko
Masz błędy w zapytaniach, linia 33

  1. $query = "UPDATE users SET password = '$new_password' WHERE login = '".$_SESSION["USER_ID"]."'";


oraz linia 22

  1. $query = "SELECT password FROM users WHERE login = '".$_SESSION["USER_ID"]."'";


Nie ujmuj w cudzysłowy nazw pól tabeli
egorz
Zamieniłem cudzysłów na akcent słaby i wszystko działa. Plus dla Ciebie smile.gif

@Close
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.