Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] przesłanie zmiennej na bieżącą stronę, GET (lub POST)
Forum PHP.pl > Forum > Przedszkole
Gość_papik_*
Witam.
Mam następujący problem.

Jest sobie pewna strona, na którą przekazuję zmienne w adresie:
np.
index.php?page=menu

Na tej stronie chciałbym umieścić link, który po kliknięciu ponownie ładuje mi bieżącą stronę, ale dodając do niej kolejną zmienną:
np.
index.php?page=menu&id=10

Chciałbym to osiągnąć nie wpisując <a href="index.php?page=menu&id=10">, aby ten link był uniwersalny i niezależny od tego na jakiej stronie jest umieszczony.

Proszę o wskazówki czy w php istnieje funkcja, która po kliknięciu na link pozwala na przeniesienie na bieżącą stronę, ale z dodaniem do niej przez GET (lub POST) kolejnej zmiennej.
strife
Przejrzyj sobie tablicę $_SERVER konstrukcjami jak var_export" title="Zobacz w manualu PHP" target="_manual, var_dump" title="Zobacz w manualu PHP" target="_manual etc.
papik
Ok, doszedlem do czegos takiego:
  1. <?php
  2. $page = $_SERVER['REQUEST_URI'];
  3. echo $page;
  4. ?>
  5. <br>
  6. <a href="<?php echo $page; ?>&id=10">link</a>

W tym miejscu rodzi sie kolejny problem, zmienne dublują się i po kilku kliknięciach tworzy sie coś takiego:
index.php?page=menu&id=10&id=10&id=10&id=10

Nie wiem czy w dobrym kierunku kombinuję.
Jeśli w dobrym to czy istnieje możliwość uniknięcia tego, a jeśli w złym to proszę o sprowadzenie na dobrą drogę. :]
strife
Hmm ... o coś takiego Ci chodzi?

  1. <?php
  2. $root_dir = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
  3. $root_dir .= '?page=menu';
  4. echo '<a href="' . $root_dir . '&id=20">Ula la</a>';
  5. ?>


snitch.gif
bmL
Hmm, jeżeli dobrze rozumiem to chcesz żeby formularz przekierowywał do tej samej strony czy jakoś tak.
W każdym razie jeżeli cię dobrze rozumiem to wystarczy, że nie będziesz określał parametru "action"
np:
  1. <form method="GET"> // bez action="przykladowa_strona.php" w ten sposob strona zostanie jakby odswiezona...
  2. dalsza czesc formulkarza...

Tak się składa, że akurat wczoraj nad tym samym się zastanawiałem i akurat na coś takiego wpadłem tongue.gif
klucznick
Cytat(papik @ 11.08.2007, 00:28:39 ) *
(...)
W tym miejscu rodzi sie kolejny problem, zmienne dublują się i po kilku kliknięciach tworzy sie coś takiego:
index.php?page=menu&id=10&id=10&id=10&id=10
(...)

Rozwiązaniem tej konkretnej kwestii jest zastosowanie konstrukcji
CODE

