Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z header refresh
Forum PHP.pl > Forum > Przedszkole
dopal
Witam,
Mam taki skrypt do logowania, który sprawdza czy minął okres ważności hasła, jeśli tak, to wywołana zostaje zmiana tego hasła, a następnie ma zostać odświeżona strona z dostępnym dla danego konta menu.
Na lokalnym serwerze mi to działa. Niestety, gdy wrzucam na serwer produkcyjny to już nie.
Wyświetla mi się informacja o poprawnej zmianie hasła, ale strona nie zostaje odświeżona.
Czy jest tu jakiś problem?
  1.  
  2. <?php
  3. if (isset($_SESSION['login'])) {
  4. $prac = mysql_query("SELECT `id`, `pesel`, `herb`, TO_DAYS(`data_konta`) - TO_DAYS(NOW()) AS `zmiana` FROM `dawca_rej` WHERE `herb` = '{$_SESSION['login']}'");
  5. while ($row = mysql_fetch_assoc ($prac)){
  6. $osoba = $row['osoba'];
  7. $zmiana = $row['zmiana'];
  8.  
  9. if ( $row['zmiana'] <= 0 ){
  10.  
  11. ?>
  12. <h3>Zmień hasło</h3>
  13. <table>
  14.  
  15. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  16. <tr><td>Login:</td><td><input type="text" name="herb" value="<?php echo $row['herb']; ?>" readonly="readonly"/></td></tr>
  17. <tr><td>Nowe hasło:</td><td><input type="text" name="haslo" size="40"/></td></tr>
  18. <tr><td></td><td><input type="hidden" name="data_konta" value="<?php echo date("Y-m-d",strtotime("+30 days")); ?>" readonly="readonly" /></td></tr>
  19. <tr><td></td><td><input type="submit" style="background-color:yellow" name="edit" value="Zmień hasło"/></tr>
  20. </form>
  21. </table>
  22. <?php
  23.  
  24. if( !empty( $_POST['herb']) && !empty( $_POST['haslo']) && !empty( $_POST['data_konta'])){
  25. $herb = mysql_real_escape_string( $_POST['herb']);
  26. $haslo = hash('sha512', $_POST['haslo']);
  27. $data_konta = mysql_real_escape_string ($_POST['data_konta']);
  28.  
  29. $info5 = 'Hasło zostało zmienione.';
  30. $color5='green';
  31. $query = mysql_query("UPDATE `dawca_rej` SET `haslo` = '$haslo', `data_konta` = '$data_konta' WHERE `herb` = '{$_SESSION['login']}'") or die( mysql_error());
  32.  
  33. header('refresh:2;url= ../admin_sz/panel.php');
  34. //ten zapis powyżej nie działa
  35. }
  36.  
  37. if( empty( $_POST['haslo'])){
  38. $info5 = 'Musisz wpisać nowe hasło.';
  39. $color5= 'red';
  40. }
  41.  
  42. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>'; ?>
  43. <br>
  44. <?php }
  45.  
  46.  
  47. elseif ( $row['zmiana'] > 0 ){
  48. ?>
  49. <h3>Panel Administr</h3>
  50. <?php
  51. require_once('../admin_sz/uprawnienia.php');
  52. ?>
  53. <hr>
  54. <?php
  55. }}}
  56.  
  57. echo 'Witaj <font color="green" size="3"><b>'.$osoba.'</b></font><br>';
  58. if (isset($_SESSION['login'])) {
  59. echo '<font color="black" size="3">Jesteś zalogowany jako: </font>
  60. <font color="red" size="3"><b>'.$_SESSION['login'].'</b></font><br>';
  61.  
  62. unset($_SESSION['kto']);
  63. echo 'Dziś jest: '; echo date('<b>Y-m-d H:i:s</b>');
  64. }
  65. ?>
  66. <br>
  67. <?php
  68. if ( $zmiana <= 0 ){
  69. echo 'Hasło wygasło <font color="red" size="3"><b>'.$zmiana.' </b></font>dni temu';}
  70. if ( $zmiana > 0 ){
  71. echo 'Do zmiany hasła zostało <font color="green" size="3"><b>'.$zmiana.' </b></font>dni';}
  72. ?>
