Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Wysyłanie zmiennych do kilku formularzy
Forum PHP.pl > Forum > Przedszkole
kamil7165
Witam. Jestem raczkujący w temacie PHP i wogóle HTML, dlatego zwracam się tutaj o pomoc. Ale do rzeczy. Chciałem zapytać czy istnieje możliwość wysłania tych samych zmiennych do dwóch formularzy jednocześnie? Innymi słowy, wstawiam w kod HTML formularz, którego zmienne zostają wysłane do skryptu PHP strony X i jednocześnie te same zmienne w stanie niezmienionym zostają wysłane takim samym formularzem do PHP strony Y. Niestety będzie to dosyć duża liczba zmiennych, tak ok. 20, muszą też być wysłane postem, get odpada. Jesta na to jakaś rada?
Pozdrawiam.
bostaf
Cytat(kamil7165 @ 15.10.2012, 00:15:22 ) *
Innymi słowy, wstawiam w kod HTML formularz, którego zmienne zostają wysłane do skryptu PHP strony X i jednocześnie te same zmienne w stanie niezmienionym zostają wysłane takim samym formularzem do PHP strony Y

Czyli parafrazując, chcesz żeby po kliknięciu jednego submita otwarły się dwie strony? (Nie mówię, że to niemożliwe, ale chcę się upewnić, że o to chodzi)
thek
Odpowiem: tak. Słowo kluczowe: curl. Na sronie która przetwarza zmienne odebrane z $_POST przetwarzasz je, ale dodatkowo tworzysz połączenie curlem, które śle je tam gdzie chcesz... Może to być nawet więcej niż jedna strona.
kamil7165
Nie chodzi mi o otwarcie 2 stron. Zostanie otwarta jedna z nich, ale do obu skryptów tych stron zostania przekazane dane formularza. Pojęcia nie mam jak to ugryźć.

To się chyba nie uda przy użyciu CURLa. Tu problem jest jeszcze jeden, o którym nie wspomniałem, za co przepraszam. Strona, na którą ma nastąpić przekierowanie po wysłaniu formularzy nie jest moja i dlatego nie mam dostępu do jej skryptów php, co więcej wymaga logowania i właśnie do przesłania danych do logowania chcę tego wszystkiego użyć. Na jednej stronie klikam "zaloguj do strony Y" i ze strony X trafiam zalogowany na Y. Dodatkowo chcę do swojej strony (X) przesłać dane użyte przy logowaniu, tak aby w przyszłości nie wpisywać ich ręcznie przy kolejnym logowaiu do strony Y. Dlatego też z użyciem CURLa nie będzie tak prosto.

