Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]jak metodą post przesłac kilka zmiennych tak jak w get ?
Forum PHP.pl > Forum > Przedszkole
jolam
Czy da się tak zrobić, żeby w formularzu po przyciśnięciu klawisza button przekazane zostały wartości 2 i więcej zmiennych?

pozdrawiam Jola
Agape
Da sie tak samo przeslac sporo parametrow
W method formularza ustawiamy odpowiednio post lub get i jak mamy inputy nazwane tak beda nazywaly sie zmienne. Mozesz ich ustalic teoretycznie ile chcesz
jolam
Ale jeśli w formularzu wybieram różne opcje czyli klikam w różne przyciski button. To jak do jednego przycisku dopisać kilka zmiennych?
slewhut
Różne przyciski mają różne id. A później jak przetwarzasz dane wysłane przez formularz to patrzysz która zmienna (id przycisku) istnieje, czyli który przycisk został naciśnięty i względem tego używasz dodatkowych zmiennych. No i jeszcze istnieją pola hidden. Które mogą przyjmować różne wartości (w czym pomoże JavaScript).
thek
Wtedy w pliku określonym jako action ustawiasz sprawdzanie który, submit został kliknięty i według niego sprawdzasz interesujące Cię pola. POST wysyła zawsze wszystkie wypełnione/wybrane i tylko od Ciebie zależy jak się z nimi obejdziesz.
jolam
To wiem,
ale chciałabym aby jeden przycisk button przesyłał kilka zmiennych. Da się tak? Po prostu robię sobie rozbudowany formularz i kiedy ktoś wybiera jakąś opcje klikając button, to muszę wiedzieć co to za opcja i w którym miejscu formularza została wybrana i jeszcze parę innych. czyli potrzebuje kilka zmiennych w jednym butonie. Do tej pory sama wymyśliłam jedynie wstawienie na stronę tylu formularzy ile jest opcji i w każdym z nich dać po jednym butonie i kilka pól hidden, ale to bardzo niewygodne w pisaniu i na około. Jak to inaczej zrobić?

pozdrawiam Jola
thek
Każdy element formularza identyfikujesz po jego name. Nawet submit. Nazywaj je więc odpowiednio.
W pliku jaki masz w action sprawdzasz tylko który z nich został kliknięty. Można to zrobić na conajmniej 2 sposoby:
  1. if( isset( $_POST['name_konkretnego_submit'] ) )

  1. if( array_key_exists( 'name_konkretnego_submit', $_POST ) )
Dzięki temu rozpoznasz jaki submit został kliknięty i w zależności od potrzeb obrobisz interesujące Cię pola. To co możesz jeszcze ewentualnie dodatkowo to używając JavaScript w momencie kliknięcia buttona sprawdzić po stronie przeglądarki czy wypełnił wymagane pola. Ale na serwerze i tak to samo musisz zrobić, bo mógł wypełnić pola głupotami i będziesz miała problem.
Ale to naprawdę podstawy w obsłudze formularzy, więc trochę się podszkolić musisz jeszcze.
I nie ma czegoś takiego jak przypisanie kilku wartości do buttona. Każdy kliknięty submit wysyła wszystkie wypełnione pola formularza. Ty po stronie serwera możesz jedynie sobie wybrać te, które Cię interesują.
slewhut
Popatrz na JavaScripta. Pozwala on Tobie zmieniać wartości formularza buttonami, checkboxami itd... możesz nim ukrywać i pokazywać części formularza.