nospor
Przed wyslaniem jakiegokolwiek naglowka nie mozna pojsc do przegladarki zadne dodatkowe info. A u cibeie leci cala masa kodu html. Takie skutki niestosowania sie do zasady:
najpierw logika aplikacji a potem dopiero wyswietlanie

Lokalnie ci dziala bo masz ustawione buforowanie automatyczne. Albo zmien ustawienia serwera na to buforowanie, albo sam wlaczaj buforowanie w kodzie php (ob_start()) albo zacznij pisac poprawnie czyli:
najpierw logika aplikacji a potem dopiero wyswietlanie

Ostatnia opcja jest najlepsza.
dopal
Cytat(nospor @ 25.06.2018, 12:31:45 ) *
najpierw logika aplikacji a potem dopiero wyswietlanie

Wydawało mi się, że to jest logiczne. Przesyłam najpierw login, sprawdzam w bazie czy jest spełniony warunek. Jeśli jest spełniony to wywołuję formularz do zmiany hasła, wyświetlam komunikat o poprawnej zmianie i odświeżam stronę.
Po odświeżeniu warunek nie jest spełniony wiec przechodzi dalej i wyświetla pozostałe informacje. Ale widać byłem w błędzie. Jaka więc kolejność powinna być poprawna?
nospor
No juz ci napisalem: najpierw logika aplikacji, potem wyswietlanie.
U ciebie jest, ze najpierw wyswietlasz - np.formularz , a potem dopiero robisz header.

Wysweitlanie ma sie pojawic dopiero gdy cala logika aplikacji sie zakonczy. Nie wczesniej.
dopal
Jakoś to mi nie wychodzi. Może jakaś podpowiedz, ale bardziej szczegółowa.
nospor
No instrukcje sa jasne: header to logika aplikacji. Robiac header nie mozesz nic wczesniej wyswietlac.
Przeciez w request, ktore wywali header nie potrzebujesz wyswietlac formularza. To go nie wysietlaj. Przeciez wiesz ktory request wymaga formularza a ktory nie.
dopal
Takie coś też nie działa sad.gif Formularz jest na końcu.
  1. <?php
  2.  
  3.  
  4. if (isset($_SESSION['login'])) {
  5. $prac = mysql_query("SELECT `id`, `pesel`, `herb`, TO_DAYS(`data_konta`) - TO_DAYS(NOW()) AS `zmiana` FROM `dawca_rej` WHERE `herb` = '{$_SESSION['login']}'");
  6.  
  7. while ($row = mysql_fetch_assoc ($prac)){
  8.  
  9. $osoba = $row['osoba'];
  10. $zmiana = $row['zmiana'];
  11.  
  12.  
  13. if ( $row['zmiana'] <= 0 ){
  14.  
  15.  
  16.  
  17. if( !empty( $_POST['herb']) && !empty( $_POST['haslo']) && !empty( $_POST['data_konta'])){
  18.  
  19. $herb = mysql_real_escape_string( $_POST['herb']);
  20.  
  21. $haslo = hash('sha512', $_POST['haslo']);
  22.  
  23.  
  24. $data_konta = mysql_real_escape_string ($_POST['data_konta']);
  25.  
  26.  
  27. $info5 = 'Hasło zostało zmienione.';
  28. $color5='green';
  29.  
  30.  
  31. $query = mysql_query("UPDATE `dawca_rej` SET `haslo` = '$haslo', `data_konta` = '$data_konta' WHERE `herb` = '{$_SESSION['login']}'") or die( mysql_error());
  32.  
  33.  
  34.  
  35. }
  36.  
  37.  
  38.  
  39. if( empty( $_POST['haslo'])){
  40.  
  41.  
  42.  
  43. $info5 = 'Musisz wpisać nowe hasło.';
  44. $color5= 'red';
  45.  
  46. }
  47.  
  48.  
  49. ?>
  50.  
  51.  
  52. <br>
  53.  
  54. <?php }
  55. elseif ( $row['zmiana'] > 0 ){
  56.  
  57.  
  58.  
  59. ?>
  60.  
  61.  
  62.  
  63. <h3>Panel Administr</h3>
  64.  
  65. <?php
  66.  
  67. require_once('../admin_sz/uprawnienia.php');
  68.  
  69.  
  70. ?>
  71. <hr>
  72.  
  73.  
  74. <?php
  75. }}
  76.  
  77.  
  78.  
  79.  
  80. header('refresh:2;url= ../admin_sz/panel.php');
  81. }
  82. echo 'Witaj <font color="green" size="3"><b>'.$osoba.'</b></font><br>';
  83.  
  84.  
  85. if (isset($_SESSION['login'])) {
  86.  
  87. echo '<font color="black" size="3">Jesteś zalogowany jako: </font>
  88. <font color="red" size="3"><b>'.$_SESSION['login'].'</b></font><br>
  89. ';
  90.  
  91. unset($_SESSION['kto']);
  92.  
  93. echo 'Dziś jest: '; echo date('<b>Y-m-d H:i:s</b>');
  94.  
  95. }
  96. ?>
  97. <br>
  98. <?php
  99. if ( $zmiana <= 0 ){
  100.  
  101. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>'; ?>
  102.  
  103. <h3>Zmień hasło</h3>
  104. <table>
  105.  
  106. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  107.  
  108.  
  109.  
  110. <tr><td>Login:</td><td><input type="text" name="herb" value="<?php echo $_SESSION['login']; ?>" readonly="readonly"/></td></tr>
  111.  
  112. <tr><td>Nowe hasło:</td><td><input type="text" name="haslo" size="40"/></td></tr>
  113.  
  114. <tr><td></td><td><input type="hidden" name="data_konta" value="<?php echo date("Y-m-d",strtotime("+30 days")); ?>" readonly="readonly" /></td></tr>
  115.  
  116. <tr><td></td><td><input type="submit" style="background-color:yellow" name="edit" value="Zmień hasło"/></tr>
  117.  
  118. </form>
  119.  
  120. </table>
  121.  
  122. <?php
  123.  
  124.  
  125.  
  126.  
  127. echo 'Hasło wygasło <font color="red" size="3"><b>'.$zmiana.' </b></font>dni temu';}
  128. if ( $zmiana > 0 ){
  129.  
  130.  
  131. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>';
  132. echo 'Do zmiany hasła zostało <font color="green" size="3"><b>'.$zmiana.' </b></font>dni'
  133. ;}
  134.  
  135.  
  136. ?>
  137.  
