[php] Contact formulier met file upload

Status
Niet open voor verdere reacties.

Icemar

Steunend lid
Vip Lid
De meeste weten wel hoe ze een website kunnen maken maar dan is het vaak wel handig om er een contact formulier bij te hebben.
Deze heb ik voor jullie gemaakt en mogen jullie zelf aanpassen voor eigen gebruik.
Mochten er vragen over zijn dan kunnen we je altijd helpen om een oplossing te geven voor het probleem

Voor dit contact formulier moet je wel beschikken over php bij de webhost dus bij telenet en degelijke zal dit contact formulier niet werken.

Er was een verzoek van 1 van de leden hoe ze een bestand in een contact formulier konden meesturen aan aanleding van dat bericht heb ik er aangepaste versie gemaakt van het contact formulier met file upload.


PHP:
<?php

/** 
 * what: Contact form white file upload
 * What: Actions submit en controle and file upload 
 * @Auhor: Buttelflyice 
 * Date : 12-02-2012 
 * Don't remove this !! 
 */ 


// Welke types wil je ontvangen 
$types = array("zip", "rar", "txt", "doc", "jpg", "png", "gif", "odt", "xml");

// Je emailadres.
$emailAdres = "info@dowekido.nl";

// Welke prioriteit stel je aan de mail? 1 (Highest), 2 (High), 3 (Normal), 4 (Low), 5 (Lowest).
$priority = "3"; 

//Hoeveel bijlage moeten ze meesturen
$attachmentTotal = "2"; 

// File grote in kb
// 2048kb = 2MB,       1024kb = 1MB,     512kb = 1/2MB etc..
$maxFileSize = "1024";

// Total bijlage grote 
// 2048kb = 2MB,       1024kb = 1MB,     512kb = 1/2MB etc..
$maxFileTotal = "2048";


// Standaard tekst indien niets is ingevuld
$defaultSubject = "Email van uit website"; 

// Bedankt bericht
$thanxMessage = "Bedankt voor uw bericht";

/*
//================================================================================
// ! Belanrijk hier onder niets aanpassen !
//================================================================================
*/

// Function om de extentie op te halen.
function getExt($key) { 
	$key = strtolower(substr(strrchr($key, "."), 1));
	$key = str_replace("jpeg", "jpg", $key);
	return $key;
}

// Function voor de bijlage in de mail toe te voegen
function mailAttachment($file, $name, $boundary) {
	
	$fp      = fopen($file, "r");
	$str     = fread($fp, filesize($file));
	$str     = chunk_split(base64_encode($str));
	$message = "--".$boundary."\n";
	$message .= "Content-Type: application/octet-stream; name=\"". $name ."\"\n";
	$message .= "Content-disposition: attachment; filename=\"". $name ."\"\n"; 
	$message .= "Content-Transfer-Encoding: base64\n";
	$message .= "\n";
	$message .= "$str\n";
	$message .= "\n";

	return $message;
}

// Beveiling voor zinloze  teksten
function cleanMsg($key) {
	$key  = str_replace("\r", "", $key);
	$key  = str_replace("\n", "", $key);
	$find = array(
		"/bcc\:/i",
		"/Content\-Type\:/i",
		"/Mime\-Type\:/i",
		"/cc\:/i",
		"/to\:/i"
	);
  $key = preg_replace($find, "", $key);
  return $key;
}

// Variable zetten
$error = "";
$sentMail = false;

