Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwa formularze
Forum PHP.pl > Forum > PHP
Blackmoore
Witam, chciałbym wiedzieć czy jest możliwość wysłania danych z formularza metodą post na dwie różne strony (wypełniamy formularz i jeden przycisk ma przesłać dane na stronę1.php a drugi przycisk na stronę2.php).

Coś na takiej zasadzie:
  1. <form method="post">
  2. <input ... />
  3. <input ... />
  4. <input ... />
  5.  
  6. <input type="submit" action="strona1.php" value="Dalej"/>
  7. <input type="submit" action="strona2.php" value="Wstecz"/>
  8. </form>

Wiem, że tak napisać nie mogę ale czy da się osiągnąć taki efekt?

Potrzebuję to do składania zamówienia w sklepie internetowym (który właśnie piszę). Jak klient wypełni dane na stronie2 to może mieć ochotę przejść na stronę3 lub poprawić dane ze strony1 (nie tracąc tego co wpisał na stronie2). W tej chwili działa mi to tak, że na stronę3 przesyła a cofając się traci to co miał w obecnym formularzu.
piotr94
zapisuj dane w sesji i nie będziesz miał problemu z ich utratą.
ewentualnie dodaj drugi przycisk do drugiego formularza z samymi polami hidden i przed wysłaniem kopiuj JS'em odpowiednie wartości
Blackmoore
Pierwsze rozwiązanie nie pomoże mi, żeby zapisać do sesji też muszę kliknąć przycisk. Z tą utratą chodzi tylko o to, że mogę zapisać je klikając jeden przycisk, a co z drugim? Drugi pomysł dobry, tylko że JS słabo znam.
W jaki sposób mogę zapisać te dane do sesji? action="..." w form mnie ogranicza bo mogę przesłać dane tylko do jednego pliku, z sesją tak samo, dopiero jak kliknę przycisk mogę uruchomić kod, który zapisze dane do sesji (chyba że jest inna możliwość).

Sprawa wygląda tak: http://www.car-lack.pl/sklepik/przedmioty....;nazwa=moniczka
dodaj coś do koszyka -> zarejestruj się -> zaloguj -> koszyk -> złóż zamówienie (wybierz opcję z fakturą) i w pliku płatnosc2.php ma być możliwość wrócenia na poprzednią stronę bez utraty danych dopiero co wpisanych (w tej chwili są wysyłane na stronę płatnosc3.php)
gorden
nie wiem czy Ci to pomoże, ale możesz zrobić na jednej stronie includując ją..

  1. <form action="spr.php" method="post">
  2. <input type='submit' name='zamowionko' value=''>
  3.  
  4. <input type="submit" name="dalej" value="Dalej">
  5. <input type="submit" name="wstecz" value="Wstecz">
  6. </form>


  1. <?
  2. if(isset($_POST['wstecz'])){
  3. include('strona2.php'); exit; }
  4. if(isset($_POST['dalej'])){
  5. // kod do wykonania, ewentualnie include
  6. } ?>


raczej złe, ale jeśli chodzi o sesje możesz spróbować tak
jeśli klikniemy w pierwszy etap dodajemy sesję
  1. $_SESSION['form_pt1'] = $_POST['zamowionko'];

w pliku gdzie ma być wstecz
  1. $poprz = $_SESSION['form_pt1'];
  2. echo "<input type='text' name='zamowionko' value=\"$poprz\">";

glh
Sprawdź to:

plik jeden.php:
  1. <?php
  2. ?>
  3. <form method="post" action="zarzadca.php">
  4. imie:<input type="text" name="imie" value="<?php echo $_SESSION['imie'];?>"/><br/>
  5. nazwisko:<input type="text" name="nazwisko" value="<?php echo $_SESSION['nazwisko'];?>"/><br/>
  6. miasto:<input type="text" name="miasto" value="<?php echo $_SESSION['miasto'];?>"/><br/>
  7. <input type="submit" name="dalej1" value="Dalej"/>
  8. </form>


plik dwa.php:
  1. <?php
  2. ?>
  3. <form method="post" action="zarzadca.php">
  4. costam:<input type="text" name="costam" value="<?php echo $_SESSION['costam']?>"/><br/>
  5. innytxt:<input type="text" name="innytxt" value="<?php echo $_SESSION['innytxt'];?>"/><br/>
  6. <input type="submit" name="dalej2" value="Dalej"/><input type="submit" name="wroc2" value="Wroc"/>
  7. </form>


plik trzy.php:
  1. <?php
  2. ?>
  3. <form method="post" action="zarzadca.php">
  4. txt3:<input type="text" name="txt3" value="<?php echo $_SESSION['txt3']?>"/><br/>
  5. ostatni:<input type="text" name="ostatni" value="<?php echo $_SESSION['ostatni'];?>"/><br/>
  6. <input type="submit" name="wroc3" value="Wroc"/>
  7. </form>


plik:zarzadca.php:
  1. <?php
  2. foreach ($_POST as $klucz=>$wartosc) $_SESSION[$klucz]=$wartosc;
  3. if (isset($_POST['dalej1'])) header("Location:dwa.php");
  4. if (isset($_POST['dalej2'])) header("Location:trzy.php");
  5. if (isset($_POST['wroc2'])) header("Location:jeden.php");
  6. if (isset($_POST['wroc3'])) header("Location:dwa.php");
  7. ?>


Nagłówki HTML pominąłem celowo, żeby oszczędzić miejsce.
U mnie to działa. O coś w tym stylu Ci się rozchodziło?
thomson89
Do zarzadca.php powinieneś dać ob_start inaczej header raczej nie będzie działał.
glh
Cytat(thomson89 @ 13.08.2010, 20:45:34 ) *
Do zarzadca.php powinieneś dać ob_start inaczej header raczej nie będzie działał.


A jednak działa...
Przecież nie wysyłam żadnych danych do przeglądarki przed użyciem header.
Blackmoore
@gorden, @glh, dzięki, powinno zadziałać. Efekt będzie taki jak chciałem.
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.