Jakub Rajchowiak

Jakub Rajchowiak właściciel,
Rajchowiak.com

Temat: czy to jest mozliwe?

chodzi mianowicie o przekierowanie za pomoca JS wysylajac jednoczesnie zmienne poprzez POST???

Wiem ze jest mozliwe to z poziomy PHP uzywajac funkcji header() i ustawiajac odpowienie naglowki ale potrzebuje wykonania tego z poziomu JS.

Problem przed ktorym stanalem to formularz wewnatrz formularza. Nie jest to obslugiwane jak zauwazylem z poziomu htmla. i nie moge zrobic czegos takiego jak ponizej. Chcialem wewnetrzny formularz zalatwic za pomoca JS ale nie wiem jak przekierowac strone (zrobic submit) wprowadzajac zmienne POST.


<form>
.....
<form><input type="submit"></form>
...
<input type="submit">
</form>


Moze ktos pomoc lub zaproponowac inne rozwiazanie?
Jacek Z.

Jacek Z. Web Application
Developer

Temat: czy to jest mozliwe?

Jakub Rajchowiak:
chodzi mianowicie o przekierowanie za pomoca JS wysylajac jednoczesnie zmienne poprzez POST???

Moze ktos pomoc lub zaproponowac inne rozwiazanie?

Może jak byś napisał coś więcej - co chcesz docelowo osiągnąć.. Bo jakoś nie wyobrażam sobie zastosowania czegoś takiego o czym piszesz.. Nie da się po prostu obsłużyć odpowiednio danych pochodzących z jednego formularza po stronie serwera?
Marcin Witek

Marcin Witek isido.pl ułatwia
pracę - polski sytem
zarządzania
projekt...

Temat: czy to jest mozliwe?

technicznie form wewnątrz forma można zrobić tak, że składniowo będzie poza formularzem "nadrzędnym", a wizualnie weń wsadzony CSSem ;)

Albo zrobić pola w formularzu "nadrzędnym", które będą tylko kopiować swoją wartość do ukrytych pól "wewnętrznego" formularza, który będzie poza formularzem "nadrzędnym".

A sama wysyłka, jeśli ma być niezależna, to IMHO najlepiej coś w rodzaju http://jquery.malsup.com/form/

konto usunięte

Temat: czy to jest mozliwe?

Jeśli się musi to być javascript, wystarczy że stworzysz formularz składający się tylko z pól typu hidden. Wówczas na jakąś akcję, np onclick na jakimś przycisku, uzupełniasz pola hidden odpowiednimi danymi, a następnie wysyłasz formularz, który w atrybucie action ma adres strony, na którą chcesz przekierować.

konto usunięte

Temat: czy to jest mozliwe?

Zaleznie od tego co chcesz osiagnac to mozesz tez rozwazyc:
- Umieszczenie podformularza w iframe
- Wysylanie danych z podformy ajaxem
- Zrobic wszystko jako jedna forme i rozdzielic w pliku ktory przyjmuje POST'a
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: czy to jest mozliwe?

Hmm...jeśli potrzebujesz uruchomienia 2 skryptów php na różnych stronach to możesz albo dodać coś a'la
<?
php if($_POST['second_form'])) {
include('second_form.php')
}
?>

a z płaszczyzny przeglądarki możesz:

<input type="hidden" value="val1">
i po submicie wysyłasz httprequest ajaxowe odsyłające do pliku .php jaki chcesz. Możesz tam wsadzić zmienne typu get, bo i tak będą niejawne dla użytkownika:

xmlhttp.open("GET","second_form.php?var=val1",true);
xmlhttp.send();
Jakub Rajchowiak

Jakub Rajchowiak właściciel,
Rajchowiak.com

Temat: czy to jest mozliwe?

Marcin Witek i Maciej Wilgucki dzieki wielkie, wlasnie takie rozwiazanie zrobilem stosujac drugi formularz z polami hidden i wpisujac tam dane ktore byly potrzebne. Przyznam, ze wpladlem na to w nocy ale myslalem ze mozna to zrobic w "ladniejszy sposob" Ajax odpadal bo mialo nastapic przekierowanie urzytkownika.

Widze ze problem nie wszyscy zrozumieli a weic wlasnie chodzi o umieszczenie formularza w formularzu i wysylanie ich do innych plikow phpa.

Nie wpadlem jednak na zrobienie dwoch formularzy i umiejscowienie odpowiednio stosujac CSS. ciekawe rozwiazanie. Bede pamietal na przyszlosc. Bardziej by mi to pasowalo, nie trzeba wtedy stosowac JS.

Dzieki wielkie za pomoc.

konto usunięte

Temat: czy to jest mozliwe?

Z Ajaxa również możesz skorzystać. Wystarczy, że wyślesz dane postem do serwera i jeśli wszystko jest ok, przekierować przy pomocy window.location.href.
W jQuery wyglądałoby to następująco:

$.ajax({
/* tutaj ustawiasz niezbędne paramtery, a po nich: */
success: function() {
window.location.href = "/jakis_adres";
}
});

Dzięki temu możesz jeszcze przed przekierowaniem sprawdzić poprawność danych.
Adam Pawliczek

Adam Pawliczek Usability expert, UX
designer,
Interaction
specialist

Temat: czy to jest mozliwe?

Jakub Rajchowiak:
umieszczenie formularza w formularzu i wysylanie ich do innych plikow phpa.

