Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Formularz z załącznikami
Forum PHP.pl > Forum > Przedszkole
Arteline
Witam.
Byłabym BARDZO wdzięczna jeśli ktoś mógłby mi podpowiedzieć jak dodać dodatkowe pole załącznika w skrypcie który podpinam poniżej.
Formularz
  1. <?php
  2. <form enctype="multipart/form-data" name=doit action="sendmail.php3" method=POST>
  3. <table cellpadding=0 cellspacing=0>
  4. <tr><td><b>Tob></td><td><input type="text" name="to" size=40></td></tr>
  5. <tr><td><b>Ccb></td><td><input type="text" name="cc" size=40></td></tr>
  6. <tr><td><b>Bccb></td><td><input type="text" name="bcc" size=40></td></tr>
  7. <tr><td><b>Fileb></td><td><input type=file name="attach" size=40></td></tr>
  8. <tr><td><b>Subjectb></td><td><input type="text" name="subject" size=40>
  9. </td></tr></table>
  10. <textarea name="body" rows=15 cols=50 wrap="message">
  11. </textarea>
  12. <input type="submit" name="sendmail" value="Send">
  13. ?>

sendmail
  1. <?
  2.  
  3. $mailheaders  = "Fro: $from\n";
  4. $mailheaders .= "Reply-To: $from\n";
  5. $mailheaders .= "Cc: $cc\n";
  6. $mailheaders .= "X-Mailer: PHP by www.mjs27.prv.pl\n";
  7.  
  8. $msg_body = stripslashes($body);
  9.  
  10. if ($attach != "none")
  11. {
  12.    $file = fopen($attach, "r");
  13.    $contents = fread($file, $attach_size);
  14.    $encoded_attach = chunk_split(base64_encode($contents));
  15.    fclose($file);
  16.        
  17.    $mailheaders .= "MIME-versio: 1.0\n";
  18.    $mailheaders .= "Content-typ: multipart/mixed; ";
  19.    $mailheaders .= "boundary=\"Message-Boundary\"\n";
  20.    $mailheaders .= "Content-transfer-encodin: 7BIT\n";
  21.    $mailheaders .= "X-attachment: $attach_name";
  22.  
  23.    $body_top = "--Message-Boundary\n";
  24.    $body_top .= "Content-typ: text/plain; charset=US-ASCII\n";
  25.    $body_top .= "Content-transfer-encodin: 7BIT\n";
  26.    $body_top .= "Content-descriptio: Mail message body\n\n";
  27.  
  28.    $msg_body = $body_top . $msg_body;
  29.  
  30.    $msg_body .= "\n\n--Message-Boundary\n";
  31.    $msg_body .= "Content-typ: $attach_type; name=\"$attach_name\"\n";        
  32.    $msg_body .= "Content-Transfer-Encodin: BASE64\n";
  33.    $msg_body .= "Content-dispositio: attachment; filename=\"$attach_name\"\n\n";
  34.    $msg_body .= "$encoded_attach\n";
  35.    $msg_body .= "--Message-Boundary--\n";
  36. }
  37.  
  38. mail($to, stripslashes($subject), $msg_body, $mailheaders);
  39. ?>


Marzeniem byłaby jeszcze informacja jak zablokować opcje wysyłania bez dodania choćby jednego załącznika.
webdice
Proszę o dodanie tagu w tytule tematu.
Arteline
Czyżby mój problem był aż tak trudny??
Wiele osób czytało posta, ale nikt nie podpowiedział jak temu zaradzić.
Może ewentualnie ktoś ma skrypt który przesyła wiele załączników z blokowaniem wysyłki bez załączników?questionmark.gif?
JoShiMa
Zgadyję, że chodzi Ci o wykorzystanie i obsługę pola typu <input type="file" name="zalacznik">
Arteline
Cytat(JoShiMa @ 15.09.2008, 11:02:29 ) *
Zgadyję, że chodzi Ci o wykorzystanie i obsługę pola typu <input type="file" name="zalacznik">



Dokładnie o to. W formularzu jest jeden załącznik a ja potrzebuję żeby były dwa i oba schodziły w jednym mailu. Próbowałam mieszać coś z tym skryptem, ale uparcie schodzi tylko jeden załącznik. Szczytem mojego szczęścia było by jeszcze, aby nie dało sie wysłać formularza bez choćby jednego załącznika i objawiało się to odpowiednim komunikatem typu "aby wysłać musisz dodać załącznik".
JoShiMa
Czyżby trzeba było wstawić i obsłużyć dwa pola typu <input type="file" name="attach" size=40> questionmark.gif
Arteline
Cytat(JoShiMa @ 15.09.2008, 16:00:32 ) *
Czyżby trzeba było wstawić i obsłużyć dwa pola typu <input type="file" name="attach" size=40> questionmark.gif