if(!isset($_GET['id]))
<a href="<?php echo $page; ?>&id=10">link</a>
else
<a href="<?php echo $page; ?>">link</a>


odnośnie wątku głównego, rozumiem, że chodzi o to, żeby odnośnik kierował do strony, w której jest umieszczony ( czyli jeśli odnośnik jest w index.php, kieruje na index.php, jeśli w dwa.php kieruje do dwa.php )
jeśli o to chodzi, to
CODE
$root_dir = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];

jest jak najbardziej poprawne
jarrod
Cytat(bmL @ 11.08.2007, 04:42:41 ) *
Hmm, jeżeli dobrze rozumiem to chcesz żeby formularz przekierowywał do tej samej strony czy jakoś tak.
W każdym razie jeżeli cię dobrze rozumiem to wystarczy, że nie będziesz określał parametru "action"

Niestety to nie zadziała pod przeglądarką SAFARI gdy masz ustawiony metatag BASE. Przekieruje cię właśnie tam gdzie wskazuje BASE. Oczywiście jeśli tego nie używasz to problem z głowy.
papik
Dziękuje za wszystkie odpowiedzi :]

strife

Nie do końca o to chodzi, bo $_SERVER['SCRIPT_NAME'] zwraca mi tylko nazwę pliku, np. index.php, a ja potrzebuje żeby zwróciło mi nazwę pliku wraz ze zmiennymi np. index.php?page=menu.
Dodawanie do $root_dir w dalszej kolejności zmiennych jest też w pewnym stopniu uciążliwe, bo muszę najpierw wyciągać zmienne przekazane na obecną stronę i wrzucać je do $root_dir , a nie zawsze będę wiedział jakie akurat zmienne są przekazane na daną stronę.
Chciałbym aby to była uniwersalna funkcja, którą mogę zastosować na dowolnej stronie, a proces pobierania zmiennych był automatyczny.
Ten efekt osiągnąłem dzięki $_SERVER['REQUEST_URI'], ale prawdę powiedziawszy nie wiem czy tak może być, bo nigdy wcześniej go nie stosowałem.


bmL

Niestety formularz mnie nie urządza, bo chciałbym aby to było powiązane ze zwykłym linkiem na stronie.


klucznick

Jeśli chodzi o $_SERVER['SCRIPT_NAME'] to wyżej wyjaśniłem dlaczego on mnie nie satysfakcjonuje.
Natomiast zastosowanie IF jest skuteczne i przy przesłaniu jednej zmiennej na razie działa mi bez zarzutu.
Zastanawia mnie tylko teraz i kombinuje jak to skutecznie zastosować gdy w linku będę chciał przesłać więcej niż jedną zmienną. Musze zweryfikować obecność każdej ze zmiennych i na tej podstawie wygenerować odpowiedni link.
bmL
No to może tak:
  1. <?php
  2. $page = $_SERVER['REQUEST_URI'];
  3. echo $page;
  4.  
  5. if (!isset($_GET[id]))
  6. $link = '<a href="'.$page.'&id=10">link</a>';
  7.  
  8. else
  9. {
  10. $replace = 'id='.$_GET[id];
  11. $link = str_replace($replace, "id=15", $page);
  12. }
  13. echo $link;
  14. ?>

Pisane trochę z palca więc mogą być błędy ale założenie jest chyba słuszne smile.gif
papik
No i bardzo ładnie chodzi :]
Co prawda pierwotnie zrobiłem trochę po swojemu ale, rozwiązanie bmL bardziej mi się podoba, wiec zmieniłem.
Dziękuje za wszystkie porady.

Poniżej gotowe, chodzące rozwiązanie problemu dla dwóch zmiennych.
Zrobiłem funkcję, żeby łatwiej było zastosować na innych stronach.
  1. <?php
  2. $page = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
  3. $kryt=$_GET['kryt'];
  4. $sort=$_GET['sort'];
  5. $new_kryt="nowa_zmienna_kryt";
  6. $new_sort="nowa_zmienna_sort";
  7.  
  8. function link_generator( $kryt , $new_kryt , $sort , $new_sort , $page )
  9. {
  10.  
  11. if (!isset($kryt))
  12. {
  13. $link = $page.'&kryt='.$new_kryt;
  14. }
  15. else
  16. {
  17. $old = 'kryt='.$kryt;
  18. $new = 'kryt='.$new_kryt;
  19. $link = str_replace( $old, $new , $page );
  20. }
  21.  
  22. if (!isset($sort))
  23. {
  24. $link2 = $link.'&sort='.$new_sort;
  25. }
  26. else
  27. {
  28. $old = 'sort='.$sort;
  29. $new = 'sort='.$new_sort;
  30. $link2 = str_replace( $old, $new , $link );
  31. }
  32.  
  33. echo $link2;
  34. }
  35. ?>
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.