Jest i tak, aby przekierować użytkownika po wysłaniu formularza HTML?

Mam formę, która wygląda tak

 <form action="/URL/" method="post">
     <input type="radio" name="answer" value="W" />W<br />
     <input type="radio" name="answer" value="X" />X<br />
     <input type="radio" name="answer" value="Y" />Y<br />
     <input type="radio" name="answer" value="Z" />Z<br />
     <input type="submit" />
 </form>

Jest tam i tak mogę przekierować użytkownika na nową stronę po kliknięciu przycisku Prześlij? Znalazłem jednak trochę JavaScript, który wydawał się powstrzymać post od pracy: s

Twoje zdrowie!

0
Chris Headleand 23 sierpień 2012, 17:03

5 odpowiedzi

Najlepsza odpowiedź

Jeśli używasz PHP, zrób to na serwerze:

if( isset( $_POST['answer'])) {
    header( 'Location: http://www.example.com/newurl');
    exit();
}

Należy pamiętać, że powinieneś używać pełnego adresu URL w połączeniu header() i prawdopodobnie chcesz exit() po wywołaniu header() w tym przypadku.

6
nickb 23 sierpień 2012, 13:06

Możesz użyć prostego php header('yourlocation.php');, aby przenieść je z dala od formularza.

PHP, że twoja akcja formularza wskazała, nadal będzie kontynuować wykonanie, nawet jeśli nagłówek () znajduje się na górze pliku PHP.

Przekierowanie nagłówka zajmie się użytkownikiem uderzającym odświeżanie - już przesunął je poza punktem wysyłania danych formularza, więc nawet jeśli odświeżają się, po prostu otworzy się ponownie stronę, gdy zostanie ponownie otwarte zgłoszenia.

Przykład jest następujący:

<?php
/* This will give an error. Note the output
 * above, which is before the header() call */
// Process Form Data, insert to database, whatever you want... then
header('Location: http://www.example.com/');
?>

Następnie użytkownik kończy się na stronie wwww.example.com i mogą spamować odświeżyć tyle, ile ich lubią, ale wszystkie przetwarzanie już miało miejsce. Nie ponowne wysłanie informacji (ani nie przetwarza ich płatności lub nic innego).

2
Fluffeh 23 sierpień 2012, 13:05

Tak, użyj nagłówka przekierowania:

header("Location: http://new.location.com/w00t");

Należy to wywołać przed wysłaniem dowolnego wyjścia.

Należy pamiętać, że wszystko po wezwanie nagłówek nadal będzie wykonywane! Potrzebujesz więc die() lub exit() później, aby zapobiec nieoczekiwanym wynikom.

2
Madara's Ghost 23 sierpień 2012, 13:15

Możesz po prostu określić adres URL, do którego formularza pójdzie po złożeniu.

<form action="http://localhost/redirected.php" method="post">

Możesz sprawdzić za pomocą PHP, czy formularz jest przesyłany, a następnie przekierować:

if (isset($_POST['answer']))
    header('Location: redirect.php');

I możesz to osiągnąć dzięki JavaScript / jQuery.

$('#submit_button').click(function () {
    // do everything with variables
    window.location = 'redirect.php';
});
1
dpitkevics 23 sierpień 2012, 13:07

Tak, po prostu opublikuj dane za pomocą AJAX, a następnie użyj window.location = 'http://xxxx.com', aby przekierować użytkownika do wybranego przez użytkownika. Zakłada, że chcesz przekierować użytkownika bez użycia nagłówków lokalizacji serwera (jak inne opublikowane).

0
WTK 23 sierpień 2012, 13:05