Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Podwójny submit
vefeer
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


Witam,

Czy jest możliwy podwójny submit - taki, że po kliknięciu na submit formularz poprzez AJAX dodaje zamówienie do bazy mysql, po czym skrypt dodawania (PHP) metodą PDO::lastinsertid zwraca wartość ID, a następnie AJAX czy JQuery umieszcza ją w jednym z ukrytych pól input submitowanego formularza? Inaczej - przed przejściem submitowanego formularza do płatności (skrypt zewnętrzny) muszę utworzyć w bazie rekord nowego zamówienia i zwrócić do formularza (tego submitowanego) ID nowego rekordu, aby płatność była kojarzona z danym zamówieniem.

Dziękuję za pomoc
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
vokiel
post
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Tak, ale akcje formularza musisz przekazać do javascript oraz zablokować domyślną akcję wysłania formularza.
Schemat postępowania
1. Na zdarzenie onclick przycisku submit wywołujesz funkcję, która:
2. Zablokuje wysłanie formularza
3. Wyśle zapytanie postem do skryptu php
4. Skrypt php dodaje co ma dodać, zwraca (jako json, albo zwykłe echo id ostatniego rekordu)
5. Funkcja w js, ta, która wysyłała formularz odbiera odpowiedź skryptu php
6. Jeśli jest błędna to nie wysyła formularza dalej
7. Jeśli jest poprawna, to wysyła zapytanie postem dalej, do tego skryptu płatności

Do formularzy możesz użyć pluginu, np: jQuery Form Plugin

Ten post edytował vokiel 18.10.2009, 15:47:19


--------------------
Go to the top of the page
+Quote Post
vefeer
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


Hej, dzięki za pomoc. Po wysłaniu formularza poprzez ajaxSubmit i otrzymaniu ID (jako response), nie potrafię ponownie submitować formularza. Użyłem jquery form plugin. Aby form wysłał się ajaxem, należy zwrócić false. Po tym już z formularzem nic nie mogę zrobić. Proszę o pomoc. Dzięki

Ten post edytował vefeer 18.10.2009, 18:05:08
Go to the top of the page
+Quote Post
vokiel
post
Post #4





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Masz tam taką opcję success, do której możesz przypisać funkcję, która wykona się po poprawnym odebraniu danych. Możesz wtedy dodać nowe pole, i zrobić ponownie ajaxSubmit tyle, że na inny adres. Bądź już normalnie zezwolić na wysłanie formularza.


--------------------
Go to the top of the page
+Quote Post
vefeer
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


Ale w jaki sposób mogę ponownie zezwolić na wysyłanie formularza w funkcji success? Próbuję to zrobić, ale niestety się nie udaje.
  1. function Response(responseText, statusText) {
  2. $('input[@name=tescik]').val(responseText);
  3. $("#test").submit();
  4. }


Ten post edytował vefeer 18.10.2009, 19:56:51
Go to the top of the page
+Quote Post
vokiel
post
Post #6





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


[JAVASCRIPT] pobierz, plaintext
  1. function Response(responseText, statusText) {
  2. $('input[@name=tescik]').val(responseText);
  3. $("#test").ajaxSubmit();
  4. }
[JAVASCRIPT] pobierz, plaintext
A tak nie zadziała? Teraz tylko inne parametry dla ajaxSubmit i myślę, że powinno zadziałać.


--------------------
Go to the top of the page
+Quote Post
vefeer
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 4.08.2009

Ostrzeżenie: (0%)
-----


Ale ja muszę tam przejść do tych płatności, a ajaxem zrobię to w tle...
Go to the top of the page
+Quote Post
vokiel
post
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


A jak zrobisz return true; przy pierwszym ajaxSubmit?
Albo po prostu:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. $('#submit').click(function(){
  3. $.ajax({
  4. /* całe zapytanie itd */
  5. success: function(){
  6. $('input[@name=tescik]').val(responseText);
  7. return true;
  8. }
  9. });
  10. });
  11. });
[JAVASCRIPT] pobierz, plaintext


Tylko nie wiem, czy się nie wyśle ten formularz zanim ajax nie zwróci wyników.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 13:28