Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Dwie akcje do jednego submita?
Forum PHP.pl > Forum > Przedszkole
boro11
Witam ostatnio dodałem do swojej strony możliwość płatności używając internetowych banków tj. PayPal oraz AlertPay.

Przy zamówieniu można wybrać sobie co się chce kupić. Kod samego formularza/buttonu wygląda następująco:

  1. <form method="post" name='asd' action="https://www.alertpay.com/PayProcess.aspx">
  2. <input name="ap_purchasetype" value="service" type="hidden">
  3. <input name="ap_merchant" value="money@refbackbank.com" type="hidden">
  4. <input name="ap_itemname" id='aaa' value="Emerald - 5$" type="hidden">
  5. <input name="ap_description" value="<?=$_SESSION['login']?>" type="hidden">
  6. <input name="ap_currency" value="USD" type="hidden">
  7. <input name="ap_returnurl" value="https://refbackbank.com/" type="hidden">
  8. <input name="ap_quantity" value="1" type="hidden">
  9. <input name="ap_amount" id='bbb' value="5" type="hidden">
  10. <input type="image" src="https://refbackbank.com/images/alertpay.jpg" border="0" name="submit" alt="AlertPay">
  11.  
  12. </form>


Jak mogę dodać do tego żeby przy zamówieniu (kliknięciu w button) dodała się również informacja do bazy danych ze szczegółami zamówienia?
CuteOne
Poczytaj o onsubmit i ajax
!*!
Cytat(CuteOne @ 26.08.2011, 07:19:24 ) *
Poczytaj o onsubmit i ajax


A co jeśli JS będzie wyłączony?
Zrób formularz z przekierowaniem do swojego pliku po czym z niego wyślij dane na stronę płatności i do bazy.
CuteOne
Olewam takich ludzi jak chcą być masochistami to ich wybór

ps. tobie radze to samo smile.gif

EDIT: chociaż w tym wypadku to faktycznie masz rację. zrobienie tego po stronie klienta, może spowodować duże komplikacje
!*!
Też ich olewam, ale nie w przypadku gdy chodzi o płatności wink.gif
wizu
Myślę, że rozsądniejszym wyjście będzie tworzenie rekordu w bazie danych za każdym razem, gdy wyświetlasz formularz. Z reguły do bramki płatności musisz wysłać jakiś ciąg znaków będący niejako identyfikatorem sesji, zapisz go sobie również w bazie wraz z id klienta.
Gdy user przejdzie na stronę bramki płatności, w zależności od tego, czy zapłaci, czy nie, zostanie przekierowany z powrotem na Twoją stronę wraz z danymi w $_POST, (przekieruje na odpowiedni adres, który np. wpisałeś w panelu administracyjnym bramki płatności). Odczytujesz sobie tylko $_POST, znajdziesz tam id sesji który wcześniej podałeś, aktualizujesz sobie na jego podstawie rekord w bazie (np. zmieniasz pole status na 'Zapłacone') i masz pewność, że nie zgubisz żadnej płatności.
!*!
Cytat(wizu @ 26.08.2011, 10:35:48 ) *
Myślę, że rozsądniejszym wyjście będzie tworzenie rekordu w bazie danych za każdym razem, gdy wyświetlasz formularz.


Bez sensu. Niepotrzebne odpytywanie bazy. A co jeśli ktoś wyświetli formularz a nie dokona zapłaty? Lepiej wysłać zapytanie gdy faktycznie jest to podtrzebne.
wizu
Cytat(!*! @ 26.08.2011, 10:42:41 ) *
Bez sensu. Niepotrzebne odpytywanie bazy. A co jeśli ktoś wyświetli formularz a nie dokona zapłaty? Lepiej wysłać zapytanie gdy faktycznie jest to podtrzebne.


Rób jak uważasz. Jednak jeśli chodzi o płatności, lepiej mieć wszystko w logach, nawet te według Ciebie niepotrzebne dane.
!*!
A jakież to niby potrzebne dane może mi przekazać użytkownik tuż po wyświetleniu formularza, że aż muszę to sobie zapisać do bazy? Log o którym mówisz o ile już musisz zapisujesz w bazie dopiero po jakiejś akcji, szczególnie że nie wiesz jaką opcje wybierze użytkownik, no chyba że masz magiczną kulę. Twój sposób niepotrzebnie zaśmieca bazę, a logi jako takie i tak są w innym miejscu, chyba że trzymasz te płatności na yoyo czy innym home.pl
boro11
Cytat(!*! @ 26.08.2011, 07:23:38 ) *
A co jeśli JS będzie wyłączony?
Zrób formularz z przekierowaniem do swojego pliku po czym z niego wyślij dane na stronę płatności i do bazy.


Mógł byś trochę jaśniej bo nie wiem czy dobrze zrozumiałem..

Chcesz aby podczas "zakupów" user wybierał sobie co chce i podczas wyboru przesyłają się dane do bazy a dopiero na następnej stronie są płatności?
CuteOne
<form action="skrypt_do_odbierania_danych.php" method="post">

a w Twoim pliku "skrypt_do_odbierania_danych.php" zapisujesz dane do bazy po czym wysyłasz je curlem do płatności
boro11
Będę musiał to chyba jednak zrobić tak jak sam to opisałem bo waszego sposobu chociaż jest pewnie o niebo lepszy niestety nie rozumiem :/
CuteOne
Poczytaj o cURL to zrozumiesz smile.gif
!*!
CuteOne dlaczego curl?

boro11 - Twój system płatności ma zapeewne jakieś API, każdy serwis takie posiada, dzięki czemu możesz je obsługiwać.

Chodzi o to że robisz formularz, plik "jakistam.php" i w formularzu dajesz "action=jakistam.php".
W tym pliku odczytujesz dane jakie wysłałeś w formularzu i zapisujesz je sobie do bazy, po czym dzięki API wysyłasz je do serwisu z płatnościami. Ot koniec.

Tylko zabezpiecz to dobrze wink.gif
CuteOne
Bo jest prostsze niż zabawa z API smile.gif
1. Nie wiesz czy dany serwis takowe API posiada a jeszcze lepiej jak jeden posiada a drugi nie
2. Jeżeli obsługujesz więcej niż jeden bank to podwajasz / trajasz / pięciorasz (biggrin.gif) wysiłek na dostosowanie API do skryptu

A tak masz jedną funkcję do wysyłki i tylko zmieniasz sobie dane POST/GET smile.gif

ps. dla mnie jeżeli API nie ma jakiś fajniejszych możliwości jak odbiór / wysyłka danych to jest zbędny smile.gif
!*!
@up, to są jeszcze takie na rynku? Przecież właśnie po to są te wszytkie serwisy płatności żeby obsługiwać każdy bank po swojej stronie i oni dostarczają Ci API tylko do obsługi ich bebechów, nic więcej, przecież nie robisz odwołania do każdego banku po swojej stronie wink.gif
CuteOne
Wole napisać swój skrypt niż płacić pośrednikowi prowizję...
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.