Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Header i zmienne typu GET
Forum PHP.pl > Forum > Przedszkole
Krisu
Jak wiadomo jest sposób na przekierowanie wraz z przekazaniem zmiennych:

  1. <?php
  2. header('location: jakis_plik.php.'?id=1);
  3. ?>


Zmienne zostają przekazane do jakiegoś tam pliku, ale jak przekazać zmienne jeśli pracujemy tylko na pliku index.php

  1. <?php
  2. header('location: index.php.'?id=1);
  3. ?>


Wywołując przekierowanie do pliku index.php, wykonując je właśnie z tego pliku otrzymuję komunikat z Firefoxa:

Cytat
Pętla przekierowań

Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.

Przeglądarka przerwała próby pobrania żądanego elementu. Witryna przekierowuje żądanie w sposób, który uniemożliwia jego dokończenie.


W jaki sposób to ominąć?
b4x
A nie lepiej będzie zrobić np. jakiś plik redirect.php czyli np. redirect.php?id=1 w pliku redirect.php:

  1. <?php
  2.  
  3. $dopisz = '?';
  4.  
  5. foreach ($_GET as $w => $s) {
  6.  
  7.    $dopisz .= $w.'='.$s.'&';
  8.  
  9. }
  10.  
  11.  
  12. header('Location: index.php'.$dopisz);
  13.  
  14. ?>
Krisu
Niestety, ale efekt jest taki sam :/
b4x
Ale powiedz jak to robisz.

Tzn. do czego ma to Ci służyć, jak to ma wyglądać - bo ja się gubię już tongue.gifP


#edit a może po prostu spróbuj w $_GET dorzucić red=1


tzn. jeśli chcesz aby przekierowanie było dokonane doklejasz index.php?red=1&id=1

i sprawdzasz

  1. <?php
  2. if($_GET['red'] == 1) { Header ('Location: index.php?id=1'); } // i po przekierowaniu usuwasz te red :)
  3. ?>


@do: fifi209

Cytat
Po 2. Nie 'index.php'.$dopisz
tylko jak już: 'index.php?id='.$dopisz


sprawdź co foreach robi...
Fifi209
Po 1. Nagłówki muszą być wysyłane przed wszystkim innym
Po 2. Nie 'index.php'.$dopisz
tylko jak już: 'index.php?id='.$dopisz
Krisu
  1. <?php
  2. $id = $_GET['id'];
  3.  
  4. # Pobiera słowa kluczowe z bazy danych
  5.  
  6. $query = 'SELECT * FROM `lang` WHERE id = '.$id;
  7.  
  8. $results = mysql_query($query)
  9.        or die(mysql_error());
  10.  
  11.    $results = mysql_fetch_assoc($results);
  12. ?>


Potem sprawdza czy słowa z bazy pasują do szukanych. Jeżeli nie, to id musi się zmienić na 2. I właśnie nie wiem jak to zrobić.

@do: b4x

Może jest inny sposób niż przekierowanie? Bo odnośnie header ('location: '); nie mogę go wykorzystać w ogóle odnosząc się do tego samego pliku.
b4x
Ja w tym przykładzie bym zastosował switch" title="Zobacz w manualu PHP" target="_manual

  1. <?php
  2. switch ($id) {
  3.  
  4.         case 1:
  5.         // tutaj cos wrzucasz jesli id = 1
  6.         break;
  7.  
  8.         case 2:
  9.         // tutaj cos wrzucasz jesli id = 2
  10.         break;
  11. }
  12. ?>



Możesz także zabawić się w .htaccess

Kod
DirectoryIndex sprawdz.php


I właśnie tam (sprawdz.php) sprawdzać to i wrzucić riderecta wrzucić na index.php winksmiley.jpg
Krisu
W sumie mógłbym w każdym case includować główny program, a potem zwracać wartość id smile.gif

Dzięki za pomoc.
thomson89
Można też w JS document location...

A można też zamiast getem przekazywać sesją...
pianta_d
Witam

Robię stronę wielojęzyczną korzystając z wątku http://forum.php.pl/index.php?showtopic=80...20&start=20
a dokładnie wykorzystałem sposób użytkownika @franki01

ale pojawił się problem, a mianowicie, gdy wpiszę adres strony przekierowuje mnie na stronkę z odpowiednim langiem jednak php nie robi instrukcji, które są niżej, czyli np wczytania informacji z bazy z odpowiednim langiem.
Gdy wstawię instrukcję
  1. <?php
  2. header("Location: index.php?lang=".$_SESSION['LANG']);
  3. ?>


FF wyrzuca komunikat
Cytat
Pętla przekierowań. Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie.


Może istnieje jakiś inny sposób przekierowania z odczytaniem z sesji konkretnego języka aby wykonały się instrukcje, które znajdują się w pliku?
b4x
Ja bym zrobił to tak...


  1. <?php
  2. switch ($_SESSION['LANG']) {
  3.  
  4.    case 'pl':
  5.        require_once ('langs/pl/lang.php');
  6.        break;
  7.  
  8.    case 'en':
  9.        require_once ('langs/en/lang.php');
  10.        break;
  11.  
  12.    default:
  13.        require_once ('langs/pl/lang.php');
  14. }
  15. ?>
pianta_d
Nie w tym tkwi problem. W plikach lang.php są tylko tłumaczenia do etykiet na stronę, natomiast w bazie, ogłoszenia w różnych językach. Tłumaczenia pobiera prawidłowo, jedynie nie wykonuje poleceń zawartych w skrypcie index.php, gdzie z bazy pobiera, jeśli ustawionym startowym językiem jest en powinien szukać ogłoszeń w języku angielskim (ogłoszenia istnieją smile.gif ).

Po wejściu na stronę i ręcznej zmianie języka czyta ogłoszenia bez problemu. Problem jest tylko przy "starcie" strony.


EDIT

Dziękuję za pomoc. Poradziłem już sobie

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