Formularz html. Wysyłanie danych bez przenoszenia do pliku

Czy da się wysłać dane bez przenoszenia do pliku? Może wytłumaczę dokładniej na przykładzie.  :smiley:

kod html:

<form action="a.php" method="POST>
 <input type="text" name="tekst" />
 <input type="text" name="tekst2" />
 <input type="submit" name="wyslij" value="Wyślij" />
</form>

kod php:

Tekst: <?php echo $_POST['tekst'] ?> <br><br>
Tekst 2:<?php echo $_POST['tekst2'] ?>

Po kliknięciu przycisku Wyślij dane zostaną wysłane do pliku a.php ale użytkownik zostanie przeniesiony do tego pliku

a mi chodzi o to żeby po kliknięciu przycisku dane zostały wysłane ale użytkownika nie przenosiło do tego pliku. Dokładnie to chcę żeby po wysłaniu danych przenieść użytkownika do innego pliku (nie a.php). Czy da się tak zrobić?

Opcji jest kilka. Najprostsza to obsłużyć formularz (czyli mieć w/w kod PHP) w tym samym pliku co formularz i wtedy “action” zostawić puste: “<form action=”" method=“POST>”. Wtedy przed powyższym “echo $_POST[’…” sprawdzasz “if (isset($_POST)) …”.

@OP

Przenosisz go do pliku a.php, na końcu którego jest coś takiego (disclaimer: kod wzięty z dokumentacji):

 

<?php
header("Location: http://www.example.com/"); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

@Jim1961

Twój pomysł nie realizuje jednego wymagania:

Nie jest mowa, że on chce zostać na formularzu, tylko być przekierowanym, gdzieś indziej.

A tak już BTW. to mieszanie kodu biznesowego z warstwa prezentacji jest słabe.

@kostek135

Czy dobrze zrozumiałem Twoje rozwiązanie? Po kliknięciu przycisku użytkownika przenosi do a.php a tam odsyłam do tego pliku którego chcę?

Tylko że ja chcę wysłać do tego pliku dane z kilku formularzy, każdy formularz w osobnym pliku.

no to niestety się tak łatwo nie da. Musisz mieć jakiegoś pośrednika do zbierania tych danych

  1. Baza danych

  2. Pola hidden w kolejnych formualrzach

  3. itp

 

Ad1. Kierujesz do a.php zapisujesz w bazie  robisz redirect do kolejnego formularza. Na końcu wyciągasz dane z bazy i masz komplet.

Ad2. Kierujesz do pliku z kolejnym formularzem który renderuje formularz a przekazane dane renderuje w polach input type=hidden.

 

 

Ja mam w pliku mail.php (u Ciebie a.php) wysyłającym dane z formularza tak to zrobione:

<?PHP
$to = 'email do wysyłki';
$subject = $_POST['subject'];
$message = $_POST['message'];
$headers = 'From: ' . $_POST['name'] . ' < ' . $_POST['email'] . "\r\n" . 'Content-type: text/html; charset=utf-8'; 
mail($to, $subject, $message, $headers);
header( 'Location: http//adres trony wwww/kontakt-send.htm?>

po wysłaniu wiadomości trafiam na stronę na której jest informacja o wysłanej wiadomości i możliwości powrotu do poprzedniej strony lub do strony głównej.

Możesz też pokusić się o użycie ajaxa i za jego pośrednictwem przesłać dane do pliku PHP. Dzięki takiemu rozwiązaniu uzyskasz to, czego oczekujesz, czyli przesłanie danych do skrypru php bez przeładowania strony. Przy zastosowaniu ajaxa możesz jeszcze dzięki jQuery wyświetlić użytkownikowi komunikat informujący o przesłaniu formluarza :slight_smile:

Chyba wybiorę rozwiązanie nr 2. Można jakiś mały przykładzik?

Nie powinien ale brakuje mi ostatnio kodowania więc taki mały przykład:

!DOCTYPE html
html
head
titleFirst form/title
meta http-equiv="Content-Type" content="text/html; charset=utf-8"
/head
body
form method="post" action="afile.php"
input type="text" name="first_name" value="" /
input type="submit" /
/form
/body
/html

afile.php

!DOCTYPE html
html
head
titleSecond form/title
meta http-equiv="Content-Type" content="text/html; charset=utf-8"
/head
body
form method="post" action="bfile.php"
input type="text" name="second_name" value="" /
input type="hidden" name="first_name" value="?php echo $_POST['first_name']?" /
input type="submit" /

/form
/body
/html

bfile.php

!DOCTYPE html
html
head
titleResult from two forms/title
meta http-equiv="Content-Type" content="text/html; charset=utf-8"
/head
body
pFirst Name: ?php echo $_POST["first_name"] ?/p
pSecond Name: ?php echo $_POST["second_name"]; ?/p
/body
/html

Ok, wielkie dzięki :smiley: :ok: