Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Przesłanie zmiennych metodą POST z poziomu PHP, czy jest inna opcja niż CURL?
rozny
post
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 14.01.2004
Skąd: Zielona Góra

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


Witam, mam następujacy problem:

Wysyłam formularz do skryptu PHP, ten w pętli przetwarza mi go X razy. Następnie chcę przeładować skrypt i przetworzyć go kolejne X razy. Chcę tak robić tak długo, aż w bazie danych skończą mi się rekordy pasujące do zapytania. Pytanie jest takie - w jaki sposób przy przeładowaniu skryptu przekazywać wysłane z formularza POSTem zmienne? Skrypt sprawdza, czy zmienne zostały wysłane metodą post i tylko wtedy się wykonuje, więc dodanie parametrów do header(Location:) nie wchodzi w grę.

Czy jest możliwość wysłania z poziomu PHP zmiennych metodą POST nie używając biblioteki cURL? Wiem, że to wygodne rozwiązanie, ale nie mogę mieć pewności, że serwer, na którym przyjdzie pracować skryptowi będzie miał doinstalowaną tą bibliotekę. Chcę żeby to było maksymalnie uniwersalne...

Jakieś pomysły jak to rozwiązać?

Pozdrawiam
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Ręcznie złożyć sobie całe żądanie HTTP, po czym wysłać je do docelowego serwera - fsockopen.
Go to the top of the page
+Quote Post
Sephirus
post
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Lub fopen + stream_context_create

