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']}");

}
?>
Dus enkel dit:
$log_file = 'log.txt';
ook al staat die log.txt in een andere folder?

Ik heb de folder "logs" aangemaakt, en daarin htaccess en htpassw en log.txt opgeladen.
Op die url /logs/log.txt krijg ik nu 500 Internal Server Error
Log staat in de map 'log' ;-)
Ik heb geen map "log"
Ik heb de folder "logs" aangemaakt, en daarin htaccess en htpassw en log.txt opgeladen.
Op die url /logs/log.txt krijg ik nu 500 Internal Server Error

Of moet ik de map "log" heten omdat dit er staat:
function _log

Ook nog: de site heeft charset=utf-8, dus moet deze lijn ook aangepast worden?
$headers .= ($html) ? 'Content-type: text/html; charset=iso-8859-1' . "\r\n" : '';
wordt
$headers .= ($html) ? 'Content-type: text/html; charset=utf-8' . "\r\n" : '';
En deze
"Content-Type: text/plain; charset=\"iso-885\"\r\n" .
wordt
"Content-Type: text/plain; charset=\"utf-8\"\r\n" .
Correct?
Nog wat dingen:
- gotcha: bestanden ter grootte 0, dat levert mogelijk problemen met filesize() in de passage "fread($file,filesize($tmp_name));"
- het content-type van attachments staat ingesteld op $fileatt_name, waar komt deze waarde vandaan?
- validatie van form-data en attachments ontbreekt? het kan dus zijn dat er fouten zijn met uploads, maar dat wordt nergens ondervangen
- je stelt nu op twee plekken dezelfde headers in, dit moet je nog even gelijk trekken... in $message en in $headers
Dankje voor je reactie, Thomas, maar om op je vier punten te antwoorden: geen idee ...
- waar staat gotcha?
- $fileatt_name : heb ik behouden van de originele code die ik online vond
- validatie van form-data en attachments: wat is dat en hoe ziet dat beest eruit?
- bedoel je dat dit een header is:
$message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\r\n" .
"Content-Type: text/plain; charset=\"utf-8\"\r\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
Een "gotcha" is een losse kei in je code waar vaak over gestruikeld wordt :p.
Ben hier al de hele tijd aan het struikelen; zo'n keitje kan er nog bij ...
Maar we gaan niet meer vooruit!
Misschien is het eigenlijk wel eenvoudiger om de phpMailer of Switftmailer class te gebruiken, maar dan moet je wel weten hoe je het inbouwt. Je hoeft dan zelf niet met headers te klooien, plus dat je meer controle hebt over het verzend-proces van een mail, en de nodige foutmeldingen die een mailserver geeft als je direct met het SMTP babbelt.

Het is net wat je makkelijk vindt werken. Voor een beginner (als die de basis van PHP kent) zou ik het wel aanraden. Maar dan moet je wel je script omgooien.

Ik merk dat je nu ook tegen diverse dingen struikelt doordat je de nodige ervaring mist. Je kan wel wat prutsen en hopen dat het goed werkt, maar je wilt ook moeten weten wat er precies gebeurd en waarom. met prutsen zonder te weten wat er gebeurd is de kans op veiligheidslekken een stuk groter, en heb je kans dat je script een rommeltje wordt.


Snap je, Ariën.
Bestaat er dan nergens een php formulier met multiple files upload, dat voor handen ligt? Ergens online beschikbaar en gewoon te kopiëren en finetunen? Al mijn kennis komt uit trial and error, maar over dit formulier heb ik maar één code gevonden, en da's deze. En dan lukt die niet ...
Hier moet je wel wat kunnen vinden:
https://www.google.nl/search?q=php+contact+script+files+upload

Maar zoals ik al zei: 'trial and error' zonder de basiskennis te kennen, raad ik af.

Als je een script gaat zoeken op internet, let er op dat deze niet te gedateerd is en zo recent mogelijk. Er zijn helaas al genoeg lekke scripts te vinden uit 2009.

Reageren