Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][MySQL][PHP] Zmiana hasła - brak informacji o błędach
Laxus
post 10.05.2017, 19:33:20
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.03.2017

Ostrzeżenie: (0%)
-----


Mam problem ze skryptem odpowiedzialnym za zmianę hasła użytkownika.

W poniższym kodzie linie 7-40 odpowiadają za walidację formularza do zmiany hasła.
Formularz to linie 84-108.
Zaś w liniach 118-133 umieściłem dwa spany, w których ma wyświetlać się informacja o zmianie hasła, bądź błędzie.

Kod w zasadzie działa poprawnie, bo hasło się zmienia, jeśli spełnione są wszystkie warunki. Problem w tym, że nie wyświetlają mi się w spanach żadne informacje.

Gapię się w kod już z godzinę i nie mogę dojść co jest nie tak sad.gif

  1. <?php
  2. if( !isset( $_SESSION[ 'logged' ] ) ) {
  3. header( 'Location: ../index.php' );
  4. exit();
  5. }
  6. if( isset( $_POST[ 'change-password-submit' ] ) ) {
  7. $validate = true;
  8. if( $_POST[ 'old-password' ] != password_verify($_POST[ 'old-password' ], $_SESSION[ 'logged' ] [ 'password' ] ) ) {
  9. $_SESSION[ 'change_password_error' ] = 'Stare hasło jest niepoprawne';
  10. $validate = false;
  11. }
  12. if( strlen( $_POST[ 'new-password' ] ) < 8 || strlen( $_POST[ 'new-password' ] ) > 12 ) {
  13. $_SESSION[ 'change_password_error' ] = 'Nowe hasło musi mieć 8-12 znaków';
  14. $validate = false;
  15. }
  16. if( $_POST[ 'new-password' ] != $_POST[ 'new-password2' ] ) {
  17. $_SESSION[ 'change_password_error' ] = 'Nowe hasła nie są identyczne';
  18. $validate = false;
  19. }
  20. if( empty( $_POST[ 'old-password' ] ) || empty( $_POST[ 'new-password' ] ) || empty( $_POST[ 'new-password2' ] ) ) {
  21. $_SESSION[ 'change_password_error' ] = 'Musisz wypełnić wszystkie pola;';
  22. $validate = false;
  23. }
  24. if( $validate == false ) {
  25. header( 'Location: profile.php' );
  26. } else {
  27. $password = password_hash( $_POST[ 'new-password' ], PASSWORD_DEFAULT );
  28. try {
  29. require_once( 'connect.php' );
  30. $change_password = $pdo -> prepare( "UPDATE users SET password = :password" );
  31. $change_password -> bindParam( ':password', $password );
  32. $change_password -> execute();
  33. } catch(PDOException $e) {
  34. echo 'ERROR: ' . $e -> getMessage();
  35. }
  36. $_SESSION[ 'change_password_success' ] = 'Twoje hasło zostało zmienione';
  37. header( 'Location: profile.php' );
  38. }
  39. }
  40. ?>
  41.  
  42. <!DOCTYPE html>
  43. <html>
  44. <head>
  45. <meta charset="utf-8">
  46. <title>
  47. Profil użytkownika
  48. <?php
  49. echo $_SESSION[ 'logged' ] [ 'login' ];
  50. ?>
  51. </title>
  52. <link rel="stylesheet" type="text/css" href="../css/screen.css" media="screen">
  53. </head>
  54. <body>
  55. <?php
  56. include_once( 'top.php' );
  57. ?>
  58.  
  59. <aside id="profile">
  60. <h1>
  61. Profil użytkownika
  62. <?php
  63. echo $_SESSION[ 'logged' ] [ 'login' ];
  64. ?>
  65. </h1>
  66. <img src="../img/users/<?php echo $_SESSION[ 'logged' ] [ 'avatar' ]; ?>" alt="<?php echo $_SESSION[ 'logged' ] [ 'avatar' ]; ?>">
  67. <table border="1">
  68. <tr>
  69. <td>Nazwa użytkownika: </td>
  70. <td><?php echo $_SESSION[ 'logged' ] [ 'login' ]; ?></td>
  71. </tr>
  72. <tr>
  73. <td>Adres e-mail: </td>
  74. <td><?php echo $_SESSION[ 'logged' ] [ 'email' ]; ?></td>
  75. </tr>
  76. <tr>
  77. <td>Data założenia konta: </td>
  78. <td><?php echo $_SESSION[ 'logged' ] [ 'date' ]; ?></td>
  79. </tr>
  80. <tr>
  81. <td colspan="2"><a href="#" id="change_password" onclick="toggle('change_password_div');">Zmień hasło</a></td>
  82. <div id="change_password_div" style="display: none;">
  83. <form action="profile.php" method="post">
  84. <ul>
  85. <li>
  86. <label for="old-password">Stare hasło</label>
  87. </li>
  88. <li>
  89. <input type="password" name="old-password" id="old-password">
  90. </li>
  91. <li>
  92. <label for="new-password">Nowe hasło</label>
  93. </li>
  94. <li>
  95. <input type="password" name="new-password" id="new-password">
  96. </li>
  97. <li>
  98. <label for="new-password2">Powtórz hasło</label>
  99. </li>
  100. <li>
  101. <input type="password" name="new-password2" id="new-password2">
  102. </li>
  103. <li>
  104. <input type="submit" name="change-password-submit" id="change-password-submit" value="Zmień hasło">
  105. </li>
  106. </ul>
  107. </form>
  108. </div>
  109. </tr>
  110. <tr>
  111. <td colspan="2"><a href="#" id="change_avatar">Zmień obraz konta</a></td>
  112. </tr>
  113. <tr>
  114. <td colspan="2"><a href="logout.php">Wyloguj się</a></td>
  115. </tr>
  116. </table>
  117. <span class="error change-password-error">
  118. <?php
  119. if( isset( $_SESSION[ 'change_password_error' ] ) ) {
  120. echo $_SESSION[ 'change_password_error' ];
  121. unset( $_SESSION[ 'change_password_error' ] );
  122. }
  123. ?>
  124. </span>
  125. <span class="success change-password-success">
  126. <?php
  127. if( isset( $_SESSION[ 'change_password_success' ] ) ) {
  128. echo $_SESSION[ 'change_password_success' ];
  129. unset( $_SESSION[ 'change_password_success' ] );
  130. }
  131. ?>
  132. </span>
  133. </aside>
  134. <script type="text/javascript" src="../js/script.js"></script>
  135. </body>
  136. </html>