nospor
No ale przed header masz teraz jeszcze to:

<h3>Panel Administr</h3>

Masz rowniez cala mase pustych linii (ENTEROW). Zrozum. Nic nie moze pojsc. Zaden tekst, zadna spacja, nic. nie mozesz pojsc tez zaden znaczik html ala: <html><body> jesli takowe masz ghdzies tam a nie pokazales tu w kodzie
dopal
W kodzie pokazałem wszystko.
Zmieniłem to tak. Nic już nie powinno się wyświetlać przed header, ale to i tak nie działa. Gdzie tu jeszcze robie błąd.
  1.  
  2. <?php
  3. if (isset($_SESSION['login'])) {
  4. $prac = mysql_query("SELECT `id`, `pesel`, `herb`, TO_DAYS(`data_konta`) - TO_DAYS(NOW()) AS `zmiana` FROM `dawca_rej` WHERE `herb` = '{$_SESSION['login']}'");
  5.  
  6. while ($row = mysql_fetch_assoc ($prac)){
  7.  
  8. $osoba = $row['osoba'];
  9. $zmiana = $row['zmiana'];
  10.  
  11. if ( $row['zmiana'] <= 0 ){
  12.  
  13.  
  14. if( !empty( $_POST['herb']) && !empty( $_POST['haslo']) && !empty( $_POST['data_konta'])){
  15. $herb = mysql_real_escape_string( $_POST['herb']);
  16.  
  17. $haslo = hash('sha512', $_POST['haslo']);
  18.  
  19. $data_konta = mysql_real_escape_string ($_POST['data_konta']);
  20.  
  21. $info5 = 'Hasło zostało zmienione.';
  22. $color5='green';
  23. $query = mysql_query("UPDATE `dawca_rej` SET `haslo` = '$haslo', `data_konta` = '$data_konta' WHERE `herb` = '{$_SESSION['login']}'") or die( mysql_error());
  24. }
  25.  
  26.  
  27.  
  28. if( empty( $_POST['haslo'])){
  29.  
  30. $info5 = 'Musisz wpisać nowe hasło.';
  31. $color5= 'red';
  32. }
  33. ?>
  34. <br>
  35. <?php
  36. header('refresh:2;url= ../admin_sz/panel.php');
  37. }
  38. elseif ( $row['zmiana'] > 0 ){
  39. require_once('../admin_sz/uprawnienia.php');
  40. ?>
  41. <hr>
  42. <?php
  43. }
  44. }
  45. }
  46. echo 'Witaj <font color="green" size="3"><b>'.$osoba.'</b></font><br>';
  47.  
  48. if (isset($_SESSION['login'])) {
  49. echo '<font color="black" size="3">Jesteś zalogowany jako: </font>
  50. <font color="red" size="3"><b>'.$_SESSION['login'].'</b></font><br>
  51. ';
  52.  
  53. unset($_SESSION['kto']);
  54.  
  55. echo 'Dziś jest: '; echo date('<b>Y-m-d H:i:s</b>');
  56.  
  57. }
  58. ?>
  59. <br>
  60. <?php
  61. if ( $zmiana <= 0 ){
  62.  
  63. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>'; ?>
  64.  
  65. <h3>Zmień hasło</h3>
  66. <table>
  67.  
  68. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  69.  
  70. <tr><td>Login:</td><td><input type="text" name="herb" value="<?php echo $_SESSION['login']; ?>" readonly="readonly"/></td></tr>
  71.  
  72. <tr><td>Nowe hasło:</td><td><input type="text" name="haslo" size="40"/></td></tr>
  73.  
  74. <tr><td></td><td><input type="hidden" name="data_konta" value="<?php echo date("Y-m-d",strtotime("+30 days")); ?>" readonly="readonly" /></td></tr>
  75.  
  76. <tr><td></td><td><input type="submit" style="background-color:yellow" name="edit" value="Zmień hasło"/></tr>
  77.  
  78. </form>
  79.  
  80. </table>
  81.  
  82. <?php
  83. echo 'Hasło wygasło <font color="red" size="3"><b>'.$zmiana.' </b></font>dni temu';}
  84. if ( $zmiana > 0 ){
  85. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>';
  86. echo 'Do zmiany hasła zostało <font color="green" size="3"><b>'.$zmiana.' </b></font>dni'
  87. ;}
  88. ?>
  89.  
  90.  