Nie wiem co te Twoje skrypty robią ale sytuacja, w której musisz aż tak kombinować (wysyłać jednocześnie do 2 skryptów) jest dla mnie trudna do wyobrażenia. Po pierwsze może lepiej przebudować aplikację i mieć jeden formularz i jeden skrypt? Po drugie nigdy nie umieszczamy formularza w formularzu. Po trzecie jak już bardzo musisz to użyj ajaxa, przykład powyżej.

konto usunięte

Temat: czy to jest mozliwe?

Adam Pawliczek:

Nie wiem co te Twoje skrypty robią ale sytuacja, w której musisz aż tak kombinować (wysyłać jednocześnie do 2 skryptów) jest dla mnie trudna do wyobrażenia.

Dla mnie właśnie też, ale wstydziłem się napisać ;)

Jakub - możesz nakreślić co robisz? Klepnąłem trochę rzeczy, niektórych mocno nacudowanych, i nigdy nie miałem takiej sytuacji do załatwienia ;)Peter K. edytował(a) ten post dnia 30.04.10 o godzinie 09:16
Jakub Rajchowiak

Jakub Rajchowiak właściciel,
Rajchowiak.com

Temat: czy to jest mozliwe?

Rozwiazanie z ajaxem i przekierowaniem po wykonaniu zadania tez jest dobrym rozwiazaniem, ale i tak chyba nie daloby rade u mnie tego zastosowac.

a co ja wykombinowalem opisuje pozniej. Od razu mowie ze mam tendencje zakrecania nawet najprostszych rzeczy wiec pewnie dalo sie prosciej ale najwazniejsze ze juz wszystko dziala.


Obrazek


to co powyzej przedstawia srodek procesu dodawania rozmiaru opony dla danego samochodu. Kazde rozwiniecie selecta dla danego parametru powoduje odswiezenie skryptu (glowny formularz)i pokazanie kolejnego parametru.

Dodawanie nowej pozycji parametru (marka, model, silnik, rocznik) jest oblugiwane przez ten sam skrypt (ten sam formularz).

Edycja i usuwanie parametru jest obslugiwane przez inny skrypt i tutaj mialem potrzebe podpiecia drugiego formularza, ktory znajduje sie wewnatrz wspomnianego glownego. W sumie ajax tutaj troche by tu nie pasowal poniewaz musze wyslac id parametru i wyswietlic odpowiedni komunikat itd.

Koniec wyboru (wybor ostatniego parametru) powoduje taki ekran:

Obrazek


Dodanie nowego rozmiaru opony jest oblugiwane przez glowny skrypt i powoduje wyswietlenie ponownie calosci z aktualnie dodana pozycja.

JEsli macie jakies ciekawe rady jestem chetny na dyskusje, choc raczej juz tego nie bede zmienial. Na usprawiedliwienie przyznam ze to co zrobilem bylo blednie przeze mnie zaplanowane i w sumie zadko robie obslugiwanie przez jeden skrypt tylu akcji ale jakos tak wyszlo i niestety musialem to jakos dokonczyc.

konto usunięte

Temat: czy to jest mozliwe?

Najłatwiej to zrobić na niewidzialnych pływających ramkach.

Formularz:
<iframe name="target1" style="display:hidden" />
<form action="skrypt1.php" target="target1">
<input type="submit" value="wyślij" style="display:hidden;" />
</form>
<iframe name="target2" style="display:hidden" />
<form action="skrypt2.php" target="target2" onsubmit="document.forms[0].submit();">
<input type="submit" value="wyślij" />
</form>


Wewnątrz ramki możesz odwoływać się do dokumentu głównego poprzez window.parent np:
window.parent.alert("formularz1 OK")
Mariusz Lewandowski

Mariusz Lewandowski Senior Java
Developer

Temat: czy to jest mozliwe?

Generalnie UC, ktory tutaj opisujesz mozna zrobic na kilka sposobow. Pierwszym z nich, o ktorym ja bym pomyslal w pierwszej chwili jest zastosowanie dwu-trzywymiarowych pol np:


<select name="car[make]" onclick="this.form.submit()">
<option ... >
...
...
</select>


I wtedy w formularzu ustawiasz alkcje na jakis skrypt PHP, w funkcji PHP sprawdzasz jaki parametr zostal przekazany i masz dwa wyjscia:
a. wzorzec GET after POST i przekazanie parametrow do GETa zeby byly caly czas widoczne na stronie
b. przekazac parametry do sesji i nie zajmowac sobie glowy GETem.

Oczywiscie w PHP musialbys zaimplementowac odpowiednie algorytmy ktore uzaleznialyby wybor jednego pola od drugiego.

"Zagniezdzanie" formularzy to najgorsze rozwiazanie.

EDIT: A co do usuwania/dodawania to w ten sam sposob mozesz to ladnie rozwiazac:


<input type="submit" value="car[remove][5]" />

lub

<input type="submit" value="car[add][5]" />


Gdzie 5 to jakies id.Mariusz Lewandowski edytował(a) ten post dnia 06.05.10 o godzinie 14:56

konto usunięte

Temat: czy to jest mozliwe?

Jakub Rajchowiak:
JEsli macie jakies ciekawe rady jestem chetny na dyskusje, choc raczej juz tego nie bede zmienial. Na usprawiedliwienie przyznam ze to co zrobilem bylo blednie przeze mnie zaplanowane i w sumie zadko robie obslugiwanie przez jeden skrypt tylu akcji ale jakos tak wyszlo i niestety musialem to jakos dokonczyc.

Jeżeli jest tyle klikania to staram się załatwić to wszystko po stronie klienta, potem serializacja obiektu js albo formularza i całość na serwer. Im więcej przeładowań tym większa frustracja usera.

Następna dyskusja:

Czy jest taki CMS?




Wyślij zaproszenie do