Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z formularzem/przekierowaniem, $_POST, header i takie tam
Belze
post 21.10.2009, 19:34:24
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
maly_swd
post 21.10.2009, 22:21:50
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


a mozemy zobaczyc jak Ty to robisz? przyklad?


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Belze
post 21.10.2009, 23:28:48
Post #3





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
Ociu
post 22.10.2009, 09:56:45
Post #4





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




@Belze: Proszę używać odpowiedniego kolorowania składni. Mamy kolorowanie dla języków HTML [HTML], PHP [PHP] i kupę innych, dostępnych w select'cie "Kolorowanie składni". Proszę zmienić poprawić swój post i używać kolorowania, ponieważ może to doprowadzić do usunięcia tematu.

pozdrawiam.
Go to the top of the page
+Quote Post
Belze
post 22.10.2009, 22:59:45
Post #5





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

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


wybaczcie, często tu nie bywam, więc zapomniałem o takiej opcji, już poprawiłem smile.gif

edit:
ok. podwojne przekierowanie nie dziala, nie mam pojecia czemu w przypadku jednego pliku zadziałało.
czy ktoś ma jakiś pomysł? nie chcę stosować asynchronicznych zadan, bo za duzo zachodu dla takiej glupoty

Ten post edytował Belze 22.10.2009, 23:00:01
Go to the top of the page
+Quote Post
thek
post 23.10.2009, 08:28:50
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Jeśli nie wiesz tego, to sobie zdebuguj zmienne. Możliwe, że na etapie przekazywania ich do odpowiednich funkcji, nadpisujesz je w jakiś sposób innymi widocznymi dla reszty klasy/strony lub w jakiś sposób różnią sie one. Może zrób sobie jakiś plik logu, gdzie te informacje sobie będziesz zapisywał., wraz z wyjściem i errorami.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Belze
post 23.10.2009, 11:11:15
Post #7





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

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


szczerze powiedziawszy nie wiem jak do tego mogę się zabrać ;/
wiem, co zresztą jest oczywiste, że mimo powrócenia w lokacji do pliku który go wywołał nadal ma ustawione $_POST..

ktoś pomoże?
Go to the top of the page
+Quote Post
Sky_walker
post 23.10.2009, 11:40:36
Post #8





Grupa: Zarejestrowani
Postów: 214
Pomógł: 23
Dołączył: 26.09.2005

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


Nie wczytywałem się w treść, ale:
Jeśli masz ustawione POST a nie chcesz, to robisz $POST=null; i po problemie smile.gif

w Change.php przed zmianą header spróboj dać:
  1. $_POST['haslostare']=null;


czy coś analogicznego, żeby sprawiło, że wsio działa smile.gif


--------------------
Pomogłem? Kliknij poniżej.
Dzięki! :D
Go to the top of the page
+Quote Post
Belze
post 23.10.2009, 15:01:00
Post #9





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

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


no niestety - to samo. po wrzuceniu phpinfo widze, ze wyzerowal POST, ale nadal mysli ze przeslal formularz, a request url jest change.php. czy jest mozliwosc aby zmusic go do porzucenia trybu przesylania danych.. sam juz niewiem..

wynullowalem wszystkie zmienne które odnoszą się do change.php i nic. jedyne referencje są w 'Environment'. czyli i z tego lipa

ok mam. ale nie pojmuje czemu tak to mi wyświetlało..

  1. header("Location: ".ADMIN_URL."index.php?blabla");

trzeba było wywalić ADMIN.URL - czyli bezwzględny adres. a dziwne, bo header powinno się z nim wysyłać...
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: 14.06.2025 - 21:45