Prosty checkbox włączający i wyłączający pola text

  1.  
  2. <b>Konto firmowe</b><br>serwis handlowy używać będzie danych firmowych</td><td><input name="firma" value="1" onclick='document.getElementById("adres").disabled = !document.getElementById("adres").disabled;
  3. document.getElementById("miasto").disabled = !document.getElementById("miasto").disabled;
  4. document.getElementById("kod_pocztowy").disabled = !document.getElementById("kod_pocztowy").disabled;
  5. document.getElementById("telefon").disabled = !document.getElementById("telefon").disabled;
  6. document.getElementById("gg").disabled = !document.getElementById("gg").disabled;
  7. document.getElementById("konto_bankowe").disabled = !document.getElementById("konto_bankowe").disabled;
  8. document.getElementById("firma_nazwa").disabled = !document.getElementById("firma_nazwa").disabled;
  9. document.getElementById("nip").disabled = !document.getElementById("nip").disabled;
  10. document.getElementById("regon").disabled = !document.getElementById("regon").disabled;
  11. document.getElementById("firma_adres").disabled = !document.getElementById("firma_adres").disabled;
  12. document.getElementById("firma_miasto").disabled = !document.getElementById("firma_miasto").disabled;
  13. document.getElementById("firma_kod_pocztowy").disabled = !document.getElementById("firma_kod_pocztowy").disabled;
  14. document.getElementById("firma_telefon").disabled = !document.getElementById("firma_telefon").disabled;
  15. document.getElementById("firma_gg").disabled = !document.getElementById("firma_gg").disabled;
  16. document.getElementById("firma_konto_bankowe").disabled = !document.getElementById("firma_konto_bankowe").disabled;' type="checkbox">
  17.  
  18. </td></tr>
  19.  
  20.  
  21. <tr><td><font class="wymagane">Adres</font></td><td><input id="adres" name="adres" value="" type="text"></td></tr>
  22. <tr><td><font class="wymagane">Miasto</font></td><td><input id="miasto" name="miasto" value="" type="text"></td></tr>
  23. <tr><td><font class="wymagane">Kod pocztowy</font></td><td><input id="kod_pocztowy" name="kod_pocztowy" value="" type="text"></td></tr>
  24. <tr><td><b>Telefon</b></td><td><input id="telefon" name="telefon" value="" type="text"></td></tr>
  25. <tr><td><b>GG</b></td><td><input id="gg" name="gg" value="" type="text"></td></tr>
  26. <tr><td><b>Numer konta bankowego</b><br>Wymagane do sprzedawania</td><td><input id="konto_bankowe" name="konto_bankowe" value="" type="text"></td></tr>
  27.  
  28.  
jolam
Ale jak bez javascript to zrobić? Jak mam kilka butonów i każdy ma takie samo "name" to klikając któryś z nich przekazuje odpowiednią wartość dla zmiennej wpisanej w name. I ja potrzebuje przesłać 3 zmienne? Rozumiecie? Czy da się to zrobić bez osobnych formularzy na jednej stronie?
ziqzaq
Może daj przykład swojego kodu i tego co chcesz dostać z formularza.
Mam dziwne przeczucie, że niepotrzebnie komplikujesz prostą sprawę.

Do wyboru opcji (tych co mają być przesyłane) nie możesz użyć jakichś checkboxów lub selectów?
Wybierasz opcje z selecta i klikasz na button (niepotrzebujesz wtedy osobnego buttona do każdej opcji).

