Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak przez header() przenieść $_POST
Forum PHP.pl > Forum > Przedszkole
Popek231
Witam, kiedyś zrobiłem formularz, który po wysłaniu, przechodził do pliku przekierowanie.php i zapisywał hasło i login, po czym przekierowywał na docelową stronę, a wszystkie $_POST'y były przy tym niezatracone.
Chciałem dojść do tego samego, po otrzymaniu $_GET chcialem ustawic jej wartosc np. $_GET['archiwum'] na $_POST['archiwum'] na true i wyslac za pomoca headera na strone ? (bez ?archiwum), tak zeby po isset($_POST['archiwum']) moglem cos zrobic, ale nie dziala tym razem:(
Da się coś zrobić, czy to nie ma prawa działać?
Tu chodzi tylko o to, żeby z linka zeszło z ?archiwum na ?, ale żebym mogl cos zrobic, jakby to ARCHIWUM (tu: $_GET/POST['archiwum']) bylo wyslane.

Kod który zrobiłem:
  1. <form method="POST" action="">
  2. <tr>
  3. <th colspan="2">
  4. Testowanie
  5. <ul style="text-align:left;border:1px solid #A90000;padding:5px 0 5px 40px;margin:5px 0 5px 30px;">
  6. <li style="list-style:none;margin-left:-30px;"><span style="color:firebrick;font-size:larger;">Opcje:</span></li>
  7. <li><a href="?wybierznabywce" rel="nofollow" style="color:firebrick;font-size:larger;">Wybierz nabywcę</a></li>
  8. <li><a href="?przyklad" rel="nofollow" style="color:firebrick;font-size:larger;">Zobacz wypełnienie</a></li>
  9. <li><a href="?archiwum" rel="nofollow" style="color:firebrick;font-size:larger;">Archiwum</a></li>
  10. </ul>
  11. </th>
  12. </tr>
  13. <tr>
  14. <td>Imię:</td>
  15. <td><input type="text" name="imie" value="Piotr" placeholder="imię"></td>
  16. </tr>
  17. <tr>
  18. <td>Zakończ:</td>
  19. <td><input type="submit" name="wyslano" value="zakończ"></td>
  20. </tr>
  21. </table>
  22. </form>

w tym samym pliku:
  1. <?php
  2. if(isset($_POST['wyslano'])){
  3. header('Location: ?test');
  4. }
  5. if(isset($_GET['test'])){
  6. echo $_POST['imie'];
  7. }
  8.  
  9.  
  10. if(isset($_GET['archiwum'])){
  11. $_POST['archiwum'] = true;
  12. header('Location: ?');
  13. }
  14. if(isset($_POST['archiwum'])){
  15. echo 'udało się!';
  16. }
  17.  
  18.  
  19. if(isset($_GET['przyklad'])){
  20. $_POST['przyklad'] = true;
  21. header('Location: ?');
  22. }
  23. if(isset($_POST['przyklad'])){
  24. echo 'udało się!';
  25. }
  26.  
  27.  
  28. if(isset($_GET['wybierznabywce'])){
  29. $_POST['wybierznabywce'] = true;
  30. header('Location: ?');
  31. }
  32. if(isset($_POST['wybierznabywce'])){
  33. echo 'udało się!';
  34. }
  35. ?>
KsaR
Na poczatku pliku (odrazu za <?php)
Dodaj session_start();

Potem gdy wyslesz robisz np.

$_SESSION['archiwum']=$_POST['archiwum'];

Robisz header z location.
(Ps. Za przekierowaniem dodaj exit(); zeby skrypt sie dalej nie wykonywal).

Potem na tej stronie na ktora przekierowujesz znow robisz na poczatku pliku
session_start();

I sprawdzasz czy istnieja te dane...

  1. if (isset($_SESSION['archiwum']))
  2. {
  3. # cos...
  4. # i ewentualne skasowanie
  5. unset($_SESSION['archiwum']);
  6. }


Gdyby wyskoczylo cos typu "headers already sent"
To dodaj za <?php:

ob_start();
I za tym dopiero session_start();.
Popek231
skoro ostatnio udało się to bez ustawiania sesji, tym razem też chciałbym to osiągnąć, innego rozwiązania na pewno nie ma?


ps. wiem że te POSTy się nie wysyłają, bo gdy wpiszę imię, wykonuje się kod:
  1. if(isset($_POST['imie'])){ //tu teraz poprawiłem, tak samo działa
  2. header('Location: ?test');
  3. }
  4. if(isset($_GET['test'])){
  5. echo $_POST['imie']; //<- 30 linijka
  6. }

wyskakuje błąd:
Notice: Undefined index: imie in ADRES/test.php on line 30
viking
Nie będzie tych danych jeśli nigdzie tablicy POST nie przekażesz. Protokół HTTP jest bezstanowy. Jedno połączenie nie wie nic o drugim. Albo zapis w sesji, albo dalsze przekazanie przy przekierowaniu.
Popek231
a to jak przekazać tablicę POST? wink.gif
viking
Najłatwiej będzie zapisać dane w sesji. Można też przepchnąć dalej nagłówki ale tu musisz rozumieć jak to działa. Przykładowo https://www.sitepoint.com/community/t/how-t...-not-get/4968/6
Popek231
Dobra, mimo że tamten skrypt mi działał (samo Location w headerze wystarczyło) i to nawet pomiędzy dwoma stronami internetowymi, poddaję się i robię to jak było początkowo $_GET'em - chciałem żeby było ładnie, ale jednak nie..sad.gif
dziękuję wszystkim:)

ps. nikt nie podał mi rozwiązania (ani bliżej nie nakierował na nie), ale skoro jest taka opcja na forum, to daję wam POMÓGŁsmile.gif
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.