Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Formularz wysyłki maila ze strony
Forum PHP.pl > Forum > Przedszkole
carpov
Jestem zielony w temacie PHP ...więc z góry przepraszm za lamerskei problemy ...ale liczę na pomoc.

W czym problem? otóż postanowiłem na stronce zrobić prosty formularz do wysyłania zapytań na maila (3 pola użytkownik, adres zwrotny i treść) Od providera dostałem gotowe rozwiązanie w postaci skryptu PHP omijającego problem zablokowanej funkcji mail(). Zaimplementowałem to na stronce i git.......... działa. Maile lądują tam gdzie trzeba tylko coś nie tak jest z przekierowaniem na stronki w przypadku powodzenia lub niepowodzenia.

Poniżej zamieszczam kod. Co tu neleży zmienić żeby po poprawnym wyslaniu maila przeszedł na zadaną stronke?

Proszę o pomoc

Kod
<?php

# tutaj nalezy podac odpowiednie parametry zmiennych:
$serwer_poczty_wychodzacej = 'smtp.domena.pl';
$nasza_skrzynka_email = 'mail@domena.pl';
$haslo_do_skrzynki = '123456';
$temat_wiadomosci = 'Formularz kontaktowy';
$nazwa_naszej_firmy = 'Firma;
$strona_bledu = 'blad.html';
$strona_wyslana = 'ok.html';



if($_POST['kto'] != '' && $_POST['mail'] != '' && $_POST['tresc'] != '')
{

require_once 'Mail.php';

$params['host'] = $serwer_poczty_wychodzacej;
$params['port'] = 25;
$params['auth'] = true;
$params['username'] = $nasza_skrzynka_email;
$params['password'] = $haslo_do_skrzynki;

$headers['Subject'] = $temat_wiadomosci;
$headers['From'] = $_POST['mail'];
$headers['To'] = $nazwa_naszej_firmy;
$headers['Content-type']='text/plain; charset=utf-8';


$body = $_POST['kto'].' napisał/a: '.$_POST['tresc'];

$recipients = $nasza_skrzynka_email;


$mail = Mail::factory('smtp', $params);
if (PEAR::isError($mail)) {

         print $mail->getMessage();
    
     } else {
    
         $error = $mail->send($recipients, $headers, $body);
        
              if (PEAR::isError($error)) {
          
                     $host  = $_SERVER['HTTP_HOST'];
                        header("Location: http://$host/$strona_bledu");
                        exit;

              
                   } else {
                    
                         $host  = $_SERVER['HTTP_HOST'];
                     header("Location: http://$host/$strona_wyslana");
                     exit;
                      
                           }
                      
                       }

}
else
{
         $host  = $_SERVER['HTTP_HOST'];
         header("Location: http://$host/$strona_bledu");
         exit;
}
?>
cornholio666
  1. <?php
  2. header("Location: http://$host/$strona_wyslana");
  3. ?>


tutaj możesz wpisać z palca dowolny adres np:
  1. header("Location: http ://www.onet.pl");


dostosuj do swoich potrzeb.

Witaj na forum smile.gif

PS: cos BBcode wykrzacza
carpov
NIe wiem czy dobrze Cię zrozumiałem....w html tez coś mam zmienić? (mylące są te nagłówki PHP I HTML)

Już wcześniej próbowałem zaproponowanego rozwiązania. Zmieniłem w kodzie php w miejscach header (Location:..... na jakieś tam stronki i dalej to samo.
Zatrzymuje się na skrypcie formularz.php (biała strona i tyle) Dlatego napisałem sad.gif
Grzyw
  1. <?php
  2. header("Location: http://$host/$strona_wyslana");
  3. ?>


Ten fragment kodu sprawi, że przeglądarka zmieni adres na wskazany w tej funkcji.
Zauważ, że są tu wsadzone 2 zmienne: $host i $strona_wysłana. Nie masz ich nigdzie w skrypcie, więc ta funkcja tak naprawdę wygląda tak:
  1. <?php
  2. header("Location: http:///");
  3. ?>


Czyli nieprawidłowo, bo PHP nic nie wstawił w miejsce zmiennych. Ale nie musisz sugerować się wzorem, możesz na sztywno sam wpisać adres:
  1. <?php
  2. header("Location: <a href="http://jakakolwiekstrona.pl");
  3. ?>
carpov
Tak już wcześniej napisałem.....adresy wpisywane na sztywno tez nie działają.....skrypt się "wiesza" i tyle


a co do zmiennych: hosta załatwia $_SERVER['HTTP_HOST'] a strona_wysłana jest zdeklarowana powyżej..........i teraz pytanie czy aby na pewno dobrze

a co powodują te "exit'y" po każdym "header" questionmark.gifquestionmark.gif
cornholio666
Wstaw die() tak jak ja wstawilem i zobacz jaki komunikat ci sie pokazuje

  1. <?php
  2. if (PEAR::isError($error)) {
  3.  
  4. die("blad mail nie wyslany");
  5.  $host = $_SERVER['HTTP_HOST'];
  6.  
  7. header("Location: http://$host/$strona_bledu");
  8.  
  9.  
  10.  } else {
  11. die("mail wyslany");
  12.  $host = $_SERVER['HTTP_HOST'];
  13.  header("Location: http://$host/$strona_wyslana");
  14.  exit;
  15.  
  16.  }
  17.  
  18.  }
  19. ?>


a exity znaczą to exit()
-carpov-
Ki diaboł ?exclamation.gif!!

nie bangla.....ktoś to testował u siebie? staje na skrypcie php i nie przechodzi dalej -> biały ekran z napisem "mail wysłany" i nie przechodzi dalej.
Nie zależnie od tego czy zostawie w headerze zmienne host i strona_wysłana...czy wklepie na sztywną jakąś stronę.

W teorii powinno iść....jednak jest inaczej i pytanie dlaczego?

Może jakieś inne propozycje przekierowań
cornholio666
Przed skryptem umieść
  1. <?php
  2. error_reporting (E_ALL);
  3.  ini_set("display_errors","on");
  4. ?>


Zamien kod na ten:
  1. else {
  2.  
  3. header("Location: http://www.onet.pl/");
  4. die("mail wyslany");
  5.  
  6. }
dadexix
Cytat
Kod
else {

header("Location: http://www.onet.pl/");
die("mail wyslany");

}
hm? po co pisać że wysłany jak i tak wcześniej przekieruje:D?


Cytat
Kod
                } else {
                    die("mail wyslany");
                         $host  = $_SERVER['HTTP_HOST'];
                     header("Location: http://$host/$strona_wyslana");
                     exit;
                      
                           }
                      
                       }