IMHO jak dla mnie wygodniejsze (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
rozny
post
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 14.01.2004
Skąd: Zielona Góra

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


Czyli po wykonaniu pętli musiałbym zrobić coś takiego: (?)

  1. <?php
  2. $url = 'localhost/send_newsletter.php';
  3. $data = array ('dist_list' => $list_id, 'select_template' => $template_thumb, 'subject' => $subject, 'tresc' => $content);
  4. $data = http_build_query($data);
  5.  
  6. $context_options = array (
  7. 'http' => array (
  8. 'method' => 'POST',
  9. 'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
  10. . "Content-Length: " . strlen($data) . "\r\n",
  11. 'content' => $data
  12. )
  13. );
  14.  
  15. $context = stream_context_create($context_options);
  16. $fp = fopen($url, 'r', false, $context);
  17. ?>


W jaki sposób to działa? Otwiera do odczytu plik php, wczytuje z niego kod i go przetwarza w locie? Trochę nie do końca rozumiem mechanizm tym kierujący...

Zrobiłem coś takiego, ale niestety nie działa...

  1. <?php
  2.  
  3. //--------------------- SETTINGS AREA ---------------------//
  4.  
  5. require_once('system/db_settings.php');
  6. require_once('system/errors.php');
  7. require_once('functions.php');
  8. require_once('PHPMailer/class.phpmailer.php');
  9.  
  10. //--------------------- CONNECTION AREA ---------------------//
  11.  
  12. @mysql_connect ( $host,$username,$password ) or displayError(1);
  13. @mysql_select_db ( $database ) or displayError(2);
  14. @mysql_query("SET NAMES 'UTF8'");
  15.  
  16. //--------------------- WORKING AREA ---------------------//
  17.  
  18. if ($_POST) {
  19.  
  20. $list_id = (int)$_POST['dist_list'];
  21.  
  22. if (empty($_POST['select_template'])) {
  23.  
  24. $template_thumb = '1';
  25.  
  26. }
  27.  
  28. else {
  29.  
  30. $template_thumb = (int)$_POST['select_template'];
  31.  
  32. }
  33.  
  34. $subject = trim($_POST['subject']);
  35. $content = trim(bb2html($_POST['tresc']));
  36.  
  37. $template = @mysql_fetch_assoc(@mysql_query("SELECT body FROM `templates` WHERE id=".$template_thumb)) or displayError(3);
  38.  
  39. $body = str_replace("[content]", $content, $template['body']);
  40. $body = str_replace("[title]", $subject, $body);
  41.  
  42. $mail = new PHPMailer();
  43. $mail->IsSMTP();
  44. $mail->Host = "*";
  45. $mail->SMTPAuth = true;
  46. $mail->SMTPKeepAlive = true;
  47. $mail->Host = "poczta.o2.pl";
  48. $mail->Port = 587;
  49. $mail->Username = "*";
  50. $mail->Password = "*";
  51. $mail->SetFrom('*', 'Newsletter');
  52. $mail->AddReplyTo('*', 'Newsletter');
  53. $mail->Subject = "$subject";
  54.  
  55. $query = @mysql_query("SELECT `email_id` FROM distribution_lists WHERE id = ".$list_id) or displayError(3);
  56.  
  57. $mail_list = @mysql_fetch_assoc($query);
  58.  
  59. $query = @mysql_query("SELECT * FROM `users` WHERE id IN ('$mail_list[email_id]') AND verify_status = '1' AND send_status = 'to_send'") or displayError(3);
  60.  
  61. $get_list = @mysql_query("SELECT `email_id` FROM distribution_lists WHERE id = ".$list_id) or displayError(3);
  62.  
  63. $mail_list = @mysql_fetch_assoc($get_list);
  64.  
  65. $get_emails = @mysql_query("SELECT * FROM `users` WHERE id IN ($mail_list[email_id]) AND verify_status = '1' AND send_status = 'to_send' LIMIT 10") or displayError(3);
  66.  
  67. if (mysql_num_rows($get_emails) == '0') {
  68.  
  69. $update = @mysql_query("UPDATE `users` SET send_status = 'to_send'") or displayError(3);
  70. echo 'Wszystkie adresy email były oznaczone jako wysłane. Nastąpiła konwersja statusu wysyłki wiadomości. Proszę ponowić wysyłkę newslettera...';
  71.  
  72. }
  73. $suma = 0;
  74. $bledy = 0;
  75. $porcja = 1;
  76. $wyslane = 0;
  77. $niewyslane = 0;
  78.  
  79. echo '<div class="listing">';
  80.  
  81. while ($row = @mysql_fetch_assoc($get_emails)) {
  82.  
  83. $mail->AltBody = "Otwórz tę wiadomość aplikacją obslugującą wiadomości HTML";
  84. $mail->MsgHTML($body);
  85. $mail->AddAddress($row['email'], $row['name']);
  86.  
  87. if(!$mail->Send()) {
  88.  
  89. echo "Błąd (" . str_replace("@", "@", $row['email']) . ')<br /> ' . $mail->ErrorInfo . '<br />';
  90. $niewyslane++;
  91.  
  92. }
  93.  
  94. else {
  95.  
  96. echo "Wiadomość wysłana do: " . $row["name"] . ' (' . str_replace("@", "@", $row["email"]) . ')<br />';
  97. $update = @mysql_query("UPDATE `users` SET send_status = 'sent' WHERE email = '$row[email]'") or displayError(3);
  98.  
  99. if (!$update) {
  100.  
  101. displayError(4);
  102.  
  103. echo $row[email];
  104.  
  105. }
  106.  
  107. else {
  108.  
  109. $mail->ClearAddresses();
  110. $mail->ClearAttachments();
  111. $wyslane++;
  112.  
  113. }
  114. }
  115.  
  116. }
  117.  
  118. echo 'Wysłano: '.$wyslane.'<br />';
  119. echo 'Błąd wysyłania: '.$niewyslane.'<br />';
  120. echo 'W sumie wysłano: '.$wyslane + $suma.'<br />';
  121. echo 'W sumie nie wysłano: '.$niewyslane + $bledy.'<br />';
  122. echo '</div>';
  123.  
  124. [b]$url = 'send_newsletter.php';
  125. $data = array ('dist_list' => $list_id, 'select_template' => $template_thumb, 'subject' => $subject, 'tresc' => $content);
  126. $data = http_build_query($data);
  127.  
  128. $context_options = array (
  129. 'http' => array (
  130. 'method' => 'POST',
  131. 'header'=> "Content-type: application/x-www-form-urlencoded\r\n"
  132. . "Content-Length: " . strlen($data) . "\r\n",
  133. 'content' => $data
  134. )
  135. );
  136.  
  137. $context = stream_context_create($context_options);
  138. $fp = fopen($url, 'r', false, $context);[/b]
  139.  
  140. }
  141.  
  142.  
  143. if ($_GET) {
  144.  
  145. die ('Parametry należy przekazać za pomocą formularza.');
  146.  
  147. }
  148.  
  149. ?>


Dodam, że plik send_newsletter.php domyślnie wywoływany jest przez AJAX i do AJAX'a zwraca rezultaty wykonania się. Chcę żeby po każdym wykonaniu się pętli efekt wykonania został zwrócony do AJAX'a i skrypt wykonał się ponownie...

Ten post edytował rozny 16.04.2012, 10:39:47
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 26.09.2025 - 00:00