nospor
Dobra, ja sie poddaje. Wyraznie ci napisalem NIC a ty dalej walisz COS. Nie bede ci palcem kazdej linijki pokazywal bo to juz lekka przesada
dopal
Nie oczekuje pokazywania każdej linijki, wystarczy napisać np. tak:
najpierw zrób sprwdzenie loginu w bazie;
jesli warunek spełniony to zrob to;
jeśli nie to zrób tamto;
tutaj ma być header;
tu ma być wyświetlanie.
Wszystkie puste linie wykasowane
  1. <?php
  2. if (isset($_SESSION['login'])) {
  3. $prac = mysql_query("SELECT `id`, `pesel`, `herb`, TO_DAYS(`data_konta`) - TO_DAYS(NOW()) AS `zmiana` FROM `dawca_rej` WHERE `herb` = '{$_SESSION['login']}'");
  4. while ($row = mysql_fetch_assoc ($prac)){
  5. $osoba = $row['osoba'];
  6. $zmiana = $row['zmiana'];
  7. if ( $row['zmiana'] <= 0 ){
  8. if( !empty( $_POST['herb']) && !empty( $_POST['haslo']) && !empty( $_POST['data_konta'])){
  9. $herb = mysql_real_escape_string( $_POST['herb']);
  10. $haslo = hash('sha512', $_POST['haslo']);
  11. $data_konta = mysql_real_escape_string ($_POST['data_konta']);
  12. $info5 = 'Hasło zostało zmienione.';
  13. $color5='green';
  14. $query = mysql_query("UPDATE `dawca_rej` SET `haslo` = '$haslo', `data_konta` = '$data_konta' WHERE `herb` = '{$_SESSION['login']}'") or die( mysql_error());
  15. }
  16. if( empty( $_POST['haslo'])){
  17. $info5 = 'Musisz wpisać nowe hasło.';
  18. $color5= 'red';
  19. }
  20. ?>
  21. <br>
  22. <?php
  23. header('refresh:2;url= ../admin_sz/panel.php');
  24. }
  25. elseif ( $row['zmiana'] > 0 ){
  26. require_once('../admin_sz/uprawnienia.php');
  27. ?>
  28. <hr>
  29. <?php
  30. }
  31. }
  32. }
  33. echo 'Witaj <font color="green" size="3"><b>'.$osoba.'</b></font><br>';
  34. if (isset($_SESSION['login'])) {
  35. echo '<font color="black" size="3">Jesteś zalogowany jako: </font>
  36. <font color="red" size="3"><b>'.$_SESSION['login'].'</b></font><br>';
  37. unset($_SESSION['kto']);
  38. echo 'Dziś jest: '; echo date('<b>Y-m-d H:i:s</b>');
  39. }
  40. ?>
  41. <br>
  42. <?php
  43. if ( $zmiana <= 0 ){
  44. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>'; ?>
  45. <h3>Zmień hasło</h3>
  46. <table>
  47. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  48. <tr><td>Login:</td><td><input type="text" name="herb" value="<?php echo $_SESSION['login']; ?>" readonly="readonly"/></td></tr>
  49. <tr><td>Nowe hasło:</td><td><input type="text" name="haslo" size="40"/></td></tr>
  50. <tr><td></td><td><input type="hidden" name="data_konta" value="<?php echo date("Y-m-d",strtotime("+30 days")); ?>" readonly="readonly" /></td></tr>
  51. <tr><td></td><td><input type="submit" style="background-color:yellow" name="edit" value="Zmień hasło"/></tr>
  52. </form>
  53. </table>
  54. <?php
  55. echo 'Hasło wygasło <font color="red" size="3"><b>'.$zmiana.' </b></font>dni temu';}
  56. if ( $zmiana > 0 ){
  57. echo '<font color="'.$color5.'" size="3"><b>'.$info5.'</b></font>';
  58. echo 'Do zmiany hasła zostało <font color="green" size="3"><b>'.$zmiana.' </b></font>dni'
  59. ;}
  60. ?>
