• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

PHP ponowne wysyłanie formularza

Object Storage Arubacloud
0 głosów
489 wizyt
pytanie zadane 25 kwietnia 2019 w PHP przez daniel1806 Obywatel (1,780 p.)

Witam.

W pliku index.php, który jest moją stroną główną mam taki formularz:

<form class="pl-en" action="index.php" method="post">
     <div>
          <button type="submit" name="lang" value=<?php include "switch.php"; echo($language);?>>
          </button>
      </div>
</form>

w pliku switch.php mam taki:

<?php

  $language = "EN";

  if(isset($_POST['lang'])) {
    if($_POST['lang'] == "EN") {
      $language = "PL";
    }
    if($_POST['lang'] == "PL") {
      $language = "EN";
    }
  }

?>

Przycisk, który wysyła formularz (i zarazem jest jego jedynym elementem) jest przełącznikiem języka treści strony polski/angielski. Na podstawie wartości zmiennej $language inne skrypty PHP pobierają z bazy danych tekst po polsku lub po angielsku i dzięki wstawkom PHP w kodzie HTML w odpowiednich miejscach pojawiają się napisy w wybranym języku.

Wszystko działa ok poza jednym szczegółem. Dopóki nie wciśnie się zmiany języka, można reloadować stronę ile się chce i się przeładowuje bez problemów. Ale wystarczy raz wcisnąć zmianę języka i od tego momentu za każdym przeładowaniem przeglądarka wywala komunikat, że nastąpi ponowne wysłanie formularza. Na bank można temu zaradzić, ale nie wiem jak, więc pytam :)

Szukałem w sieci ale nie znalazłem. Mój przypadek jest nietypowy, bo po naciśnięciu submita nie ma być żadnego przekierowania do żadnej innej podstrony, tylko ma się załadować ponownie ta sama strona (index.php), tyle że z podmienionym tekstem. I dlatego header(location) na nic się tu nie zda.

Z góry dzięki za pomoc i podpowiedzi :)

Pozdrawiam.

3 odpowiedzi

+2 głosów
odpowiedź 25 kwietnia 2019 przez wiktoz Mądrala (7,040 p.)

Wywala komunikat, bo zmieniasz atrybut 'value' buttona. Ja bym napisał to trochę inaczej. Masz na dole przeanalizuj sobie.

if(isset($_POST['lang'])) {
    if($_POST['lang'] == "EN") {
      echo "<button type="submit" name="lang" value="PL">>
    }

    if($_POST['lang'] == "PL") {
        echo "<button type="submit" name="lang" value="EN">>
    }
  }
else echo "<button type="submit" name="lang" value="EN">>
if(isset($_POST['lang'])) $lang = $_POST['lang'];
else $lang = "EN"; //domyślna wartość

switch($lang){
case "EN":
  echo "<button value="PL"></button>";
  break;

case "PL":
  echo "<button value="EN"></button>";
  break;
}

 

1
komentarz 25 kwietnia 2019 przez daniel1806 Obywatel (1,780 p.)
Dzięki kolego :)
komentarz 25 kwietnia 2019 przez daniel1806 Obywatel (1,780 p.)
Niestety działa dokładnie tak jak wcześniej. Użyłem Twojego kodu i zrobiłem tylko małą zmianę w html i nie pomogło. Może przyczyna tkwi w czym innym? Jak dobrze rozumiem, w Twoim rozwiązaniu chodziło o to żeby nie zmieniać atrybutu value, tylko podmienić cały button tak?
+1 głos
odpowiedź 25 kwietnia 2019 przez Igor Gawrys Stary wyjadacz (12,460 p.)
Może po prostu wysyłaj to ajaxem i odświeżaj stronę albo i w ajax pobieraj html i tylko podmieniaj tak na szybko pomysł.
komentarz 25 kwietnia 2019 przez daniel1806 Obywatel (1,780 p.)
Może z tym ajaxem to będzie dobre rozwiązanie. Choć przyznaję, że przynajmniej pierwszą wersję chciałbym zrobić przez formularz.

Wydawało się proste a jak zwykle trafiają się problemy po drodze. Ale dzięki ich rozwiązywaniu stajemy się lepszymi programistami no nie? :)
+1 głos
odpowiedź 25 kwietnia 2019 przez Ehlert Ekspert (212,670 p.)
  1. Wysyłaj getem
  2. Zapisuj język w ciachu/bazie.
  3. Reaguj na ewentualne zmiany z accept-language

Po problemie. 

komentarz 25 kwietnia 2019 przez daniel1806 Obywatel (1,780 p.)
Dzięki za pomoc, get to strzał w dziesiątkę :) Tylko metodę zmieniłem i problem zniknął. Widzę, że robię elementarne błędy, ale to przez to, że jestem raczej frontendowcem i nie za bardzo się znam na php :(  Chyba czas to zmienić.

W każdym razie, jeszcze raz dziękuję za pomoc i pozdrawiam. :)

Podobne pytania

0 głosów
1 odpowiedź 281 wizyt
0 głosów
1 odpowiedź 662 wizyt
0 głosów
1 odpowiedź 2,551 wizyt
pytanie zadane 1 lutego 2016 w PHP przez McShadow Obywatel (1,050 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...