Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: /[PHP]+ [HTML]+ [JS]?/ Symulowany formularz z Redirect
Forum PHP.pl > Forum > PHP
Adi32
Witajcie.

Od kilku dni próbuje zrobić symulowany formularz do mojego frameworka.
Wszystko już praktycznie działa ale mogłoby działać lepiej.

Stworzyłem zespół funkcji dzięki którym moge zrobić i przesłać formularz z czego chce, np:

  1. <div class="form" id="formularz1">
  2. <div class="input" name="input1">Wartosc</div> <!-- JQ daje opcje odycji wartości / mało przydatne... -->
  3.  
  4. <div class="select" id="select1">
  5. <div class="opcja1-wartosc">Etykieta1</div>
  6. <div class="opcja2-wartosc">Etykieta2</div>
  7. <div class="opcja3-wartosc">Etykieta3</div>
  8. </div>
  9. <!-- To jest już bardziej przydatne - pozwala dowolnie ostylować listę rozwijalną -->
  10.  
  11. <!-- nie ma submita -->
  12.  
  13. </div>
  14.  
  15. <a href="odbierzformularz" rel="formularz1" class="post">Wyślij postem</a>
  16. <a href="odbierzformularz" rel="formularz1" class="ajax">Wyślij getem</a>
  17. <!-- linki wysyłają formularz ajaxowo getem postem lub jeszcze inaczej... -->
  18.  


Śmiga to wszystko fajnie i bywa przydatne ale chciałbym osiągnąć jeszcze jedą rzecz i mam nieodparte wrażenie że manipulując nagłówkami dałoby się to osiągnąć.

Chciałbym dodać jeszcze jeden link wysyłąjący formularz:

  1. <a href="odbierzformularz" rel="formularz1" class="submit">


Który zrobi przeładowanie strony wraz z nagłówkami POST które zostaną odebrane w odbierzformularz jako dane application/x-www-form-urlencoded i załadowane do tablicy $_POST.
Próbowałem w tym celu różnych dziwnych rzeczy związanych z nagłówkami i przekierowaniami i nic nie osiągnąłem.

Czytałem w wielu miejscach, że jest to nie możliwe ale mimo to szukam dalej.

Czy ktoś z Was ma jakieś pomysły?

[edit]

Pośrednio osiągnąłem cel ale w sposób który mi się nie podoba.
W momęcie kliknięcia w link:submit wykonuje się ajaxem plik który ładuje wybrane opcje do sesji, następnie js robi przekierowanie do strony 'href' poczym init sprawdza czy w sesji są dane dla post, jak są to łąduje je do tablicy POST i czyści sesje. Nie podoba mi się to rozwiązanie.
cudny
A czemu nie zrobisz po prostu formularza skoro i tak chcesz przeładować stronę ?
W razie co, rozwiązanie masz tu - możesz dane wysłać umieszczając je, np. <input type="hidden" name="imie" value="vartosc" />
Adi32
Cytat(cudny @ 16.03.2012, 13:49:07 ) *
A czemu nie zrobisz po prostu formularza skoro i tak chcesz przeładować stronę ?
W razie co, rozwiązanie masz tu - możesz dane wysłać umieszczając je, np. <input type="hidden" name="imie" value="vartosc" />



Chodzi o to:

  1. <div class="select" id="select1">
  2. <div class="opcja1-wartosc">Etykieta1</div>
  3. <div class="opcja2-wartosc">Etykieta2</div>
  4. <div class="opcja3-wartosc">Etykieta3</div>
  5. </div>


Nie zostanie to umieszczone w nagłówkach a pozwala dowolnie ostylować listę rozwijalną.
cudny
Cytat(Adi32 @ 16.03.2012, 13:52:49 ) *
Chodzi o to:

  1. <div class="select" id="select1">
  2. <div class="opcja1-wartosc">Etykieta1</div>
  3. <div class="opcja2-wartosc">Etykieta2</div>
  4. <div class="opcja3-wartosc">Etykieta3</div>
  5. </div>


Nie zostanie to umieszczone w nagłówkach a pozwala dowolnie ostylować listę rozwijalną.




  1. <form action="" method="post">
  2. <input type="hidden" name="opcja1-wartosc" value="Etykieta1" />
  3. <input type="hidden" name="opcja2-wartosc" value="Etykieta2" />
  4. <input type="hidden" name="opcja3-wartosc" value="Etykieta3" />
  5. <div class="select" id="select1">
  6. <div class="opcja1-wartosc">Etykieta1</div>
  7. <div class="opcja2-wartosc">Etykieta2</div>
  8. <div class="opcja3-wartosc">Etykieta3</div>
  9. </div>
  10. <input type="submit" />
  11. </form>