TAK - DOKŁADNIE TAK. Wstawiałam dokladnie taką dodatkową linię i w formularzu była opcja drugiego załącznika.
Niestety przerosła mnie przeróbka pliku "sendmail" - nadal wysyłał formularz tylko pierwszy załącznik.sad.gif

Jeszcze raz MOOOOOCNO proszę.
Jeśli ten skrypt nie jest do przerobienia to może ktoś zna jakiś spełniający moje potrzeby??
Cienki1980
Można wysłać maila z dwoma załącznikami.

Ja korzystałem przy tym z klasy activeMailLib.php Nie wiem czy to jest dalej rozwijane, jeżeli nie znajdziesz na necie to wyślij mi PW z adresem email to podeśle Ci tę klasę.
Arteline
Cytat(Cienki1980 @ 15.09.2008, 20:45:07 ) *
Można wysłać maila z dwoma załącznikami.

Ja korzystałem przy tym z klasy activeMailLib.php Nie wiem czy to jest dalej rozwijane, jeżeli nie znajdziesz na necie to wyślij mi PW z adresem email to podeśle Ci tę klasę.



Dzięki za info, ale narazie nie znalazłem opisu tej klasy.
Możesz mi powiedzieć czy jest tam możliwość zablokowania wysyłki bez dodania choć jednego załącznika??
Cienki1980
Cytat(Arteline @ 15.09.2008, 21:15:32 ) *
Możesz mi powiedzieć czy jest tam możliwość zablokowania wysyłki bez dodania choć jednego załącznika??


To trochę dziwne pytanie skoro pliki do załączników pobierasz z formularza. Jeżeli tak jest, to sprawdzasz czy przynajmniej jeden plik został wysłany ( z tablicy $_FILES[] ) , jeżeli jest to mail zostaje wysłany, jeżeli nie to nie wysyłasz i wyświetlasz stosowny komunikat.
JoShiMa
Cytat(Arteline @ 15.09.2008, 18:47:51 ) *
TAK - DOKŁADNIE TAK. Wstawiałam dokladnie taką dodatkową linię i w formularzu była opcja drugiego załącznika.
Niestety przerosła mnie przeróbka pliku "sendmail" - nadal wysyłał formularz tylko pierwszy załącznik.sad.gif

Jeszcze raz MOOOOOCNO proszę.
Jeśli ten skrypt nie jest do przerobienia to może ktoś zna jakiś spełniający moje potrzeby??


A może ta druga linijka powinna mieć inną wartość atrybutu name?
Arteline
Cytat(JoShiMa @ 16.09.2008, 10:04:28 ) *
A może ta druga linijka powinna mieć inną wartość atrybutu name?


