Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z formularzem/przekierowaniem, $_POST, header i takie tam
Belze
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

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


hej

mam problem, z którym już kilka godzin się głowię i nic.

a mianowicie: mam sobie formularz zmiany hasła w cmsie. po sprawdzeniu wartości w javascript przesyła dane do pliku change.php w którym dokonywane są wszystkie zmiany w panelu admina. plik change.php wyłapuje poprzez switch dane z $_POST i kwalifikuje do odpowiedniego działania. jeżeli widzi, że jest to zmiana hasła wyrzuca dane do funkcji changePassword($starehaslo, $nowehaslo) - tam zakłada nową instancje klasy change_password, wysyła dane. po tym jak już wszystko przetworzy chciałbym aby zwracał headerem lokacje do początku, z ewentualnym ustawieniem statusu (powiodło się lub nie) bądź kodem błędu. wszystko fajnie, zwraca dane, ale w przeglądarce pojawia się adres pliku change.php a gdy wcisnę f5 pojawia się komunikat o ponownym przesłaniu formularza.
gdziekolwiek bym nie wrzucił deklaracji lokacji (czy to w pliku change.php, czy w funkcji changePassword czy tez w klasie której instancje powołuje) robi to samo.
kombinowałem z output buffering, ale nawet nie mam pojęcia jak w tym przypadku to zaimplementować.

co ciekawe, jak wrzucę w lokacji inny plik (login.php - który jeżeli widzi, że w sesji jest admin, przekierowuje na główną stronę) i "podwójnie" przejdzie przez header to jest ok.
nie chcę jednak kaszanić i obchodzić tego problemu w taki sposób

czy ktoś wie jak to dobrze zrobić albo jak użyć poprawnie output buffering do tego?

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Belze
post
Post #2





Grupa: Zarejestrowani
Postów: 50
Pomógł: 4
Dołączył: 15.09.2003
Skąd: warszawa

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


formularz:
  1. <form action="change.php" name="formularz-zmianahasla" id="formularz-zmianahasla" method="post" class="formularz">
  2. Stare hasło:&nbsp;<input type="text" name="haslostare" id="haslostare" class="input-box"/><br><br>
  3. Nowe hasło:&nbsp;<input type="password" name="haslonowe" id="haslonowe" class="input-box"/><br><br>
  4. Powtórz nowe hasło:&nbsp;<input type="password" name="haslonowe2" id="haslonowe2" class="input-box"/><br><br>
  5. <input type="hidden" name="wyslany" value="1"/>
  6. <input type="hidden" name="action" value="password"/>
  7. <input type="submit" id="button" value="Zmień"/>
  8. </form>


dalej walidacja js

dalej przechodzi przez submit do change:

  1. if (isset($_POST['wyslany'])) {
  2. $akcja = $_POST['action']; } else { header("Location: index.php", false); }
  3.  
  4. switch($akcja) {
  5. case "password":
  6. changePassword($_POST['haslostare'], $_POST['haslonowe'], $_POST['haslonowe2']);
  7. break;
  8. // tutaj reszta ...
  9. default:
  10. header("Location: ".ADMIN_URL."index.php?error=NN");
  11. die();
  12. }


dalej w functions

  1. function changePassword($oldpass, $newpass, $newpass2) {
  2.  
  3. // tutaj includuje config i plik z klasa dbadmin
  4.  
  5. if ($newpass != $newpass2) { header("Location: ".ADMIN_URL."index.php?error=6"); die(); }
  6. //tworzy nową klasę
  7. $zmianahasla = new dbadmin;
  8. $admin_login = $_SESSION['login'];
  9.  
  10. // zmienia haslo lub wyswietla blad (nieprawidlowe haslo)
  11. $zmianahasla -> change_password($admin_login, $oldpass, $newpass, $db_host, $db_name, $db_password);
  12.  
  13. }


i klasa:
  1. function change_password($admin_login, $old_password, $new_password, $db_host, $db_name, $db_password)
  2. {
  3.  
  4. // tutaj laczy sie z baza, pobiera haslo etc.
  5.  
  6. if ($admin_password != sha1($old_password)) {
  7. header("Location: ".ADMIN_URL."index.php?error=8");
  8. } else {
  9.  
  10. $new_password = sha1($new_password);
  11.  
  12.  
  13. // tutaj udejtuje w bazie haslo
  14.  
  15. header("Location: ".ADMIN_URL."index.php?status=1");
  16. }
  17.  
  18. }


Ten post edytował Belze 22.10.2009, 10:12:20
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 22:45