Hey allen,

Gezien ik absoluut niks ken van php, heb ik na opzoeking een code gevonden (formulier met multiple uploads). Maar ik ben niet zeker of het solide en betrouwbaar is, want sommige klanten melden me dat ze wel op de bedankpagina komen, maar ik ontvang hun mail niet.
Kan iemand de onderstaande code nakijken en toevoegen wat nodig is om de code met een gerust hart online te plaatsen?
Dankje.

<?php

// append data to a log file
function _log($log_file,$ip,$email,$message)
{
$str = date('Y-m-d H:i:s') . " IP:$ip, EM:$email, $message\n";
file_put_contents($log_file,$str,FILE_APPEND);
}

$log_file = 'log.txt'; // log text file name

$ip = $_SERVER['REMOTE_ADDR']; // get ip to short variable name for logging purposes

$to = "[email protected]";
$subject= "inschrijving";
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$website = $_POST['website'];
$beschrijving = $_POST['beschrijving'];
$socialURL = $_POST['socialURL'];
$cmname = $_POST['cmname'];
$faciliteit = $_POST['faciliteit'];
$add = $_POST['add'];
$city = $_POST['city'];
$zip = $_POST['zip'];
$keywords1 = $_POST['keywords1'];
$keywords2 = $_POST['keywords2'];
$keywords3 = $_POST['keywords3'];
$keywords4 = $_POST['keywords4'];
$keywords5 = $_POST['keywords5'];
$keywords6 = $_POST['keywords6'];
$prijslijst = $_POST['prijslijst'];
$openingsuren = $_POST['openingsuren'];
$klikbaar = $_POST['klikbaar'];
$socialFB = $_POST['socialFB'];
$socialTW = $_POST['socialTW'];
$socialIN = $_POST['socialIN'];
$socialGP = $_POST['socialGP'];
$opmerking = $_POST['opmerking'];
$message = "
Faciliteit: $faciliteit
Naam bedrijf: $cmname
Adres: $add, $zip $city

Beschrijving:
$beschrijving

Video:
$socialURL

Kernwoorden:
$keywords1
$keywords2
$keywords3
$keywords4
$keywords5
$keywords6

Prijslijst:
$prijslijst

Openklikbare tekst:
$klikbaar

Contactpersoon: $name
Telefoon: $phone
Email: $email
Website: $website

Openingsuren:
$openingsuren

Facebook: $socialFB
Instagram: $socialIN
Twitter: $socialTW
Google Plus: $socialGP

Verdere opmerkingen:
$opmerking
";
$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}\"";
$message = "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" .
$message . "\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));
}
$message .= "--{$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";
}
}
$message.="--{$mime_boundary}--\n";
if(mail($to, $subject, $message, $headers))
{
echo "Dankje om je gegevens door te zenden.<br>We nemen die door en contacteren je zo snel mogelijk.";
_log($log_file,$ip,$email,'Mail call successful.');

} else {
echo "Error in mail.<br>Probeer opnieuw door hieronder te klikken.";
$last_error = error_get_last();
_log($log_file,$ip,$email,"Mail call failed - {$last_error['message']}");

}
?>
Ik zou de gekopiëerde variabelen van regel 16 t.m 40 lekker weghalen. Want je hebt al de beschikking over deze $_POST-variabelen, dus waarom zou je ze nog kopiëren?

Tevens zou ik eens kijken naar de headers:
http://wiki.phpbeginners.nl/index.php?title=De_juiste_mailheaders, maar vergeet niet je headers toe te voegen voor je attachments.

Dankje voor je reactie, maar alles wat tussen regel 16 en 40 staat, is de inhoud van het ingevulde formulier.

Dus dit er nog bij plakken:

// Geef GELDIGE adressen op
// Een korte benaming voor jouw website
$website_naam = 'Mijn Site';
// Jouw eigen geldige emailadres
$eigen_emailadres = 'mijn_emailadres@mijn_domein.nl';
// Een geldig emailadres voor errors
$error_emailadres = 'mijn_emailadres@mijn_domein.nl';
// De naam van de verzender
$naam_verzender = 'Afzender';
// Het geldige emailadres van de afzender
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
// Een geldig emailadres of helemaal leeg laten
$bcc_emailadres = 'geldig_emailadres@geldig_domein.nl';
// HTML mail? True/False
$html = true;

// De headers samenstellen
$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';

Maar wie is dan verzender en afzender? Dat kan ik toch niet weten wie mij een bericht stuurt?
(valt het op dat ik niks van php - en nog vele andere dingen- ken?)
Bruintje Negrito op 05/03/2018 11:23:23

Dankje voor je reactie, maar alles wat tussen regel 16 en 40 staat, is de inhoud van het ingevulde formulier.

Bijna goed. Dat is juist een kopie, en die is nergens voor nodig. In de mail kan je die $_POST-variabelen ook gewoon gebruiken.