Adi32
Tak, jest to jakieś rozwiązanie... Myślałem już nad tym i tak to zrobie jeżeli będzie to ostateczność.

Jednak wciąż ciekawi mnie zagadnienie przekazywania danych i nagłówków z przekierowaniem nie używjąć <form>.

Cytat
$host = "strona.www";
$path = "";
$data = "data1=value1&data2=value2";
$data = urlencode($data);

header("POST $path HTTP/1.1\r\n" );
header("Host: $host\r\n" );
header("Content-type: application/x-www-form-urlencoded\r\n" );
header("Content-length: " . strlen($data) . "\r\n" );
header("Connection: close\r\n\r\n" );
header($data);


To w ogóle nie działa... Wyskakuje okienko do pobrania pustego pliku.

Dzięki cudny, nie daje jeszcze pomógł - może ktoś jeszcze zajrzy.
cudny
Nie wyślesz nagłówka jeśli zostało już coś na stronie wyświetlone, poza tym zrób tak jak być powinno, a powinno być tak jak napisałem.
Adi32
Cytat(cudny @ 16.03.2012, 14:05:35 ) *
Nie wyślesz nagłówka jeśli zostało już coś na stronie wyświetlone


Nie no to jest jasne.
Ciekawi mnie jednak co takiego robi "submit" w formularzu.. Co wysyła, że server odbiera i ładuje dane do tablicy POST? Jak sam mogę coś takiego wysłać?


Cytat(cudny @ 16.03.2012, 14:05:35 ) *
poza tym zrób tak jak być powinno, a powinno być tak jak napisałem.


To też jest dla mnie jasne, poza tym do selecta wystarczy jeden input.

Jeszcze raz dzięki.
fr33d0m
To tak jak byś pytał dlaczego są drzwi w budynku, skoro można wyjść oknem?
SUBMIT to standardowe potwierdzenie formularza, które wysyła wszystko co jest między znacznikami <form></form>, jednocześnie wykonuje akcje z action="" daną metodą post/get. Nic więcej w tym nie ma, trochę zbyt małostkowy jesteś. smile.gif
Pozdrawiam
Adi32
Cytat(fr33d0m @ 16.03.2012, 18:40:15 ) *
To tak jak byś pytał dlaczego są drzwi w budynku, skoro można wyjść oknem?


Tak to może wyglądać ale tak nie jest. Interesuje mnie jak to działa nic więcej. Chodzi wyłącznie o cele eduakcyjne.

Cytat(fr33d0m @ 16.03.2012, 18:40:15 ) *
SUBMIT to standardowe potwierdzenie formularza, które wysyła wszystko co jest między znacznikami <form></form>


Nie wszystko a wybrane elementy jak input, textarea, submit... (ta małostkowy jestem)

Cytat(fr33d0m @ 16.03.2012, 18:40:15 ) *
jednocześnie wykonuje akcje z action="" daną metodą post/get. Nic więcej w tym nie ma


Niby nic a jednak coś jest. Gdyby było to jakie jasne to zasymulowanie tego procesu byłoby równie proste jak wygląda to z Twojego opisu.

Cytat(fr33d0m @ 16.03.2012, 18:40:15 ) *
Nic więcej w tym nie ma, trochę zbyt małostkowy jesteś. smile.gif


Małostkowy jestem smile.gif zgadza się. Często nudzi mi się w pracy stąd takie pomysły poza tym lubie wycisnąć temat do końca.

Dzięki fr33d0m i pozdrawiam.
absflg
Możesz stworzyć w formularzu jeden hidden. Gdy ktoś wybierze z twojej divowej listy jakiś element, przechwytujesz to w jQuery i odpowiednio zmieniasz wartość hiddena. Później wysyłasz to standardowym submitem.

Tylko nie zapomnij zrobić alternatywy w postaci standardowego selecta dla przeglądarek nie obsługujących javascriptu.
Adi32
Cytat(absflg @ 17.03.2012, 19:02:55 ) *
Możesz stworzyć w formularzu jeden hidden. Gdy ktoś wybierze z twojej divowej listy jakiś element, przechwytujesz to w jQuery i odpowiednio zmieniasz wartość hiddena. Później wysyłasz to standardowym submitem.

Tylko nie zapomnij zrobić alternatywy w postaci standardowego selecta dla przeglądarek nie obsługujących javascriptu.


Tak to już działa, dzięki smile.gif
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.