Go to the top of the page
+Quote Post
bostaf
post 11.05.2017, 08:53:23
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


A w profile.php masz session_start na początku?

(ps. bardzo ładnie sformatowany kod. Porządek to podstawa, tak trzymać)
Go to the top of the page
+Quote Post
Laxus
post 11.05.2017, 09:09:00
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.03.2017

Ostrzeżenie: (0%)
-----


To jest plik profile.php

Chciałem, żeby cały kod wykonywał się w tym samym pliku. Dzisiaj trochę pozmieniałem, bo myślałem, że może sesje powodują problem i napisałem to za pomocą zmiennych i tablic, lecz nic się nie zmieniło.
Nie wiem co robię źle.

  1. <?php
  2.  
  3. $messages = array(
  4. 'change_password_error' => array(
  5. 'Stare hasło jest niepoprawne',
  6. 'Nowe hasło musi mieć 8-12 znaków',
  7. 'Nowe hasła nie są identyczne',
  8. 'Musisz wypełnić wszystkie pola'
  9. ),
  10. 'change_password_success' => array(
  11. 'Twoje hasło zostało zmienione'
  12. )
  13. );
  14. if( !isset( $_SESSION[ 'logged' ] ) ) {
  15. header( 'Location: ../index.php' );
  16. exit();
  17. }
  18. if( isset( $_POST[ 'change-password-submit' ] ) ) {
  19. $validate = true;
  20. if( $_POST[ 'old-password' ] != password_verify($_POST[ 'old-password' ], $_SESSION[ 'logged' ] [ 'password' ] ) ) {
  21. $change_password_message = $messages[ 'change_password_error' ] [0];
  22. $validate = false;
  23. }
  24. if( strlen( $_POST[ 'new-password' ] ) < 8 || strlen( $_POST[ 'new-password' ] ) > 12 ) {
  25. $change_password_message = $messages[ 'change_password_error' ] [1];
  26. $validate = false;
  27. }
  28. if( $_POST[ 'new-password' ] != $_POST[ 'new-password2' ] ) {
  29. $change_password_message = $messages[ 'change_password_error' ] [2];
  30. $validate = false;
  31. }
  32. if( empty( $_POST[ 'old-password' ] ) || empty( $_POST[ 'new-password' ] ) || empty( $_POST[ 'new-password2' ] ) ) {
  33. $change_password_message = $messages[ 'change_password_error' ] [3];
  34. $validate = false;
  35. }
  36. if( $validate == false ) {
  37. header( 'Location: profile.php' );
  38. } else {
  39. $password = password_hash( $_POST[ 'new-password' ], PASSWORD_DEFAULT );
  40. try {
  41. require_once( 'connect.php' );
  42. $change_password = $pdo -> prepare( "UPDATE users SET password = :password" );
  43. $change_password -> bindParam( ':password', $password );
  44. $change_password -> execute();
  45. } catch(PDOException $e) {
  46. echo 'ERROR: ' . $e -> getMessage();
  47. }
  48. $change_password_message = $messages[ 'change_password_success' ] [0];
  49. header( 'Location: profile.php' );
  50. }
  51. }
  52. ?>
  53.  
  54. <!DOCTYPE html>
  55. <html>
  56. <head>
  57. <meta charset="utf-8">
  58. <title>
  59. Profil użytkownika
  60. <?php
  61. echo $_SESSION[ 'logged' ] [ 'login' ];
  62. ?>
  63. </title>
  64. <link rel="stylesheet" type="text/css" href="../css/screen.css" media="screen">
  65. </head>
  66. <body>
  67. <?php
  68. include_once( 'top.php' );
  69. ?>
  70. <aside id="profile">
  71. <h1>
  72. Profil użytkownika
  73. <?php
  74. echo $_SESSION[ 'logged' ] [ 'login' ];
  75. ?>
  76. </h1>
  77. <img src="../img/users/<?php echo $_SESSION[ 'logged' ] [ 'avatar' ]; ?>" alt="<?php echo $_SESSION[ 'logged' ] [ 'avatar' ]; ?>">
  78. <table border="1">
  79. <tr>
  80. <td>Nazwa użytkownika: </td>
  81. <td><?php echo $_SESSION[ 'logged' ] [ 'login' ]; ?></td>
  82. </tr>
  83. <tr>
  84. <td>Adres e-mail: </td>
  85. <td><?php echo $_SESSION[ 'logged' ] [ 'email' ]; ?></td>
  86. </tr>
  87. <tr>
  88. <td>Data założenia konta: </td>
  89. <td><?php echo $_SESSION[ 'logged' ] [ 'date' ]; ?></td>
  90. </tr>
  91. <tr>
  92. <td colspan="2"><a href="#" id="change_password" onclick="toggle('change_password_div');">Zmień hasło</a></td>
  93. <div id="change_password_div" style="display: none;">
  94. <form action="profile.php" method="post">
  95. <ul>
  96. <li>
  97. <label for="old-password">Stare hasło</label>
  98. </li>
  99. <li>
  100. <input type="password" name="old-password" id="old-password">
  101. </li>
  102. <li>
  103. <label for="new-password">Nowe hasło</label>
  104. </li>
  105. <li>
  106. <input type="password" name="new-password" id="new-password">
  107. </li>
  108. <li>
  109. <label for="new-password2">Powtórz hasło</label>
  110. </li>
  111. <li>
  112. <input type="password" name="new-password2" id="new-password2">
  113. </li>
  114. <li>
  115. <input type="submit" name="change-password-submit" id="change-password-submit" value="Zmień hasło">
  116. </li>
  117. </ul>
  118. </form>
  119. </div>
  120. </tr>
  121. <tr>
  122. <td colspan="2"><a href="#" id="change_avatar">Zmień obraz konta</a></td>
  123. </tr>
  124. <tr>
  125. <td colspan="2"><a href="logout.php">Wyloguj się</a></td>
  126. </tr>
  127. </table>
  128. <span class="error change-password-error">
  129. <?php
  130. if( isset( $change_password_message ) ) {
  131. echo $change_password_message;
  132. unset( $change_password_message );
  133. }
  134. ?>
  135. </span>
  136. <span class="success change-password-success">
  137. <?php
  138. if( isset( $change_password_message ) ) {
  139. echo $change_password_message;
  140. unset( $change_password_message );
  141. }
  142. ?>
  143. </span>
  144. </aside>
  145. <script type="text/javascript" src="../js/script.js"></script>
  146. </body>
  147. </html>