Over je afzender en de verzender:
$naam_verzender en $email_verzender zijn de naam en het mailadres van diegene die het formulier instuurt.

Dus dit moet ik aanpassen naar mijn gegevens:
$website_naam = 'Mijn Site';
$eigen_emailadres = 'mijn_emailadres@mijn_domein.nl';
$error_emailadres = 'mijn_emailadres@mijn_domein.nl';


En wat bedoel je met $_POST-variabelen ?
Kan ik regel 16 tot 40 dan zo plaatsen:

$_POST['name'];
$_POST['phone'];
$_POST['email'];
$_POST['website'];
$_POST['beschrijving'];

(enz)

Kan je me tonen hoe het volledige script er dan zou uitzien, met je aanpassingen en toevoegingen?

[size=xsmall]Toevoeging op 05/03/2018 11:42:08:[/size]

Zoiets?

<?php

// append data to a log file
function _log($log_file,$ip,$email,$message)
{
$str = date('Y-m-d H:i:s') . " IP:$ip, EM:$email, $message\n";
file_put_contents($log_file,$str,FILE_APPEND);
}

$log_file = 'log.txt'; // log text file name

$ip = $_SERVER['REMOTE_ADDR']; // get ip to short variable name for logging purposes

$website_naam = 'Mijn Site';
$eigen_emailadres = '[email protected]';
$error_emailadres = '[email protected]';
$naam_verzender = 'Afzender';
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
$bcc_emailadres = '[email protected]';
$html = true;

$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';

$to = "[email protected]";
$subject= "inschrijving";
$_POST['name'];
$_POST['phone'];
$_POST['email'];
$_POST['website'];
$_POST['beschrijving'];
$_POST['socialURL'];
$_POST['cmname'];
$_POST['faciliteit'];
$_POST['add'];
$_POST['city'];
$_POST['zip'];
$_POST['keywords1'];
$_POST['keywords2'];
$_POST['keywords3'];
$_POST['keywords4'];
$_POST['keywords5'];
$_POST['keywords6'];
$_POST['prijslijst'];
$_POST['openingsuren'];
$_POST['klikbaar'];
$_POST['socialFB'];
$_POST['socialTW'];
$_POST['socialIN'];
$_POST['socialGP'];
$_POST['opmerking'];
$message = "
Faciliteit: $faciliteit
Naam bedrijf: $cmname
Adres: $add, $zip $city

Beschrijving:
$beschrijving

Video:
$socialURL

Kernwoorden:
$keywords1
$keywords2
$keywords3
$keywords4
$keywords5
$keywords6

Prijslijst:
$prijslijst

Openklikbare tekst:
$klikbaar

Contactpersoon: $name
Telefoon: $phone
Email: $email
Website: $website

Openingsuren:
$openingsuren

Facebook: $socialFB
Instagram: $socialIN
Twitter: $socialTW
Google Plus: $socialGP

Verdere opmerkingen:
$opmerking
";
$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}\"";
$message = "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" .
$message . "\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));
}
$message .= "--{$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";
}
}
$message.="--{$mime_boundary}--\n";
if(mail($to, $subject, $message, $headers))
{
echo "Dankje om je gegevens door te zenden.<br>We nemen die door en contacteren je zo snel mogelijk.";
_log($log_file,$ip,$email,'Mail call successful.');

} else {
echo "Error in mail.<br>Probeer opnieuw door hieronder te klikken.";
$last_error = error_get_last();
_log($log_file,$ip,$email,"Mail call failed - {$last_error['message']}");

}
?>
Die $_POST variabelen moet je in je mail-inhoud gebruiken. In die variabelen staan ook de waardes die er ingevuld zijn.

Is het niet een idee of om zelf PHP te leren? Anders lijkt me dit meer een (vrijwillige?) vacature waard als iemand dit script moet aanpassen. Dit kan in het Vacature-forum op de site. Lees wel dan even de daar geldende regels.

Even wat anders. Ik wil je er wel op attenderen dat je jouw mailadres op dit forum deelt. Ik weet niet of je hier van bewust bent, maar dit kan opgepikt worden door spam-botjes.
"Die $_POST variabelen moet je in je mail-inhoud gebruiken. In die variabelen staan ook de waardes die er ingevuld zijn." -> kan je dit toelichten, ajb? Bedoel je de id="" in html?
Dit formulier is het enige dat ik nodig heb in php; de rest van de site (html, css en js) heb ik zelf afgewerkt.
Dit is niet mijn mailadres. Maar misschien bestaat het.
Je moet de variabelen ($add, $zip, $city) die je nu gebruikt in je $message, dus vervangen door de $_POST-variabelen. Dan is je script meteen weer compacter, van ene hoop onnodig gekopieerde variabelen bevrijd.

Verder zijn je headers deels dubbel.

