Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie wyświetlają się załączniki z formularza
Forum PHP.pl > Forum > Przedszkole
rychu54
Witam! Mam stworzony formularz w php, który działa i wysyła dane na email jednak problem w tym, że w formularzu jest opcja załączenia pliku po czy gdy nastapi wysłanie danych z formularza to na poczcie np. gmail nie widać załącznika.
Kod:
  1. <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
  2.  
  3. <form action="form/send.php" method="post" id="contactform" enctype="multipart/form-data">
  4. <input type="text" name="contact_name" placeholder="Imię i nazwisko" required="required" tabindex="1" />
  5. <input type="email" name="contact_email" placeholder="Adres e-mail" required="required" tabindex="2" />
  6. <input type="file" name="plik" placeholder="Załącz pliki" multiple="multiple" required="required" tabindex="" />
  7. <textarea rows="5" columns="10" name="contact_body" placeholder="Treść wiadomości" required="required" tabindex="3"></textarea>
  8. <input type="submit" value="Wyślij" tabindex="5" />Podaj wynik: <span class="form_check_1"></span> &times; <span class="form_check_2"></span> = <input type="text" name="contact_check" maxlength="2" tabindex="4" />
  9. <input type="hidden" name="contact_check_data" value="" />
  10. </form>

send.php
  1. <?php
  2.  
  3. require_once 'class.phpmailer.php';
  4.  
  5. $_POST = array_map('trim', $_POST);
  6.  
  7. $error = false;
  8.  
  9. if (!isset($_POST['contact_name']) || empty($_POST['contact_name'])) {
  10. $error = true;
  11. }
  12.  
  13. if (!isset($_POST['contact_email']) || empty($_POST['contact_email']) || !PHPMailer::ValidateAddress($_POST['contact_email'])) {
  14. $error = true;
  15. }
  16.  
  17. if (!isset($_POST['contact_body']) || empty($_POST['contact_body'])) {
  18. $error = true;
  19. }
  20.  
  21. if (!isset($_POST['contact_check']) || empty($_POST['contact_check']) || (int) $_POST['contact_check'] !== ((int) $_POST['contact_check_data'][0] * (int) $_POST['contact_check_data'][1])) {
  22. $error = true;
  23. }
  24.  
  25. if ($error) {
  26. exit('nok');
  27. }
  28.  
  29.  
  30.  
  31. $mail = new PHPMailer();
  32. if($_FILES['plik']['error'] == UPLOAD_ERR_OK)
  33. $mail->addAttachment($_FILES['plik']['tmp_name'], $_FILES['plik']['name']);
  34. $mail->CharSet = 'UTF-8';
  35.  
  36. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  37. $mail->AddAddress('example@gmail.com');
  38. $mail->Subject = 'Wiadomość ze strony internetowej';
  39. $mail->Body = $_POST['contact_body'] . "\n\n" . $_FILES['plik']['name'];
  40.  
  41. if (!$mail->Send()) {
  42. exit('nok');
  43. }
  44.  
  45. exit('ok');
kristaps
  1. [...]
  2.  
  3. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  4. $mail->AddAddress('example@gmail.com');
  5. $mail->Subject = 'Wiadomość ze strony internetowej';
  6. $mail->Body = $_POST['contact_body'] . "\n\n" . $_FILES['plik']['name'];
  7.  
  8. if (!$mail->Send()) {
  9. exit('nok');
  10. }
  11.  
  12. exit('ok');


Dlaczego dodajesz załącznik do Body? $mail->AddAttachment z tego co pamiętam.
rychu54
Czyli jak mam to przeprawić?
kristaps
Przecież wszystko Ci napisałem. Wygoogluje za Ciebie:
  1. $mail->AddAttachment("./plik.zip", "nowa_nazwa.zip");
  2.  
  3. // Gdzie "./plik.zip" to ścieżka do pliku, który chcemy wysłać a "nowa_nazwa.zip" to nowa nazwa pliku

a z $mail->Body wywal ten załącznik.
rychu54
Zrobiłem tak:
  1. [...]
  2.  
  3. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  4. $mail->AddAddress('example@gmail.com');
  5. $mail->Subject = 'Wiadomość ze strony internetowej';
  6. $mail->Body = $_POST['contact_body'];
  7. $mail->AddAttachment("./plik.zip", "nowa_nazwa.zip");
  8.  
  9. if (!$mail->Send()) {
  10. exit('nok');
  11. }
  12.  
  13. exit('ok');
