Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wysyłanie formularza z załącznikiem, Jak złączyć wysyłanie załącznika z innym formularzem php
marekpb
post 28.04.2009, 17:09:05
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 3.09.2007
Skąd: Kraków

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


Witam. Uczę się PHP robiąc różne strony formularze itp. Napotkałem taki problem, który nie mogę rozwiązać. Mam formularz i kod php do wysyłania wiadomości email:


  1. <?php
  2. ...
  3. // sprawdzamy, czy zmienne przesłane z formularza nie są puste
  4. elseif (!empty($_POST['typ']) && !empty($_POST['typ2']) && !empty($_POST['typ3']) && !empty($_POST['powierzchnia']) && !empty($_POST['pokoje']) && !empty($_POST['miejscowosc']) &&
  5. !empty($_POST['dzielnica']) && !empty($_POST['ulica']) && !empty($_POST['typ4']) && !empty($_POST['rok']) && !empty($_POST['cena']) && !empty($_POST['opis']) ) {
  6.    // jeżeli powyższy warunek jest spełniony tworzona jest wiadomość
  7.    // zmienna $message zawiera treść wiadomości
  8.    $message = &#092;"Typ: $_POST[typ]\nTyp: $_POST[typ2]\nRodzaj: $_POST[typ3]\nPowierzchnia: $_POST[powierzchnia]\nIlość pokoi: $_POST[pokoje]\nMiejscowość: $_POST[miejscowosc]\nDzielnica: $_POST[dzielnica]\nUlica: $_POST[ulica]\nOpis:\n$_POST[opis]\";
  9.    // zmienna $header zawiera przede wszystkim adres zwrotny
  10.    $header = &#092;"From: $_POST[imie] <$_POST[email]>\";
  11.    // funkcja mail() za pomocą której wiadomość zostanie wysłana
  12.    @mail(&#092;"dsasda@gmail.com\",\"Wiadomosc ze strony WWW\",\"$message\",\"$tresc\", \"$header\")
  13.    or die('Nie udało się wysłać wiadomości');
  14.    // wyświetlenie komunikatu w przypadku powodzenia
  15.    echo &#092;"Wiadomość została wysłana poprawnie!
  16.  
  17. &#092;";
  18. }
  19. // lub w przypadku nie wypełnienia formularza do końca
  20. else echo &#092;"Wypełnij wszystkie pola formularza!
  21.  
  22. &#092;";
  23. ...
  24. ?>


I tutaj pojawia się problem, chciałem aby wysyłało mi załącznik do tego maila. Na pewnej stronce znalazłem taki kod dzięki któremu jest możliwe wysyłanie załącznika, lecz odbywa sie to poprzez wysyłanie nowej wiadomości, a ja chciałbym na tej samej co mam kod powyższy. Czy ktoś może mi powiedzieć jak połączyć poniższy kod z tym powyższym żeby działało ? Próbowałem już na kilka sposobów, lecz bez rezultatów. Czy ktoś może mi napisać ten kod ? Lub chciarz naprowadzić, bo nie do końca go rouzmiem ? Wierzę, że znajdzie się ktoś na tym forum kto zechce mi pomóc. Będę wdzięczny za odpowiedź. Pozdrawiam. Oto kod do wysyłania maila z załącznikiem:

  1. <?php
  2. //sprawdzenie czy załącznik pochodzi z formularza  
  3.  if ($_POST[&#092;"wyslij\"]==1)  
  4.  {  
  5.  srand((double)microtime()*1000000);  
  6.  $znacznik = md5(uniqid(rand()));  
  7.    
  8.  // dane o odbiorcy, nadawcy  
  9.  $odbiorca=&#092;"nazwa-twojego-maila@domena.pl\";  
  10.  $tytul=&#092;"Mail z zalaczniekiem\";  
  11.  $nadawca = &#092;"Mail ze strony\";  
  12.  $nadawca_mail=&#092;"mail-ze-strony@domena.pl\";  
  13.    
  14.  // treść listu  
  15.  $tresclistu = &#092;"tutaj piszesz całą treść maila\";  
  16.    
  17.  // definicja nagłówków  
  18.    $naglowki  = &#092;"From: $nadawca <$nadawca_mail>\n\";  
  19.    $naglowki .= &#092;"MIME-Version: 1.0\n\";  
  20.    $naglowki .= &#092;"Content-Type: multipart/mixed;\n\";  
  21.    $naglowki .= &#092;"\tboundary=\"___$znacznik==\"\";  
  22.    
  23.  // nagłówki listu  
  24.    $tresc=&#092;"--___$znacznik==\n\";  
  25.    $tresc .=&#092;"Content-Type: text/plain; charset=\"iso-8859-2\"\n\";  
  26.    $tresc .=&#092;"Content-Transfer-Encoding: 8bit\n\";  
  27.    $tresc .=&#092;"\n$tresclistu\n\";  
  28.    
  29.  // nagłówki i obsługa załącznika  
  30.    $plik_nazwa_tmp = $_FILES[&#092;"plik1\"][\"tmp_name\"];  
  31.    $plik_nazwa_oryginalna = $_FILES[&#092;"plik1\"][\"name\"];  
  32.    $plik_wielkosc = $_FILES[&#092;"plik1\"][\"size\"];  
  33.    
  34.  if (is_uploaded_file($plik_nazwa_tmp))  
  35.    {  
  36.      $tresc .=&#092;"--___$znacznik==\n\";  
  37.      $tresc .=&#092;"Content-Type: image/gif\n\";  
  38.      $tresc .=&#092;"Content-Disposition: attachment;\n\";  
  39.      $tresc .=&#092;" filename=\"$plik_nazwa_oryginalna\"\n\";  
  40.      $tresc .=&#092;"Content-Transfer-Encoding: base64\n\n\";  
  41.      $f = fopen($plik_nazwa_tmp,&#092;"rb\");  
  42.      $dane = fread($f,filesize($plik_nazwa_tmp));  
  43.      fclose($f);  
  44.      $tresc .= chunk_split(base64_encode($dane));  
  45.      $tresc .=&#092;"--___$znacznik==--\n\";  
  46.    }  
  47.    
  48.  // wysłanie listu  
  49.       if (mail($odbiorca,$tytul,$tresc,$naglowki))  
  50.     {  
  51.     print &#092;"E-mail z załącznikiem został wysłany poprawnie.\";  
  52.     }  
  53.     else  
  54.     {  
  55.     print &#092;"E-mail NIE został wysłany poprawnie.  
  56.    
  57. Prosimy o [url="%5C%22java script:history.back%28%29;%5C%22"]powrót[/url] i wysłanie e-maila ponownie.&#092;";  
  58.     }  
  59.  }  
  60.  ?>


Ten post edytował marekpb 25.05.2009, 08:32:35
Go to the top of the page
+Quote Post
osl
post 29.04.2009, 12:04:18
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 41
Dołączył: 6.04.2009
Skąd: Gdańsk/okolice

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


zasadniczo poczytaj o strukturze wiadomości mejlowych. Dokładniej o tym, jak, po co i dlaczego są najczęściej wysyłane jako wiadomości 'wieloczęściowe' - wiadomość dochodzi jedna, ale ma w sobie zaszytych kilka części.

poczytaj zwłaszcza komentarze odnośnie funkcji mail() na php.net - na podstawie tego możesz zrobić praktycznie wszystko, co jest w mailach możliwe.
I uważaj na znaki nowej linii, to może straszliwie krwi napsuć smile.gif

P.S. A jakby zdarzyło Ci się zwątpić, skorzystaj z Swift Mailer - na podstawie jego bibliotek każdy mail to ledwie kilka linijek smile.gif
Go to the top of the page
+Quote Post
marekpb
post 2.05.2009, 10:43:40
Post #3





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 3.09.2007
Skąd: Kraków

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


OK. Uporałem się z tym. Dostosowałem ten drugi kod do moich potrzeb. Jednakże pojawił się nowy problem. A mianowicie, nie wiem jak wysłać drugi załącznik (oczywiście w tym samym mailu). Co muszę z robić z poniższym kodem ? Próbowałem powielić (zmieniłem wtedy plik1 na plik2), dopisać do niego drugi załącznik i nic. Może ktoś pomóc ?

  1. <?php
  2. ...
  3. // nagłówki i obsługa załącznika  
  4.   $plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];  
  5.   $plik_nazwa_oryginalna = $_FILES["plik1"]["name"];  
  6.   $plik_wielkosc = $_FILES["plik1"]["size"];  
  7.  
  8. if (is_uploaded_file($plik_nazwa_tmp))  
  9.   {  
  10.     $tresc .="--___$znacznik==\n";  
  11.     $tresc .="Content-Type: image/gif\n";  
  12.     $tresc .="Content-Disposition: attachment;\n";  
  13.     $tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";  
  14.     $tresc .="Content-Transfer-Encoding: base64\n\n";  
  15.     $f = fopen($plik_nazwa_tmp,"rb");  
  16.     $dane = fread($f,filesize($plik_nazwa_tmp));  
  17.     fclose($f);  
  18.     $tresc .= chunk_split(base64_encode($dane));  
  19.     $tresc .="--___$znacznik==--\n";  
  20.   }  
  21. ...
  22. ?>


Witam. Sorry, że post pod postem ale chciałem odświeżyć temat. Pomoże ktoś z tym jak wysyłać 2 lub więcej załączników w jednym mailu ? Nie mogę się z tym sam uporać. Będę wdzięczny za pomoc. Z góry dzięki.

Ten post edytował marekpb 29.04.2009, 16:43:52
Go to the top of the page
+Quote Post
-Gość-
post 17.04.2011, 12:27:44
Post #4





Goście







Witam. Marekpb możesz mi wkleić ten kod po przerobieniu bo ja sobie nie mogę z nim poradzić. Z góry dziękuję
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 23:39