nospor
Napisalem ci wyraznie co masz zrobic. Instrukcje byly naprawde banalne. Banalne.

Cytat
Wszystkie puste linie wykasowane
Napislaem ci wyraznide co ma byc skasowane. Puste linie byly tylko jedne z wielu.
dopal
No nic ja też się poddaje i zrobię to zupełnie inaczej, bez sprawdzania ważności hasła ( choć szkoda), bo jednak trochę bardziej liczyłem na pomoc a nie na powtarzanie ciągle tego samego przez Ciebie. Skoro to jest miejsce dla początkujących to oczekiwałbym trochę więcej zrozumienia, nie wszyscy to eksperci. A nie oczekuję podania rozwiązania na tacy, a jedynie konkretnych wskazówek. Gdybym wiedział co masz na mysli, to bym się nie dopytywał. Mimo to dzięki.
viking
Nospor mówi że masz usunąć wszystkie biały znaki a ty dalej je zostawiasz. Przede wszystkim brakuje ci totalnych podstaw działania sieci. https://prophp.pl/article/1/protokol_http Może jak to zrozumiesz będziesz wiedział gdzie jest błąd. Potem możesz kombinowac z ob_start();
nospor
Cytat
A nie oczekuję podania rozwiązania na tacy, a jedynie konkretnych wskazówek. Gdybym wiedział co masz na mysli, to bym się nie dopytywał. Mimo to dzięki.
Kurcze, ale powiedz mi czego nie rozumiesz w slowie NIC?
Nic nie mozesz wyslac do przegladarki przed header. NIC. A ty ciagle wysylasz cos. ciagle wysylasz kawalki html czy pustych znakow. Nie rozumiem co tu jest niezrozumialego.
Sprawdz w slowniku definicje slowa NIC.
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-2024 Invision Power Services, Inc.