Albo może daj wszystkie opcje jako ukryte input i po wysłaniu formularza przez klinięcie buttona sprawdzasz nazwę buttona i pobierasz sobie odpowiednie inputy.
  1. <form>
  2. <input type="hidden" name="button1_opcja1" value="wartosc" />
  3. <input type="hidden" name="button1_opcja2" value="wartosc2" />
  4. <input type="hidden" name="button2_opcja1" value="wartosc" />
  5. <input type="hidden" name="button2_opcja2" value="wartosc2" />
  6.  
  7. <input type="button" name="button1" value="Klik1" />
  8. <input type="button" name="button2" value="Klik2" />
  9. </form>
  10. <?php
  11. // i w php
  12. if (isset($_POST['button1'))
  13. {
  14. $opcja1 = $_POST['button1_opcja1'];
  15. // itd.
  16. }
  17. ?>

Pozdrawiam.
thek
Przecież ten kod jedynie włącza i wyłącza odpowiednie pola. Dodanie atrybutu disabled powoduje, że dane pole, nawet wypełnione, nie jest przesyłane po naciśnięciu dowolnego submit. Tutaj nawet nie trzeba dodatkowych formularzy robić. Ustawiasz kliknięciem na checkbox czy ma to być firma czy osoba prywatna (jak mniemam). Odpowiednia wartość tego pola sprawia, że masz możliwe do edycji określone pola i inne nawet nie są brane pod uwagę. W pliku jaki masz w action jedynie sprawdzisz czy przyszly dane POST. Jeśli tak to sprawdzisz czy ten checkbox od rozpoznania jest jakoś ustawiony i w zależności od tego stanu będziesz się posługiwała POST raz jako forma, a raz jako osoba prywatna. Trochę myślenia a nie czekać na gotowce sciana.gif
Zastanawiam się czy właściwie rozumiesz co robi podany w kodzie przez Ciebie kod JS. Bo mam wrażenie, że dostałaś gdześ gotowca lub użyłaś jakiegoś przykładu dopasowując bez myślenia do swoich potrzeb i przez to nie wiesz co się w nim dzieje dry.gif
To co wkleiłaś bowiem nie ma nawet żadnego buttona, jest wyrwanym kawałkiem formularza a jedyne co można określić jako pseudo-button to ów nieszczęsny checkbox. Dlaczego tak myślę? Bo połowę pól jakimi operujesz w JS zwyczajnie dublujesz! Po jaką chole.ę masz osobne pola gg, miasta, kodu, konta, telefonu dla firmy i osoby prywatnej? Powinnaś tylko włączać i wyłączać te DODATKOWE. Tylko one oraz ów checkbox odróżniają firmę i osobę fizyczną. Pomyśl o analogii do szafki. Właściciel ma dostępne wszystkie półki i szuflady, a zwykły koleś tylko te bez zamka. Checkbox w kodzie robi za zamek. Zamyka i otwiera owe dodatki. A ty zrobiłaś 2 szafy osobne dla wszystkich i dla właściciela. W zalezności od tego kim jest dajesz mu albo jedną albo drugą szafę. A przeciez ich elementy współne moga leżeć na tych samych półkach jednej szafy. Teraz rozumiesz, że wcale nie trzeba dwóch formularzy robić tylko reagować zaleznie od tego "czy masz klucze czy nie"? Bardziej już chyba nie da się wytłumaczyć...
jolam
Generalnie idea ma być taka. Jak przesłać kilka zmiennych przy pomocy jednego przycisku, nie wiem jak prościej to opisać. Może tak:
<button type="submit" name="a" value="a1" name="b" value="b1">jakis napis</button>
czyli jeden przycisk dwie zmienne.

Chodzi o coś takiego, że jeśli na pierwszej stronie formularza przesłano $a='a1', to żeby na drugiej po przesłaniu $b='b1' w tablicy post były obie zmienne i obie wartości. Bo obie są potrzebne na 3 stronie formularza. Czy teraz jaśniej napisałam?

A javascript nie umiem, więc rozwiązanie musi być tylko w php.

pozdrawiam Jola
thek
Ech.... To czemu nie pisałaś wcześniej, że masz formularz, który się zmienia bo masz go na kilku stronach w stylu formularz1.php -> formularz2.php ->formularz3.php questionmark.gif
Oszczędzilabyś wszystkim myslenia. Ten temat sięprzewijał już w przedszkolu i dziale php ze kilkanaście razy sciana.gif Po prostu nie czytasz tematów starszych niż 2-3 dni sciana.gif To się robi w oparciu o zmienne sesyjne. Poczytaj manuala pod ich kątem a znajdziesz rozwiązanie. Widzisz teraz jak banalne z pozoru informacje zmieniają całkiem sens wypowiedzi? Dopiero w 12(!) poście tematu dowiadujemy się, że to formularz krokowy, dla którego najlepszym rozwiązaniem są sesje. Dziwisz się, że tak długo Ci ludzie odpowiadają lub nie chcą odpowiadać, skoro nawet nie potrafisz od razu opisać problemu dokładnie, tylko trzeba to z Ciebie wyciągać. Weź przykład z innych, którzy może i rozwlekają post, ale zawiera on tyle informacji, że nie sposób nie wiedzieć co i jak nie działa.
jolam
Właśnie strona jest tylko jedna form.php Ale stron kilka masz racje. Czy zamiast sesji mogę użyć ciasteczek? Bo ciasteczek już umiem używać. Na prawde nie obejdzie się bez tych dodatkowych metod z sesjami ciasteczkami? Myślałam, że można jednemu przyciskowi przypisać kilka zmiennych.


pozdrawiam Jola
thek
Teraz zadam pytanie... Skoro jest tylko jedna strona -> form.php, to czemu piszesz o kilku zaraz potem bo ja już głupieję. To w końcu jest jedna czy kilka blinksmiley.gif Teraz chyba w całym portalu nikt nie rozumie jak to masz rozwiązane. Lepiej zamieść kod i opisz sensownie co ma się dziać używając fachowego słownictwa bo strona to nie tylko formularz a zakładka utworzona choćby przez JS, to także nie strona. Jakie pliki z jakimi współpracują, co ma być pomiędzy jakimi plikami przesyłane w jakich wypadkach. Opisz więc konkretnie problem a kod wrzuć w BBCode odpowiedni. Na razie tylko fragment formularza widzieliśmy i szczerze mówiąc nikt nie wie jak wygląda naprawdę działanie tego formularza. Trochę mniej ogólników a więcej szczegółowych informacji, bo taką wymianą zdań to ja mogę i tydzień zgadywac jak wygląda i działa Twój formularz i gdy już będe myślał że rozumiem to mi możesz klina wbić bo pokażesz inny fragment, przez który znowu wszyscy zgłupieją.
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.