Dit is een topic in Community » Forum » Pro » Web ontwikkeling

PHP upload functie in HTML formulier

Lexis

Lexis op 07 november 2011 #

Hello,

Vooralsnog zit ik wat PHP skills betreft op het amateur-niveau, en ik ben nu bezig met iets wat een beetje mijn pet te boven gaat, maar ik heb door vanalles te proberen al wel een hoop geleerd. Ik hoop dat je me kunt helpen.

Ik ben een sollicitatieformulier aan het maken. Dit formulier is gewone HTML en staat in 'sollicitatie.php'.
Dit formulier wordt na het 'submitten' verwerkt door 'post.php'. In post.php wordt een email opgesteld naar het bedrijf waarbij is gesolliciteerd met alle variabelen uit het formulier, in een leuk HTML jasje.

Ik ben nu echter aan het proberen om een CV upload functie te maken. De sollicitant kan dus in het formulier zijn/haar cv uploaden (.doc, .docx en .pdf). Het CV wordt dan door post.php als attachment bij de mail gevoegd waarna de mail wordt verstuurd.

Ik loop alleen tegen wat problemen aan. Ik krijg het namelijk met pure PHP code gewoon niet voor elkaar. Ik heb al veel geklooid met $_FILES en wat dan ook, maar ik krijg het gewoon niet gedaan. Vandaar dat ik ben gaan kijken naar het Zend Framework. Ik heb mijn post.php inmiddels omgeschreven, en Zend zorgt nu dat de mail wordt verstuurd. Het toevoegen van een attachment is ook wel redelijk gelukt (ik kan een willekeurig woord in een attachment met een door mij gekozen naam krijgen).

Wat er nu overblijft is het 'oppakken' van het geuploadde bestand, en deze als attachment gebruiken in de te verzenden mail. Ik krijg het niet voorelkaar.

Mijn HTML formulier had eerst een normale upload knop, maar ik dacht als ik hier nou ook een Zend upload knop maak, dan is dat makkelijker in het Zend framework te gebruiken door middel van Zend_File_Transfer. Alleen is het zo dat ik gewoon het PHP 'Zend_form_element_file' tussen mijn HTML kan plakken? Of moet Zend dan echt het hele formulier aanmaken?

En hoe krijg ik dat geuploadde bestand (liefst naar de standaard /tmp map) dan ook echt in die email?

Wat ik nu in sollicitatie.php heb gedaan is het volgende:
<td nowrap><font face="Helvetica" size="2">Upload hier uw CV</td>
<td>
<?php
ini_set('error_reporting', E_ALL);
ini_set("error_log", "lol.log");
require_once "Zend/Form.php";
$element = new Zend_Form_Element_File('upload');
$element->setLabel('Upload uw CV');
// ensure only 1 file
$element->addValidator('Count', false, 1);
// limit to 5MB
$element->addValidator('Size', false, 5000000);
// only doc, docx and pdf
$element->addValidator('Extension', false, 'doc, docx, pdf');
$form->addElement($element, 'upload');
?>
</td>

Dat lijkt dus gewoon niet te werken...
In post.php wordt de mail verstuurd (en het attachment moet er dus nog in komen):
$mail = new Zend_Mail();
$mail->setBodyHtml($message);
$mail->setFrom('testmail@lexis.blabla', 'Van Mij');
$mail->addTo('mijnemail@email.nl');
$mail->setSubject('sollicitatie');
     $at = $mail->createAttachment(base64_encode("smurf"));
$at->type = 'plain/txt';
$at->disposition = Zend_Mime::DISPOSITION_INLINE;
$at->encoding    = Zend_Mime::ENCODING_BASE64;
$at->filename    = 'cv.nogwat';
$mail->send();

En ja, het laatste stuk codeert 'smurf' om en zet het in het bestand cv.nogwat als bijlage...

Ik hoop echt dat iemand voor wat verlichting kan zorgen. Excuses als de post iets te lang is, maar mocht je dit lezen dan ben ik erg dankbaar dat je zover bent gekomen.

Gr,

Lexis.

johnkeates op 07 november 2011 #

Nee.

Lexis

Lexis op 07 november 2011 #

Nee? Welk gedeelte niet?

Corjen op 07 november 2011 #

Iedereen is ergens begonnen!:-) Beter een lange post met veel details, dan een 2-zinnen berichtje met: 'het lukt niet'.

Over php, css, html, jquery, etc. is over het algemeen onwijs veel te vinden.

Even googlen levert o.a. op:
http://www.daniweb.com/web-development/php/threads/60795
http://www.finalwebsites.com/forums/topic/php-e-mail-attachment-script

Lexis

Lexis op 09 november 2011 #

Ja oke, ik heb er naar gekeken, maar in beide scripts wordt een vooraf bepaald bestand gebruikt. Dat is makkelijk, want je weet het pad naar dat bestand. Ik wil dus dat het bestand dat in het formulier wordt geupload wordt gebruikt in de mail. PHP zelf gebruikt dan een Tempmap, en de user mag zelf een naam voor het bestand hebben (cv.pdf of iets dergelijks). Ik weet van te voren dus niet hoe zo'n bestand heet (als de extensies maar .pdf, .doc of .docx zijn.

Deze combinatie van het form naar de verwerking maakt het voor mij dus lastig omdat ik niet weet hoe ik een bestand ophaal waar ik van te voren nog niets over weet...

Corjen op 11 november 2011 #

Zomaar een ideetje wat me te binnen schoot, maar wellicht kun je werken met een temp map die je zelf aanmaakt en aan het begin van je script, voor elke upload leegt maakt?

Script upload het bestand dus eerst naar jouw temp map, vervolgens zoek je de naam daarvan op(lijkt me dat dit te doen moet zijn) en voegt het toe als bijlage.

Geen idee of dit de makkelijkste manier is, maar wellicht het proberen waard.

Je kunt alleen reageren met een gratis OMT account.
Log in of registreer.

Inloggen

Over dit topic

Gestart op 07 november 2011 door Lexis

Laatste reactie door Corjen

Reageer op dit topic