Dziękuję thek, faktycznie można tak zrobić jak mówisz (trochę pogooglowałem). Tylko teraz kolejny problem. Założyłem konto na dejm.pl, który rzekomo oferuje obsługę cURLa. Niestety, widzę ciągle komunikat:
Fatal error: Call to undefined function curl_init() in /users/moja_stronka/www/login.php on line 44
W zakładce php info widzę: "cURL enabled". O co chodzi? blink.gif
thek
Może cUrl ma jakieś dodatkowe ograniczenia założone? Albo ktoś doda ł obsługę cURL i jednocześnie przywalił tę funkcję do zablokowanych lub tym podobny manewr. Trudno powiedzieć nie wiedząc konkretnie nic. Najlepiej napisz maila do hostingu i zapytaj co jest grane. Oni będą wiedzieć najlepiej co nakombinowali z tą biblioteką. A skoro już jesteśmy przy wielu stronach, to zastanów się, czy bedziesz wywoływał naraz wiele, bo lepiej może się okazać wywoływać curl multi.
-kamil7165-
Nie wiem co jest z tym hostingiem, dlatego w akcie desperacji po drobnych bojach postanowiłem postawić Apache, teraz cURL działa. Skleciłem jakiś kod w międzyczasie (strasznie obiektowo mi to wyszło...), ale mam z nim poważne problemy. Ma działać w następujący sposób:
1.Najpierw użytkownik chcący się zalogować do obcej strony (tutaj gmail.com) uruchamia poniższy skrypt.
2.Pobierane są nagłówki z jego przeglądarki
3.Całość zostaje wysłana do serwera gmaila za pomocą skryptu, który za pomocą nagłówków podszywa się pod przeglądarkę.
4.Pobierane jest ciasteczko z serwera i wysłane do przegłądarki.
5.Przeglądarka zostaje przekierowana do strony, na której użytkownik ma dostęp do swoich wiadomości na gmailu.
Niestety, po moim dłuższym grzebaniu w kodzie nie otrzymuję nawet nagłówków przeglądarki, a Live HTTP headers wypluwa kolejno błędy: 204 No content, tak jakby nie chciała poczekać na to przekierowanie i 500 Internal Server Error. Mój kod:
  1. <?php
  2.  
  3. function login($UserAgent, $Accept, $AcceptLanguage, $AcceptEncoding, $Connection, $ContentType $ContentLength, $continue, $service, $rm, $dsh, $ltmpl, $hl, $scc, $ss, $GALAX, $pstMsg, $dnConn, $Email, $Passwd, $signIn, $rmShown, $checkConnection, $timeStmp, $secTok){
  4.  
  5. global $Host;
  6. global $Referer;
  7. global $cookie;
  8.  
  9. $sendHeader=array($Host, $UserAgent, $Accept, $AcceptLanguage, $AcceptEncoding, $Connection, $Referer, $ContentType $ContentLength);
  10.  
  11. $sendField['continue']=$continue;
  12. $sendField['service']=$service;
  13. $sendField['rm']=$rm;
  14. $sendField['dsh']=$dsh;
  15. $sendField['ltmpl']=$ltmpl;
  16. $sendField['hl']=$hl;
  17. $sendField['scc']=$scc;
  18. $sendField['ss']=$ss;
  19. $sendField['GALAX']=$GALX;
  20. $sendField['pstMsg']=$pstMsg;
  21. $sendField['dnConn']=$dnConn;
  22. $sendField['Email']=$Email;
  23. $sendField['Passwd']=$Passwd;
  24. $sendField['signIn']=$signIn;
  25. $sendField['rmShown']=$rmShown;
  26. $sendField['checkConnection']=$checkConnection;
  27. $sendField['timeStmp']=$timeStmp;
  28. $sendField['secTok']=$secTok;
  29.  
  30. $ch = curl_init('https://accounts.google.com/ServiceLoginAuth');
  31.  
  32. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie );
  33. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie );
  34. curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  35. curl_setopt($ch, CURLOPT_HTTPHEADER, $sendHeader);
  36. curl_setopt($ch, CURLOPT_POST, 1);
  37. curl_setopt($ch, CURLOPT_POSTFIELDS, createPostString($sendField));
  38. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  39. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  40. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  41. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
  42. curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
  43.  
  44. curl_exec($ch);
  45. }
  46.  
  47. function createPostString($sendField) {
  48. foreach ($sendField as $key => $value) {
  49. $sendField[$key] = urlencode($key) . '=' . urlencode($value);
  50. }
  51. return implode('&', $sendField);
  52. }
  53.  
  54. $Host="accounts.google.com";
  55. $Referer="accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&hl=pl";
  56. $cookie='cookie.txt';
  57.  
  58. foreach (getallheaders() as $name => $value) {
  59. $headerArray[$name]=$value;
  60. }
  61. print_r($headerArray); //UMIESZONE W CELACH TESTOWYCH/TYMCZASOWO. NIE WYSWIETLA NICZEGO, CZYTAJ NIE DZIALA, A JESZCZE PRZED CHWILĄ DZIALALO...
  62.  
  63. $continue=$_POST['continue'];
  64. $service=$_POST['service'];
  65. $rm=$_POST['rm'];
  66. $dsh=$_POST['dsh'];
  67. $ltmpl=$_POST['ltmpl'];
  68. $hl=$_POST['hl'];
  69. $scc=$_POST['scc'];
  70. $ss=$_POST['ss'];
  71. $GALX=$_POST['GALX'];
  72. $pstMsg=$_POST['pstMsg'];
  73. $dnConn=$_POST['dnConn'];
  74. $checkConnection=$_POST['checkConnection'];
  75. $checkDomains=$_POST['checkDomains'];
  76. $timeStmp=$_POST['timeStmp'];
  77. $secTok=$_POST['secTok'];
  78. $Email=$_POST['Email'];
  79. $Passwd=$_POST['Passwd'];
  80. $PersistentCookie=$_POST['PersistentCookie'];
  81. $rmShown=$_POST['rmShown'];
  82.  
  83. print_r($_POST); //UMIESZONE W CELACH TESTOWYCH/TYMCZASOWO. NIE WYSWIETLA NICZEGO, CZYTAJ NIE DZIALA, A JESZCZE PRZED CHWILĄ DZIALALO...
  84.  
  85. login($headerArray['$User-Agent'], $headerArray['Accept'], $headerArray['Accept-Language'], $headerArray['Accept-Encoding'], $headerArray['Connection'], $headerArray['Content-Type'] $headerArray['Content-Length'], $continue, $service, $rm, $dsh, $ltmpl, $hl, $scc, $ss, $GALAX, $pstMsg, $dnConn, $Email, $Passwd, $signIn, $rmShown, $checkConnection, $timeStmp, $secTok);
  86.  
  87. setcookie($cookie);
  88. header('Location: <a href="https://mail.google.com/mail&#39%3b%29;" target="_blank">https://mail.google.com/mail');</a>
  89.  
  90. ?>

Byłbym wdzięczny, gdyby ktoś spojrzał na ten listing. Nie jestem najlepszy w PHP, wiele fragmentów skryptu są kopiami znalezionymi w sieci.
kamil7165
Edit. Zapominałem się zalogować. aaevil.gif "... 204 No content, tak jakby nie chciała poczekać na to przekierowanie...", miało być "... 204 No content, tak jakby przeglądarka nie chciała poczekać na to przekierowanie..." Ten fragment kodu wysyła oczywiście póki co dane do jednego formularza, później zajmę się resztą, a fragment kodu związany za wysłanie danych do logowania z gmail.com do mojego skryptu chyba po prostu "zapożyczę" sobie z tej strony. Widzę jeszcze, że źle mi się skopiował fragment z "header()" na forum.

Ha! Już mam, okazało się, że popełniłem kilka błedów semantycznych - zgubiłem przecinki. Po kilku poprawkach ten fragment działa jak należy. Myślę, że z resztą już sobie dam radę. Dziękuję za wskazówki.
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.