Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

contactformulier met attachment

Hallo,

Ik vind het onderstaande formulier best wel mooi / handig alleen zou ik hem uit willen breiden met een upload functie voor mail attachments. hoe kan ik dit het best doen? Ik hoop dat jullie kunnen helpen.

http://webprofis.nl/contactformulier-validation#latest

Groet,
Ploegie

Reacties

  • PMPosts: 878
    Hier staat een contactform met upload functie: http://webprofis.nl/contactformulier-multiupload#latest
    Als je aangeeft welke velden er in moeten en welke niet in dit voorbeeld is dit wel makkelijk te realiseren. De opmaak zoals het andere formulier is ook aan ta passen
  • Beste Nuet,

    Dat klopt inderdaad ik heb deze ook gezien alleen deze heeft geen validatie in zich net als de andere, dacht dan is hij wat minder veilig.

    Groet,
    ploegie
  • PMPosts: 732
    Wat voor validatie wil je gebruiken op een bestand ?
    If it's not fun, you're not doing it right!
  • bewerkt wo 30 mrt 2016
    PMPosts: 6
    Vond de validatie die gebruikt was bij dit formulier wel mooi via HTML 5

    http://webprofis.nl/contactformulier-validation#latest
  • PMPosts: 732
    Oke, maar wat voor validatie wil je op de file upload dan?
    Wil je controleren op bestand type, of op grote
    If it's not fun, you're not doing it right!
  • Ah ok sorry begreep je verkeerd, eigenlijk beide je wilt niet te groot gaan maar ook geen .exe hebben bijvoorbeeld.
  • PMPosts: 878
    Dit is het aangepaste php gedeelte:
    <?php
    error_reporting(E_ALL);
    // HTML5 formulier validation: true = ja / false = nee
    $validation = true;

    // Vermeld hier je e-mail adres!
    $ontvanger = 'jouw@email.com';

    // Weergave ondewerp van ontvangen email
    $onderwerp = 'Contactformulier';

    // Vermelding indien successvol verzonden:
    $success = 'Het bericht werd succesvol verzonden.<br>Indien nodig wordt er contact met u opgenomen.';

    // Vermelding voor lege velden:
    $valid = 'Vermeld uw naam, een geldig email adres en uw vraag of opmerking a.u.b.';

    // Formulier error vermelding:
    $error = 'Onze excusses, maar er is een fout ontstaan.<br>Probeer het eventueel later opnieuw.';

    // Vermelding voor spambot:
    $spambot = 'Bewijs dat je een persoon bent en geen spambot.';

    // PHP Script - Don't edit below!
    $results = array();
    if (isset($_GET['status'])) {
    if ($_GET['status'] == "success") $results['message'] = $success;
    if ($_GET['status'] == "error") $results['message'] = $error;
    }
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (empty($_POST['email'])) {
    if(empty($_POST['naam']) || empty($_POST['e-mail']) || empty($_POST['bericht']) || !filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
    $results['message'] = $valid;
    } else {
    $body = 'Naam: '.$_POST['aanhef'].'. '.$_POST['naam']."\r\n";
    $body .= 'Website: '.$_POST['url']."\r\n";
    $body .= 'Bericht: '.$_POST['bericht'];


    /*$headers = 'MIME-Version: 1.0';*/
    /*$headers .= 'Content-type: text/html; charset=UTF-8'."\r\n";*/
    /*$headers .= 'From: '.$_POST['e-mail'];*/
    $email = $_POST['e-mail'];

    /* ------------------------------------------- */
    // bijlages opmaken
    $mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
    $headers = "From: $email\r\n"
    ."MIME-Version: 1.0\r\n"
    ."Content-Type: multipart/mixed;\r\n"
    ." boundary=\"{$mime_boundary}\"";

    $body = "This is a multi-part message in MIME format.\n\n"
    ."--{$mime_boundary}\n"
    ."Content-Type: text/plain; charset=\"iso-8859-1\"\n"
    ."Content-Transfer-Encoding: 7bit\n\n"
    .$body
    . "\n\n";

    foreach($_FILES as $userfile)
    {
    $tmp_name = $userfile['tmp_name'];
    $type = $userfile['type'];
    $name = $userfile['name'];
    $size = $userfile['size'];
    if (file_exists($tmp_name))
    {
    if(is_uploaded_file($tmp_name))
    {
    $file = fopen($tmp_name,'rb');
    $data = fread($file,filesize($tmp_name));
    fclose($file);
    $data = chunk_split(base64_encode($data));
    }

    $body .= "--{$mime_boundary}\n"
    ."Content-Type: {$type};\n"
    ." name=\"{$name}\"\n"
    ."Content-Disposition: attachment;\n"
    ." filename=\"{$fileatt_name}\"\n"
    ."Content-Transfer-Encoding: base64\n\n"
    .$data
    . "\n\n";
    }
    }
    $body.="--{$mime_boundary}--\n";
    /* ------------------------------------------- */

    $sendmail = mail($ontvanger, $onderwerp, $body, $headers);
    if ($sendmail) {
    header("Location: index.php?status=success");
    } else {
    header("Location: index.php?status=error");
    }
    }
    } else {
    $results['message'] = $spambot;
    }
    }
    ?>
    En de form ziet er nu zo uit (toegevoegd enctype in de form en bijlage veld)
    <form class="form" method="post" enctype="multipart/form-data"<?php if ($validation = false) { echo "novalidate"; } ?> action="">
    <input type="email" name="email" id="email" value="">
    <ul>
    <?php if (isset($results['message'])) { ?>
    <li class="<?php if ($_GET['status'] == "success") { echo 'success'; } else { echo 'error'; } ?>">
    <?php echo $results['message']; ?>
    </li>
    <?php } ?>
    <li>
    <label for="naam">Aanhef:</label>
    <input type="radio" name="aanhef" value="Dhr" id="dhr">
    <label for="dhr">Dhr.</label>
    <input type="radio" name="aanhef" value="Mevr" id="mevr">
    <label for="mevr">Mevr.</label>
    <input type="text" name="naam" id="naam" required placeholder="Naam contactpersoon" value="">
    </li>
    <li>
    <label for="e-mail">E-mail</label>
    <input type="email" name="e-mail" id="e-mail" required placeholder="E-mail adres">
    </li>
    <li>
    <label for="url">Website:</label>
    <input type="text" name="url" id="url" placeholder="www.uw-domein.nl">
    </li>
    <li>
    <label for="bericht">Bericht:</label>
    <textarea name="bericht" required id="bericht" placeholder="Vermeld hier uw vraag of opmerking"></textarea>
    </li>
    <li>
    <label for="bijlage">Bijlage:</label>
    <input type="file" name="bijlage" id="bijlage" />
    </li>
    <li>
    <button type="submit">Versturen</button>
    <button type="reset">Reset</button>
    </li>
    </ul>
    </form>
    ploegie
  • Thanks Nuet, zal vanavond even kijken hoe hij werkt :smiley:
  • PMPosts: 732
    Omtrent de validation:

    // Toegestaande bestand grote in KB
    $max_size = 100; // size in KB
    // Error grote
    $valid_size = 'Bestand is te groot, toegestaande grote: ' . $max_size;
    // Toegestaande bestand extensies
    $extensions = array("jpg", "jpeg", "gif", "bmp");
    // Error extensie
    $valid_extensie = 'Dit bestand is niet toegestaan, alleen: ' . implode( ',', $extensies );
    Check:

    if(empty($_POST['naam']) || empty($_POST['e-mail']) || empty($_POST['bericht']) || !filter_var($_POST['e-mail'], FILTER_VALIDATE_EMAIL)) {
    $results['message'] = $valid;
    } elseif(is_uploaded_file($_FILES['bijlage'])) {
    $file = basename($_FILES['bijlage']['name']);
    $type = substr($file, strrpos($file, '.') + 1);
    $size = $_FILES["bijlage"]["size"]/1024;
    if($size>$max_size) {
    $results['message'] = $valid_size;
    }
    $ext = false;
    for($i=0; $i<sizeof($extensions); $i++) {
    if(strcasecmp($extensions[i], $type) == 0) {
    $ext = true;
    }
    }
    if(!$ext) {
    $results['message'] = $valid_extensions;
    }
    } else {
    Tevens zou ik als er een file is geupload, andere headers gebruiken en andere body dan dat er geen file is geupload ;)
    nuetploegie
    If it's not fun, you're not doing it right!
  • Bedankt allemaal voor het mee denken ik ben erg geholpen hiermee! :)
Login of Registreer om te reageren.