Go to the top of the page
+Quote Post
trueblue
post 11.05.2017, 09:46:26
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Przypisujesz komunikaty do zmiennej, która nie przetrzymuje wartości po przekierowaniu.


--------------------
Go to the top of the page
+Quote Post
goartur
post 11.05.2017, 09:58:03
Post #5





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

Ostrzeżenie: (0%)
-----


Cytat(trueblue @ 11.05.2017, 09:46:26 ) *
Przypisujesz komunikaty do zmiennej, która nie przetrzymuje wartości po przekierowaniu.



Aby to rozwiazac zapisz komunikaty w sesji smile.gif I pozniej je usun.
Go to the top of the page
+Quote Post
bostaf
post 11.05.2017, 10:08:01
Post #6





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(goartur @ 11.05.2017, 10:58:03 ) *
Aby to rozwiazac zapisz komunikaty w sesji smile.gif I pozniej je usun.

Niom, w pierwszej wersji tak miał. Teraz zmienił. W pierwszej wersji teoretycznie wszystko wyglądało OK, ale nie działało tak jak powinno.
Go to the top of the page
+Quote Post
goartur
post 11.05.2017, 10:43:35
Post #7





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

Ostrzeżenie: (0%)
-----


To najpiert w tym IF ktory sprawdza czy jest jakies blad zrob echo 'test'; naprzyklad, jak dziala to zrob var_dump($_SESSION['change_password_message'])
W innym wypadku poza if zrob var_dump($_SESSION) i zobacz co zwraca
Go to the top of the page
+Quote Post
bostaf
post 11.05.2017, 11:07:39
Post #8





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Znalazłem. Ta pierwsza wersja była oczywiście OK, ale po przekierowaniu w linii 38 brakowało instrukcji exit albo die.
Go to the top of the page
+Quote Post
Laxus
post 11.05.2017, 12:40:50
Post #9





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 5.03.2017

Ostrzeżenie: (0%)
-----


Dzięki wielkie. Faktycznie to był problem. W pierwszej wersji kodu było trzeba dopisać exit() po liniach 26 i 38, czyli kiedy wykonuje przekierowanie. Teraz wszystko śmiga jak należy smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 23:50