Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] przesłanie zmiennej na bieżącą stronę, GET (lub POST)
-Gość_papik_*-
post
Post #1





Goście







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.
Go to the top of the page
+Quote Post
strife
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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.
Go to the top of the page
+Quote Post
papik
post
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.08.2006
Skąd: Libiąż

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


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ę. :]
Go to the top of the page
+Quote Post
strife
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


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. ?>


(IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
bmL
post
Post #5





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
klucznick
post
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 4.08.2007
Skąd: Pomorze

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


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
Go to the top of the page
+Quote Post
jarrod
post
Post #7





Grupa: Zarejestrowani
Postów: 312
Pomógł: 9
Dołączył: 14.10.2006
Skąd: warszawa

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


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.
Go to the top of the page
+Quote Post
papik
post
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.08.2006
Skąd: Libiąż

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


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.
Go to the top of the page
+Quote Post
bmL
post
Post #9





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował bmL 11.08.2007, 14:32:28
Go to the top of the page
+Quote Post
papik
post
Post #10





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.08.2006
Skąd: Libiąż

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


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. ?>
Go to the top of the page
+Quote Post

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: 15.09.2025 - 04:14