kristaps
No tak, ale zamiast "./plik.zip" daj $_FILES['plik']['name'].
rychu54
Dalej nie wyświetla załącznika na gmailu. Tutaj mam spakowany formularz: http://www.sendspace.pl/file/136b5437303decbb0f7e0f8 może przetestujesz u siebie?
kristaps
Sprawdź czy $files w ogóle coś zawiera. Ewentualnie ustaw ścieżkę na sztywno i zobacz, czy wtedy dojdzie wiadomość z załącznikiem, jeśli tak pokombinuj z $_FILES['plik']['name'], $_FILES['plik']['tmp_name'].

Edit: Teraz zauważyłem i potwierdziło się to co napisałem wyżej:

  1. $mail = new PHPMailer();
  2. if($_FILES['plik']['error'] == UPLOAD_ERR_OK)
  3. $mail->addAttachment($_FILES['plik']['tmp_name'], $_FILES['plik']['name']);
rychu54
Nie mam pojęcia. Jestem początkujący w php i nie rozumiem go jeszcze w pełni.

To jak mam to poprawić?

@kristaps Pomożesz jeszcze?
Turson
  1. print_r($_FILES);
rychu54
Gdzie mam to dodać?
Turson
Przed wysłaniem maila
  1. print_r($_FILES);
rychu54
Tzn w której linijce kodu?
Turson
Rozbrajasz mnie, nie wiesz gdzie wyprintować tablicę a bierzesz się za maile ohmy.gif
np w 2.
rychu54
No dobrze, jak dodam ten kod od ciebie do formularza z paczki to będzie działać?
Turson
Po prostu wklej to tam, a rezultat, który wyświetli się na stronie wklej na forum
rychu54
Formularz wywala błąd.
rad11
"formularz wywala blad" otrzymujesz na stronie?
rad11
A dodales do kodu tak jak prosil Turson ?
rychu54
Tak:
  1. <?php
  2. print_r($_FILES);
  3. require_once 'class.phpmailer.php';
  4.  
  5. $_POST = array_map('trim', $_POST);
  6.  
  7. $error = false;
  8.  
  9. if (!isset($_POST['contact_name']) || empty($_POST['contact_name'])) {
  10. $error = true;
  11. }
  12.  
  13. if (!isset($_POST['contact_email']) || empty($_POST['contact_email']) || !PHPMailer::ValidateAddress($_POST['contact_email'])) {
  14. $error = true;
  15. }
  16.  
  17. if (!isset($_POST['contact_body']) || empty($_POST['contact_body'])) {
  18. $error = true;
  19. }
  20.  
  21. if (!isset($_POST['contact_check']) || empty($_POST['contact_check']) || (int) $_POST['contact_check'] !== ((int) $_POST['contact_check_data'][0] * (int) $_POST['contact_check_data'][1])) {
  22. $error = true;
  23. }
  24.  
  25. if ($error) {
  26. exit('nok');
  27. }
  28.  
  29.  
  30.  
  31. $mail = new PHPMailer();
  32. if($_FILES['plik']['error'] == UPLOAD_ERR_OK)
  33. $mail->addAttachment($_FILES['plik']['tmp_name'], $_FILES['plik']['name']);
  34. $mail->CharSet = 'UTF-8';
  35.  
  36. $mail->SetFrom($_POST['contact_email'], $_POST['contact_name']);
  37. $mail->AddAddress('example@gmail.com');
  38. $mail->Subject = 'Wiadomość ze strony internetowej';
  39. $mail->Body = $_POST['contact_body'];
  40. $mail->AddAttachment($_FILES['plik']['name'], "nowa_nazwa.zip");
  41.  
  42.  
  43. if (!$mail->Send()) {
  44. exit('nok');
  45. }
  46.  
  47. exit('ok');
Turson
Przecież dodałeś to do pliku, który jest wykonywany dopiero po naciśnięciu submita, więc błąd w formularzu tyczy się czegoś innego.
rychu54
No tylko co to może być bo ja nie mam już sił. Chyba po prostu zlecę taki formularz. Jakie były by to koszta?
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.