Do tego doszłam i wyświetlało się pole drugiego załącznika.
Problem tkwi w sendmail.php - nie wiem co tam dopisać aby drugi załącznik dochodził na maila.
Skopiowanie odpowiedniej linijki i zmienienie nazwy niestety nie pomogło:(

Ludki - jestem zrospaczona. Zapłace tylko pomóżcie.
Jeszcze raz opisuje co potrzebuje.
Formulaż mailowy z opcja wysłania 2 załączników.
Brak mozliwości wysłania takiej wiadomości jeśli nie zawiera jednego załącznika
Cienki1980
klik do sciagniecia tego co potrzeba


W powyższej paczce masz wszystkie potrzebne pliki, wraz z działającym wysyłaniem maila z dwoma załącznikami.

Nie jest to gotowiec, nie ma formularza no ale na aż takiego gotowca nie ma co liczyć. Miałaś dużo podpowiedzi a nie pokazałaś ani jednej poprawki swojego kodu.

Pokaż, jak próbujesz a poszukamy razem błędów i nakierujemy na poprawne rozwiązanie.
Arteline
Cytat(Cienki1980 @ 16.09.2008, 11:50:43 ) *
Pokaż, jak próbujesz a poszukamy razem błędów i nakierujemy na poprawne rozwiązanie.


Oczywiście masz rację. Dołączam moje wypociny.
FORMULARZ
  1. <?php
  2. <form enctype="multipart/form-data" name=doit action="sendmail.php3" method=POST>
  3. <table cellpadding=0 cellspacing=0>
  4. <tr><td><b>Tob></td><td><input type="text" name="to" size=40></td></tr>
  5. <tr><td><b>Ccb></td><td><input type="text" name="cc" size=40></td></tr>
  6. <tr><td><b>Bccb></td><td><input type="text" name="bcc" size=40></td></tr>
  7. <tr><td><b>Fileb></td>
  8.  <td><input type=file name="attach" size=40 /><br /><input type=file name="attach1" size=40 /></td>
  9. </tr>
  10. <tr><td><b>Subjectb></td><td><input type="text" name="subject" size=40>
  11. </td></tr></table>
  12. <textarea name="body" rows=15 cols=50 wrap="message">
  13. </textarea>
  14. <input type="submit" name="sendmail" value="Send">
  15. ?>


SENDMAIL
  1. <?
  2.  
  3. $mailheaders  = "Fro: $from\n";
  4. $mailheaders .= "Reply-To: $from\n";
  5. $mailheaders .= "Cc: $cc\n";
  6. $mailheaders .= "X-Mailer: PHP by www.mjs27.prv.pl\n";
  7.  
  8. $msg_body = stripslashes($body);
  9.  
  10. if ($attach != "none")
  11. if ($attach1 != "none")
  12. {
  13. $file = fopen($attach, $attach1 "r");
  14. $contents = fread($file, $attach_size, $attach1_size);
  15. $encoded_attach = chunk_split(base64_encode($contents));
  16. fclose($file);
  17.  
  18. $mailheaders .= "MIME-versio: 1.0\n";
  19. $mailheaders .= "Content-typ: multipart/mixed; ";
  20. $mailheaders .= "boundary=\"Message-Boundary\"\n";
  21. $mailheaders .= "Content-transfer-encodin: 7BIT\n";
  22. $mailheaders .= "X-attachment: $attach_name";
  23. $mailheaders .= "X-attachment: $attach1_name";
  24.  
  25. $body_top = "--Message-Boundary\n";
  26. $body_top .= "Content-typ: text/plain; charset=US-ASCII\n";
  27. $body_top .= "Content-transfer-encodin: 7BIT\n";
  28. $body_top .= "Content-descriptio: Mail message body\n\n";
  29.  
  30. $msg_body = $body_top . $msg_body;
  31.  
  32. $msg_body .= "\n\n--Message-Boundary\n";
  33. $msg_body .= "Content-typ: $attach_type; name=\"$attach_name\"\n";
  34. $msg_body .= "Content-typ: $attach_type; name=\"$attach1_name\"\n";
  35. $msg_body .= "Content-Transfer-Encodin: BASE64\n";
  36. $msg_body .= "Content-dispositio: attachment; filename=\"$attach_name\"\n\n";
  37. $msg_body .= "Content-dispositio: attachment; filename=\"$attach1_name\"\n\n";
  38. $msg_body .= "$encoded_attach\n";
  39. $msg_body .= "$encoded_attach1\n";
  40. $msg_body .= "--Message-Boundary--\n";
  41. }
  42.  
  43. mail($to, stripslashes($subject), $msg_body, $mailheaders);
  44. ?>
Cienki1980
Pliki odbierane z formularza nie są przekazywane przez post tak jak zwykłe pola. Czyli $_POST['attachment'] NIE zawiera pliku. Dane te są w tablicy $_FILES. Zrób print_r($_FILES) po wysłaniu formularza i zobaczysz jakie dane tam są przechowywane. Tego używaj jako pliku który dołączasz do wiadomości.
Arteline
Widać moja edukacja jest zupełnie w lesie:(
Zapewne to jest odpowiedź na moje problemy, ale dla mnie to co napisałeś to język Suahili:(

Mógłbys wkleić odpowiednia poprawke w mój kod?? PLISS

Pełna desperacji - rozumiejąca brak czasu userów tego forum przekierowuję do działu "KUPIĘ" na MÓJ POST
Bardzo możliwe że nie macie czasu tłumaczyć laikowi, ale może ktoś będzie mógł zrobić to na spokojnie za gratyfikację.
batman
Temat zamykam. Jeśli jest ktoś chętny na wykonanie takiego skryptu odsyłam do działu kupię.

edit
Jeśli ktoś zdecyduje się na napisanie rozwiązania, to niech napisze do mnie PW, otworzę temat.
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.