// When the form is submitted
if($_POST['submit'] == true ) {
	extract($_POST, EXTR_SKIP);

		// Controler het forumlier op fouten
		if(trim($yourName) == "") { 
			$error .= "You did not enter your name!<br />";
		}
		
		if(trim($yourEmail) == "") { 
			$error.="You did not enter your email!<br />";
		} elseif(!preg_match("/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/", $yourEmail)) {
			$error .= "Invalid email address.<br />";
		}

		if(trim($emailSubject) == "") {
			$emailSubject = $defaultSubject;
		}

		if(trim($yourMessage) == "") { 
			$error .= "You did not enter a message!<br />";
		}
		
		// Contoleer de bijlage
		if($attachmentTotal > 0) {
			
			// Contoleer de totale bijlage in file grote
			if((array_sum($_FILES['attachment']['size'])) > ($maxFileTotal * 1024)) {
				
				$error .= "The max size allowed for all your files is ".$maxFileTotal."kb<br />";
				
			} else {

				//Controleer elke file 
				for($i = 0; $i <= $attachmentTotal-1; $i++) {
					
					if($_FILES['attachment']['name'][$i]) {
	
						//Controler of het file type mag. 
						if(!in_array(getExt($_FILES['attachment']['name'][$i]), $types)) {
							
							$error.= "Invalid file type for your file: ".$_FILES['attachment']['name'][$i]."<br />";
							
						//Contoleer de file grote
						} elseif(($_FILES['attachment']['size'][$i]) > ($maxFileSize * 1024)) {
							
							$error.= "Your file: ".$_FILES['attachment']['name'][$i]." is to big.<br />";
							
						} // if in_array
						
					} // if Files
					
				} // For
				
			} // else array_sum($_FILES['attachment']['size'])
			
		} // if attachmentTotal

	if($error) {
	
		$displayMessage = $error;

	} else {		

		$boundary  =md5(uniqid(time()));
		
		//Headers
		$headers  = "Return-Path: <".cleanMsg($yourEmail).">\n";
		$headers .= "From: ".cleanMsg($yourName)." <".cleanMsg($yourEmail).">\n";
		$headers .= "X-Mailer: PHP/".phpversion()."\n";
		$headers .= "X-Sender: ".$_SERVER['REMOTE_ADDR']."\n";
		$headers .= "X-Priority: ".$priority."\n"; 
		$headers .= "MIME-Version: 1.0\n";
		$headers .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
		$headers .= "This is a multi-part message in MIME format.\n";

		//Bericht
		$message  = "--".$boundary."\n";
		$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
		$message .= "Content-Transfer-Encoding: quoted-printable\n";
		$message .= "\n";
		$message .= cleanMsg(nl2br(strip_tags($yourMessage)));
		$message .= "\n";

		//Voeg bijlages toe aan bericht
		if($attachmentTotal > 0) {
			
			for($i = 0; $i <= $attachmentTotal-1; $i++) {
				
				if($_FILES['attachment']['tmp_name'][$i]) {
					
					$message .= mailAttachment($_FILES['attachment']['tmp_name'][$i], $_FILES['attachment']['name'][$i], $boundary);
					
				} //if $_FILES['attachment']['name'][$i]
				
			} //for
			
		} // if
		
		// Einde bericht
		$message .= "--".$boundary."--\n";
		
		// Verstuur het complete bericht
		if(!mail($emailAdres, cleanMsg($emailSubject), $message, $headers)) {
			
			Exit("An error has occured, please report this to the website administrator.\n");
			
		} else {
		
			$sentMail = true;
			
		}

	} // else

} // $_POST

