Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przesłanie zmiennych metodą POST z poziomu PHP
Forum PHP.pl > Forum > Przedszkole
rozny
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
Crozin
Ręcznie złożyć sobie całe żądanie HTTP, po czym wysłać je do docelowego serwera - fsockopen.
Sephirus
Lub fopen + stream_context_create

IMHO jak dla mnie wygodniejsze wink.gif
rozny
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...
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.