Formularz kontaktowy z dodawaniem plików

0

Witam

Potrzebuje formularza kontaktowego na stronie gdzie będzie możliwość przesyłania wiadomości + plik PDF

Mam taki kod:

HTML

 <form id="contact-form" method="post" action="contact.php" role="form">

    <div class="messages"></div>

    <div class="controls">

        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <label for="form_name">Imię</label>
                    <input id="form_name" type="text" name="name" class="form-control" placeholder="Proszę podać imię *" required="required" data-error="Firstname is required.">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    <label for="form_lastname">Nazwisko</label>
                    <input id="form_lastname" type="text" name="surname" class="form-control" placeholder="Proszę podać nazwisko *" required="required" data-error="Lastname is required.">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <label for="form_email">Email *</label>
                    <input id="form_email" type="email" name="email" class="form-control" placeholder="Proszę podać email *" required="required" data-error="Valid email is required.">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
	            <div class="col-md-6">
                <div class="form-group">
                    <label for="form_message">Numer oferty</label>
                    <input id="form_message" type="text" name="message1" class="form-control" placeholder="Proszę podać numer oferty *" required="required" data-error="Valid email is required.">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    <label for="form_phone">Telefon</label>
                    <input id="form_phone" type="tel" name="phone" class="form-control" placeholder="Proszę podać telefon">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
			
			<div class="col-md-6">
                <div class="form-group">
                    <label for="form_file">CV</label>
                    <input id="form_file" type="file" name="phone" class="form-control" placeholder="Proszę podać telefon">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <div class="form-group">
                    <label for="form_message">Wiadomość</label>
                    <textarea id="form_message" name="message" class="form-control" placeholder="Wpisz tekst wiadomości *" rows="4" required="required" data-error="Please,leave us a message."></textarea>
                    <div class="help-block with-errors"></div>
                </div>
            </div>
            <div class="col-md-12">
                <input type="submit" class="btn btn-success btn-send" value="Wyślij wiadomość">
            </div>
        </div>
        <div class="row">
            <div class="col-md-12">
                <p class="text-muted"><strong>*</strong> Pola wymagane</p>
            </div>
        </div>
    </div>

</form>

Mam taki kod PHP

<?php
/*
 *  CONFIGURE EVERYTHING HERE
 */

// an email address that will be in the From field of the email.
$from = 'demo <[email protected]>';

// an email address that will receive the email with the output of the form
$sendTo = 'demo <[email protected]>';

// subject of the email
$subject = 'Zgloszenie kandydatury';

// form field names and their translations.
// array variable name => Text to appear in the email
$fields = array('name' => 'Imię', 'surname' => 'Nazwisko', 'phone' => 'Telefon', 'email' => 'Email', 'message' => 'Wiadomość', 'message1' => 'Numer oferty'); 

// message that will be displayed when everything is OK :)
$okMessage = 'Dziękujemy za zgłoszenie kandydatury';

// If something goes wrong, we will display this message.
$errorMessage = 'There was an error while submitting the form. Please try again later';

/*
 *  LET'S DO THE SENDING
 */

// if you are not debugging and don't need error reporting, turn this off by error_reporting(0);
error_reporting(E_ALL & ~E_NOTICE);

try
{

    if(count($_POST) == 0) throw new \Exception('Form is empty');
            
    $emailText = "Zgłoszono kandydaturę\n=============================\n";

    foreach ($_POST as $key => $value) {
        // If the field exists in the $fields array, include it in the email 
        if (isset($fields[$key])) {
            $emailText .= "$fields[$key]: $value\n";
        }
    }

    // All the neccessary headers for the email.
    $headers = array('Content-Type: text/plain; charset="UTF-8";',
        'From: ' . $from,
        'Reply-To: ' . $from,
        'Return-Path: ' . $from,
    );
    
    // Send email
    mail($sendTo, $subject, $emailText, implode("\n", $headers));

    $responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
    $responseArray = array('type' => 'danger', 'message' => $errorMessage);
}


// if requested by AJAX request return JSON response
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $encoded = json_encode($responseArray);

    header('Content-Type: application/json');

    echo $encoded;
}
// else just display the message
else {
    echo $responseArray['message'];
}

I teraz pytanie jak połączyć tego HTML poniżej z plikiem PHP żeby ten plik rzeczywiście dodawał się do wiadomości?

          <div class="form-group">
                    <label for="form_file">CV</label>
                    <input id="form_file" type="file" name="phone" class="form-control" placeholder="CV">
                    <div class="help-block with-errors"></div>
                </div>
            </div>
0

Obawiam się, że nikt ci nie pomoże bo to całkowicie dwa odrębne pliki które nigdy nie były ze soba w jakikolwiek sposób połaczone. Więc żeby to zrobić trzeba by spedzić z godzinę czasu + jakas walidacja + plik pdf do tego = czas
Na tym forum gotowców nikt ci nie zrobi z wycinków kodu za darmo. Jezeli przeniesiesz w dział ogłoszenia to pewnie jakas dobra dusza się znajdzie ale nie za darmo. :)

0
dervill napisał(a):

Obawiam się, że nikt ci nie pomoże bo to całkowicie dwa odrębne pliki które nigdy nie były ze soba w jakikolwiek sposób połaczone. Więc żeby to zrobić trzeba by spedzić z godzinę czasu + jakas walidacja + plik pdf do tego = czas
Na tym forum gotowców nikt ci nie zrobi z wycinków kodu za darmo. Jezeli przeniesiesz w dział ogłoszenia to pewnie jakas dobra dusza się znajdzie ale nie za darmo. :)