/*
//================================================================================
// Start the form layout
//================================================================================
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Contact form</title>

<style type="text/css">
	body {
		background-color:#FFFFFF;
		font-family: Verdana, Arial, sans-serif;
		font-size: 11pt;
		color: #000000;
	}
	
    a , a:link , a:visited , a:hover {
		text-decoration:none;
		color: #000000;
	}
	
	
	.table {
		border-collapse:collapse;
		border:1px solid #000000;
		width:500px;
	}
	
	.tableheader{
		background-color:#eee;		
		font-weight:bold;
		color: #FFFFFF;
		text-align:center;
		padding:2px;
	}
	
	.attachinfo , .tablebody , .tablefooter , tableheader {
		border:1px solid #070707;
		background-color:#eee;
		font-size: 8pt;
		padding:4px;
	}
	
	
	.tablebody{
		font-size: 10pt;
		padding:2px;
	}
	
	.tablefooter{
		text-align:center;
		padding:2px;
	}
	
	input,select,textarea {
		font-size: 10pt;
		background-color:#ccc;
		border:1px solid #000000;
	}
	

	form{
		padding:0px;
		margin:0px;
	}

    .errormessage{
		color: #FF0000;
	}
	
	.thanksmessage{
		color: #000000;
	}
</style>

<script type="text/javascript">
var error = "";
e_regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;

function Checkit(theform) {
	if(theform.yourName.value=="") {
		error+="Je heb je naam niet ingevuld\n";
	}
	
	if(theform.yourEmail.value=="") {
		error+="Je heb geen email in gevuld\n";
	} else if(!e_regex.test(theform.yourEmail.value)) {
		error+="Het is geen geldig email\n";
	}
		
	if(theform.yourMessage.value=="") {
		error+="Je bent vergeten een bericht in te vullen\n";
	}
	
	if(error) {
		alert('**Het formulier geeft de volgende fouten terug:**\n\n' + error);
		error = "";
		return false;
	} else {
		return true;
	}
}
</script>

</head>
<body>
<?php if($displayMessage) {?>

<div align="center" class="errormessage"><b><?php $displayMessage;?></b></div>
<br />

<?php }?>

<?php if($sentMail != true) {?>

<form method="post" action="contact.php" enctype="multipart/form-data" name="phmailer" onsubmit="return Checkit(this);">
<table align="center" class="table">	
	<?php  if($attachmentTotal > 0) {?>
		<tr>
			<td width="100%" class="attachinfo" colspan="2">
				<b>Toegestane file types:</b> <?php echo implode($types, ", ");?><br />
				<b>Max grote per file:</b> <?php echo  $maxFileSize ?>kb.<br />
				<b>Max totale grote van de bijlages:</b> <?php echo $maxFileTotal ?>kb.
			</td>
		</tr>
	<?php  } ?>
	
	<tr>
		<td width="30%" class="tablebody">Naam:</td>
		<td width="70%" class="tablebody"><input name="yourName" type="text" size="30" value="" /><span class="errormessage">*</span></td>
	</tr>
	<tr>
		<td width="30%" class="tablebody">Email:</td>
		<td width="70%" class="tablebody"><input name="yourEmail" type="text" size="30" value="" /><span class="errormessage">*</span></td>
	</tr>
	<tr>
		<td width="30%" class="tablebody">Onderwerp:</td>
		<td width="70%" class="tablebody"><input name="emailSubject" type="text" size="30" value="" /></td>
	</tr>

	<?php for($i = 1;$i <= $attachmentTotal; $i++) { ?>
		<tr>
			<td width="30%" class="tablebody">Bijlage:</td>
			<td width="70%" class="tablebody"><input name="attachment[]" type="file" size="30" /></td>
		</tr>
	<?php } ?>
	
	<tr>
		<td colspan="2" width="100%" class="tablebody">Bericht:<span class="errormessage">*</span><br />
			<div align="center">
				<textarea name="yourMessage" rows="8" cols="60"></textarea>
			</div>
		</td>
	</tr>
	<tr>
		<td colspan="2" width="100%" class="tablefooter">
			<input type="hidden" name="submit" value="true" />
			<input type="submit" value="Verzenden" />  
			<input type="reset" value="reset" />
		</td>
	</tr>
</table>
</form>


<?php }
    if($sentMail == true) {
       echo $thanxMessage;
    }    

?>

Mochten er vragen zijn dan horen we dat graag.
 

cas44

PCT Lid
Dank voor de hulp.
Het lukt niet deze code in te voegen in het bestaande formulier. In het formulier zou ik nog een mogelijkheid plaatsen om bvb 2 foto's te uploaden voor verzenden samen met formulier.
Het formulier staat op Belgian Flatcoated Retriever Club onder de link 'Formulier Herplaatsen Flat'
Actie : mail1.PHP methode : POST

mail1.PHP


PHP:
<?
/* 	
	mail.php - versie 1.3 (20051010)
	Jimmy Cappaert <jimmy@priorweb.be>
	[url=http://www.priorweb.be]PriorWeb - Uw betrouwbare hostingpartner[/url]

	Wijziging versie 1.3
	- veldcontrole is nu configureerbaar per veld ($BODY_FIELDS_CHECK)
	- veldspecifiëring is aangepast ($BODY_FIELDS)
		-Cedric Dubois <cedric.dubois@priorweb.be>

	Wijzigingen versie 1.2
	- mogelijkheid om veldcontrole uit te schakelen
	- na het versturen de pagina forwarden naar een andere pagina ipv een melding te geven
		-Jimmy Cappaert <jimmy.cappaert@priorweb.be>

	Deze code heeft als doel te fungeren als een mailer voor een HTML-formulier.
	U kan deze file specifiëren in de ACTION van uw HTML-formulier. 
*/

ob_start();

//	INVULSECTIE 
//	GELIEVE DIT EERST IN TE VULLEN ALVORENS HET FORMULIER IN GEBRUIK TE NEMEN