no gratuluje:) najpierw kończysz wykonywanie skryptu a potem próbujesz wysłać nagłówek(chodz skrypt już nie wysyła się...
cornholio666
Cytat(dadexix @ 9.01.2008, 13:39:52 ) *
hm? po co pisać że wysłany jak i tak wcześniej przekieruje:D?
no gratuluje:) najpierw kończysz wykonywanie skryptu a potem próbujesz wysłać nagłówek(chodz skrypt już nie wysyła się...


no gratuluje smile.gif pierwsze piszesz posta nie czytając calej wypowiedzi


carpov pisal ze mu przekierowanie "nie dziala", wiec chciałem sprawdzić czy rzeczywiście skrypt "dochodzi" do miejsca gdzie owo przekierowanie się znajduje. Teraz mam pewność że tak. Więc jest coś nie tak z przekierowaniem

BTW co to znaczy że "skrypt już nie wysyła się..." ?
-carpov-
Więc tak......stosując sie do Twoich zaleceń cornolio

kod wyglada tak:

  1. <?php
  2. error_reporting (E_ALL);
  3.  ini_set("display_errors","on");
  4.  
  5. # tutaj nalezy podac odpowiednie parametry zmiennych:
  6. $serwer_poczty_wychodzacej = 'smtp.qqqqq.pl';
  7. $nasza_skrzynka_email = 'biuro@pqqqqqq.pl';
  8. $haslo_do_skrzynki = '1234565';
  9. $temat_wiadomosci = '=== Formularz kontaktowy ===';
  10. $nazwa_naszej_firmy = 'Firma';
  11. $strona_bledu = 'fake.html';
  12. $strona_wyslana = 'ok.html';
  13.  
  14.  
  15.  
  16. if($_POST['kto'] != '' && $_POST['mail'] != '' && $_POST['tresc'] != '')
  17. {
  18.  
  19. require_once 'Mail.php';
  20.  
  21. $params['host'] = $serwer_poczty_wychodzacej;
  22. $params['port'] = 25;
  23. $params['auth'] = true;
  24. $params['username'] = $nasza_skrzynka_email;
  25. $params['password'] = $haslo_do_skrzynki;
  26.  
  27. $headers['Subject'] = $temat_wiadomosci;
  28. $headers['From'] = $_POST['mail'];
  29. $headers['To'] = $nazwa_naszej_firmy;
  30. $headers['Content-type']='text/plain; charset=utf-8';
  31.  
  32.  
  33. $body = $_POST['kto'].' napisał/a: '.$_POST['tresc'];
  34.  
  35. $recipients = $nasza_skrzynka_email;
  36.  
  37.  
  38. $mail = Mail::factory('smtp', $params);
  39. if (PEAR::isError($error)) {
  40.  
  41. die("blad mail nie wyslany");
  42.  $host = $_SERVER['HTTP_HOST'];
  43.  
  44. header("Location: http://$host/$strona_bledu");
  45.  
  46.  
  47.  } else {
  48.  
  49. header("Location: <a href=\"http://www.onet.pl/");&#092;" target=\"_blank\">http://www.onet.pl/");</a>
  50. die("mail wyslany");
  51.  
  52. }
  53.  
  54.  }
  55. ?>



i mamy odpowiedz

  1. Notice: Undefined variable: error in /virtual/pl/formularz.php on line 39
  2.  
  3. Warning: Cannot modify header information - headers already sent by (output started at /virtual/pl/formularz.php:1) in /virtual/pl/formularz.php on line 50
  4. mail wyslany


oczywiscie maila w skrzynce NIE WIDAĆ sad.gif
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.