Wysyłanie wiadomości działa więc są połączone kwestia dodania funkcji wysyłania pliku jeśli taki został załączony.

0

naucz się
https://github.com/PHPMailer/PHPMailer
i już będziesz umiał robić formularze, walidację, załączniki, komunikaty, jakieś tam bezpieczeństwo itp. bez jakiegoś kopiuj-wklej

0

Ale co mam z tym PHPMailerem zrobić jak się nauczyć z tego?

0

Myślałem że do tego kodu co mam jakoś można dopisać że jeśli ktoś doda załącznik to żeby był dodawany do wysłanej wiadomości

0

Nikt mi nie pomoże z tym? Bo nie chce odpalać całej biblioteki PHPMailer skoro tutaj formularz jest, działa tylko trzeba dorzucić wysyłanie plików jeśli są załączone.

0

Cześć!

HTML z załącznikiem powinien wyglądać tak: (usunąłem div na końcu, domknąłem input i zmieniłem jego name żeby nie kolidował z nr telefonu):

<div class="form-group">
    <label for="form_file">CV</label>
    <input id="form_file" type="file" name="attachment" class="form-control" placeholder="CV"/>
    <div class="help-block with-errors"></div>
</div>

Funkcja mail() nie pozwala na proste załączenie pliku, trzeba go dokleić do wiadomości. Wszystko pomiędzy $headers = ... i mail() musi być zastąpione czymś takim:

if(!isset($_FILES['attachment']) || !is_uploaded_file($_FILES['attachment']['tmp_name'])) {
  throw new \Exception('CV missing');
}

$content = file_get_contents($_FILES['attachment']['tmp_name']);
$content = chunk_split(base64_encode($content));

$separator =  sha1(time() . rand());

$headers = array("From: {$from}",
  "Reply-To: {$from}",
  "Return-Path: {$from}",
  "MIME-Version: 1.0",
  "Content-Type: multipart/mixed; boundary=\"{$separator}\"",
  "Content-Transfer-Encoding: 7bit",
  "This is a MIME encoded message."
);

$body = array("--{$separator}",
   "Content-Type: text/plain; charset=\"iso-8859-1\"",
   "Content-Transfer-Encoding: 8bit",
   $emailText,
  "--{$separator}",
  "Content-Type: application/octet-stream; name=\"cv.pdf\"",
  "Content-Transfer-Encoding: base64",
  "Content-Disposition: attachment",
  $content,
  "--{$separator}--"
);

mail($sendTo, $subject, implode("\r\n", $body), implode("\r\n", $headers));

Pisane z palca, mogą wystąpić błędy w składni :)

0

Bo nie chce odpalać całej biblioteki PHPMailer skoro tutaj formularz jest, działa tylko trzeba dorzucić wysyłanie plików jeśli są załączone.

No i po to właśnie warto używać gotowych bibliotek, żeby nie pisać rozwlekłego kodu jak kolega @Piotr Poźniak. Nie to, że źle Ci kolega napisał - bo ogólnie jest to stara technika ale działa :) Ale po co klepać tyle kodu, skoro załączasz bibliotekę, dodajesz tylko np. link do pliku czy dane z tablicy $_FILES i masz wszystko gotowe + obsługa błędów.

Po co wciąż ludzie chcą wyważać otwarte drzwi.. nie rozumiem tego...

0
hapertown napisał(a):

Bo nie chce odpalać całej biblioteki PHPMailer skoro tutaj formularz jest, działa tylko trzeba dorzucić wysyłanie plików jeśli są załączone.

No i po to właśnie warto używać gotowych bibliotek, żeby nie pisać rozwlekłego kodu jak kolega @Piotr Poźniak. Nie to, że źle Ci kolega napisał - bo ogólnie jest to stara technika ale działa :) Ale po co klepać tyle kodu, skoro załączasz bibliotekę, dodajesz tylko np. link do pliku czy dane z tablicy $_FILES i masz wszystko gotowe + obsługa błędów.

Po co wciąż ludzie chcą wyważać otwarte drzwi.. nie rozumiem tego...

Tak tylko że ja mam problem z załączeniem biblioteki ;)

0

Bo nie chce odpalać całej biblioteki PHPMailer skoro tutaj formularz jest, działa tylko trzeba dorzucić wysyłanie plików jeśli są załączone.

Z załączeniem biblioteki czy nie chceniem tego zrobienia? Bo już nie wiem..
Próbowałeś? Szukałeś? Sprawdzałeś? Kombinowałeś? Testowałeś? Brak danych nt. temat z Twoich postów.
Pierwszy link w google: https://github.com/PHPMailer/PHPMailer/wiki/Tutorial

Przestuiduj.. potem pisz z czym problem jest.

0

ja nawet porzuciłem phpmailera na rzecz lekkiego fw php, wtedy dostaję od razu contact formy, walidację, szyfrowanie, paginacje, przyjazne linki, nawigację, jak trzeba to mogę rozszerzyć o bazę itp. raz się naumiesz i starcza na długo, spory zakres prac masz "obstawiony" w razie coś

1 użytkowników online, w tym zalogowanych: 0, gości: 1