//	Het adres naar waar de e-mail moet afgeleverd worden (verplicht)
//	Dit kan in 2 vormen: Uw naam <uw@adres.be> of gewoon [email]uw@adres.be[/email].
$HEADER_TO ="Anne <anne@bfrc.be>";
//	Het adres waar een CC van de e-mail moet afgeleverd worden (niet verplicht)
$HEADER_CC = "Cor <webmaster@bfrc.be>";
//	Het adres waar een BCC van de e-mail moet afgeleverd worden (niet verplicht)

$HEADER_FROM = "priorMailer <webmaster@bfrc.be>";
//	Het onderwerp van de e-mail
$HEADER_SUBJECT = "HERPLAATSEN FLAT";

//	Tip: je kan hier altijd een file includen om eventuele tekstopmaak in te plaatsen.
//	Includen kan op volgende manier: include("../Hoofdmappen/bestandsnaam.php");
//	Je kan ook HTML code in de variablen zetten. (bv linebreaks, fonts, ...)

//	Naam en beschrijving van de velden die verstuurd moeten worden	
//	Bv array('naam'=>'Naam', 'voornaam'=>'Voornaam'); <input name="Submit" type="submit" class="style1" onclick="MM_validateForm('Naam hond','','R','Geslacht','','R','Kleur','','R','Stamboeknr','','R','Geboortedatum','','R','Fokker','','R','Vader','','R','Moeder','','R','Eigenaar','','R','Adres','','R','aantal eten','','R','totaal eetmaal','','R','eten optelling','','R','algemeen totaal
$BODY_FIELDS = array('Naam_van_de_hond'=>'Naam_van_de_hond', 'Geslacht'=>'Geslacht','Gesteriliseerd_of_gecastreerd'=>'Gesteriliseerd_of_gecastreerd','Geboortedatum'=>'Geboortedatum','Stamboom'=>'Stamboom','Fokker'=>'Fokker','Vader'=>'Vader','Moeder'=>'Moeder','Eigenaar'=>'Eigenaar','Straat'=>'Straat','Nr'=>'Nr','Postnr'=>'Postnr','Gemeente'=>'Gemeente','Naam_contact'=>'Naam_contact','Telefoon'=>'Telefoon','email'=>'email','Telefoon_contact'=>'Telefoon_contact','email_contact'=>'email_contact' ,'Reden'=>'Reden','Karakter_hond'=>'Karakter_hond','Andere_inlichtingen'=>'Andere_inlichtingen',);
//	Tekst die bovenaan (boven de velden) van de e-mail moet staan. Gebruik \n voor een nieuwe lijn.
$BODY_HEADER = "HERPLAATSEN FLAT";
//	Tekst die onderaan (onderaan de velden) van de e-mail moet staan. Gebruik \n voor een nieuwe lijn.
$BODY_FOOTER = "Einde van het bericht.";
//	Moet het IP-adres van de verzender van het formulier mee verzonden worden? (1 = ja / 0 = neen)
$BODY_SHOWIP = 1;

//      Controle of de velden allemaal werden ingevuld? (1 = ja / 0 = neen)
$RESULT_DOCHECK = 0;
//	Indien u enkel bepaalde velden wenst te controleren, geef deze hier op en vul
//	hierboven 0 in ($RESULT_DOCHECK = 0;)
$BODY_FIELDS_CHECK = array('Naam_van_de_hond'=>'Naam_van_de_hond', 'Geslacht'=>'Geslacht','Gesteriliseerd_of_gecastreerd'=>'Gesteriliseerd_of_gecastreerd','Geboortedatum'=>'Geboortedatum','Stamboom'=>'Stamboom','Fokker'=>'Fokker','Vader'=>'Vader','Moeder'=>'Moeder','Eigenaar'=>'Eigenaar','Straat'=>'Straat','Nr'=>'Nr','Postnr'=>'Postnr','Gemeente'=>'Gemeente','Naam_contact'=>'Naam_contact','Telefoon'=>'Telefoon','email'=>'email','Telefoon_contact'=>'Telefoon_contact','email_contact'=>'email_contact' ,'Reden'=>'Reden','Karakter_hond'=>'Karakter_hond','Andere_inlichtingen'=>'Andere_inlichtingen',);
//	Welke boodschap moet er weergegeven worden wanneer een veld niet werd ingevuld?
//	Na de boodschap volgt de betreffende veldnaam.
$RESULT_FIELDMISSING = "Volgend veld werd niet ingevuld:";