Als je het zelf wil aanpakken zou een tutorial PHP zeker volstaan, en anders zou ik het laten utibesteden via een topic in het Vacatureforum.
Begrepen. We zijn er dus bijna.

Ik verwijder dit:

$headers = "From: $email\r\n" .
"MIME-Version: 1.0\r\n" .


En dan wordt dit het uiteindelijk werkende formulier:

<?php

// append data to a log file
function _log($log_file,$ip,$email,$message)
{
$str = date('Y-m-d H:i:s') . " IP:$ip, EM:$email, $message\n";
file_put_contents($log_file,$str,FILE_APPEND);
}

$log_file = 'log.txt'; // log text file name

$ip = $_SERVER['REMOTE_ADDR']; // get ip to short variable name for logging purposes

$website_naam = 'Mijn Site';
$eigen_emailadres = '[email protected]';
$error_emailadres = '[email protected]';
$naam_verzender = 'Afzender';
$email_verzender = 'emailadres_van_verzender@zijn_domein.nl';
$bcc_emailadres = '[email protected]';
$html = true;

$headers = 'From: ' . $website_naam . ' <' . $eigen_emailadres . '>' . "\r\n";
$headers .= 'Reply-To: ' . $naam_verzender . ' <' . $email_verzender . '>' . "\r\n";
$headers .= 'Return-Path: Mail-Error <' . $error_emailadres . '>' . "\r\n";
$headers .= ($bcc_emailadres != '') ? 'Bcc: ' . $bcc_emailadres . "\r\n" : '';
$headers .= 'X-Mailer: PHP/' . phpversion() . "\r\n";
$headers .= 'X-Priority: Normal' . "\r\n";
$headers .= ($html) ? 'MIME-Version: 1.0' . "\r\n" : '';
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';
$headers .= ($html) ? "Content-Type: multipart/mixed;\r\n" .
$headers .= ($html) ? "boundary=\"{$mime_boundary}\"";

$to = "[email protected]";
$subject= "inschrijving";
$_POST['name'];
$_POST['phone'];
$_POST['email'];
$_POST['website'];
$_POST['beschrijving'];
$_POST['socialURL'];
$_POST['cmname'];
$_POST['faciliteit'];
$_POST['add'];
$_POST['city'];
$_POST['zip'];
$_POST['keywords1'];
$_POST['keywords2'];
$_POST['keywords3'];
$_POST['keywords4'];
$_POST['keywords5'];
$_POST['keywords6'];
$_POST['prijslijst'];
$_POST['openingsuren'];
$_POST['klikbaar'];
$_POST['socialFB'];
$_POST['socialTW'];
$_POST['socialIN'];
$_POST['socialGP'];
$_POST['opmerking'];
$message = "
Faciliteit: $_POST['faciliteit'];
Naam bedrijf: $_POST['cmname'];
Adres: $_POST['add']; $_POST['zip']; $_POST['city'];

Beschrijving:
$_POST['beschrijving'];

Video:
$_POST['socialURL'];

Kernwoorden:
$_POST['keywords1'];
$_POST['keywords2'];
$_POST['keywords3'];
$_POST['keywords4'];
$_POST['keywords5'];
$_POST['keywords6'];

Prijslijst:
$_POST['prijslijst'];


Openklikbare tekst:
$_POST['klikbaar'];


Contactpersoon: $_POST['name'];
Telefoon: $_POST['phone'];
Email: $_POST['email'];
Website: $_POST['website'];

Openingsuren:
$_POST['openingsuren'];

Facebook: $_POST['socialFB'];
Instagram: $_POST['socialIN'];
Twitter: $_POST['socialTW'];
Google Plus: $_POST['socialGP'];

Verdere opmerkingen:
$_POST['opmerking'];
";
$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x";
$message = "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" .
$message . "\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));
}
$message .= "--{$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";
}
}
$message.="--{$mime_boundary}--\n";
if(mail($to, $subject, $message, $headers))
{
echo "Dankje om je gegevens door te zenden.<br>We nemen die door en contacteren je zo snel mogelijk.";
_log($log_file,$ip,$email,'Mail call successful.');

} else {
echo "Error in mail.<br>Probeer opnieuw door hieronder te klikken.";
$last_error = error_get_last();
_log($log_file,$ip,$email,"Mail call failed - {$last_error['message']}");

}
?>

Ik durf dit niet zelf aan te pakken, want de site staat of valt met dit formulier, vandaar.
Is dit nu een multiple upload formulier dat garandeert dat ik de mails binnenkrijg (enkel nog mailadres veranderen)?
Als je het niet zelf durft, dan raad ik aan mijn vorige post te lezen.
Zonder kennis van PHP wordt het lastig om er in te werken.
Die kennis heb jij toch? Goed bezig, zou ik zeggen ;-)
Is de laatste versie ok voor je?

Reageren