//      Boodschap weergeven bij succesvol versturen van formulier, of redirect naar een andere pagina? (1 = boodschap / 0 = redirect)
$RESULT_SUCCESS_TYPE = 0;
//      Boodschap na het succesvol versturen van het formulier. Gebruik \n voor een nieuwe lijn. (enkel als u bij $RESULT_SUCCESS_TYPE '1' hebt staan)
$RESULT_SUCCESS_MSG = "Het formulier werd verstuurd.";
//      Pagina om naar te forwarden na het succesvol versturen van formulier. (enkel als u bij $RESULT_SUCCESS_TYPE '0' hebt staan)
$RESULT_SUCCESS_URL = "dank.htm";

//	Boodschap na het niet succesvol versturen van formulier. Gebruik \n voor een nieuwe lijn.
$RESULT_FAIL_MSG = "Sorry, het formulier kon niet verstuurd worden. Probeer later opnieuw.";


//	EINDE INVULSECTIE
//	U BENT VRIJ DE CODE DIE HIERONDER STAAT AAN TE PASSEN, MAAR BEDENK DAT U DAN HIEROP
//	GEEN SUPPORT MEER ZAL KRIJGEN


if (count($BODY_FIELDS) < 1) {
	echo "Sorry, er moet minstens 1 veld zijn om te verzenden!\n";
	return 0;
}

if($RESULT_DOCHECK == 1) {
	foreach($BODY_FIELDS as $key=>$value) {
		if(!$_POST[$key]) {
			$STOP_SCRIPT = 1;
			echo $RESULT_FIELDMISSING." ".$BODY_FIELDS[$key]."<br>\n";
		}
	}
} elseif(count($BODY_FIELDS_CHECK) > 0) {
	foreach($BODY_FIELDS_CHECK as $value) {
		if(!$_POST[$value]) {
			$STOP_SCRIPT = 1;
			echo $RESULT_FIELDMISSING." ".$BODY_FIELDS[$value]."<br>\n";
		}
	}
}

if($STOP_SCRIPT == 1) {
        return 0;
}

$BODY_MESSAGE_FIELDS = "";
foreach($BODY_FIELDS as $key=>$value) {
	$BODY_MESSAGE_FIELDS .= stripslashes($value.": ".$_POST[$key]."\n");
}

$BODY_HEADERS  = "From: $HEADER_FROM\n";
$BODY_HEADERS .= "Cc: $HEADER_CC\n";
$BODY_HEADERS .= "Bcc: $HEADER_BCC";
$BODY_MESSAGE  = $BODY_HEADER."\n\n";
$BODY_MESSAGE .= $BODY_MESSAGE_FIELDS."\n";
$BODY_MESSAGE .= $BODY_FOOTER."\n";

if($BODY_SHOWIP == 1) {
	$IP = (getenv(HTTP_X_FORWARDED_FOR))
	    ?  getenv(HTTP_X_FORWARDED_FOR)
            :  getenv(REMOTE_ADDR);
	$BODY_MESSAGE .= "IP-adres verzender: $IP";
}

mail($HEADER_TO, $HEADER_SUBJECT, wordwrap($BODY_MESSAGE), $BODY_HEADERS) or die($RESULT_FAIL);

if($RESULT_SUCCESS_TYPE == 1) {
	echo $RESULT_SUCCESS_MSG;
} else {
	header("Location: $RESULT_SUCCESS_URL");
}
?>
 
Laatst bewerkt door een moderator:

Icemar

Steunend lid
Vip Lid
Ik kan jouw php file wel aanpassen maar zo te zien werkt deze samen met een html file als ik deze ook kan krijgen zal ik het er invoegen.
graag in mijn pm box sturen de files in een zipje
 

cas44

PCT Lid
Hallo Butterflyice,

Ik zou dat zip bestandje graag sturen, maar ik zie nergens een knopje om een bestand in te voegen in een mail.
mvg cas44
 

Lana

Niet meer actief
Klik eens op Uitgebreide Editor en dan ergens onderaan kunt u een bijlage toevoegen
 
Status
Niet open voor verdere reacties.
Bovenaan Onderaan