nieuw contact formulier, we komen er niet uit

Status
Niet open voor verdere reacties.

exroom

Gebruiker
Lid geworden
7 dec 2007
Berichten
17
Beste mensen, daar ben ik weer,
mijn vrouw en ik vonden ons vorig contact formulier niet voldoen qua functies,

zodoende hebben we het afgelopen weekend zitten stoeien met een nieuw script dat we gevonden hadden op het net., deze hebben we zover als in ons bereik lag aangepast, echter we lopen weervast:confused:

waar we tevens bang voor zijn: is het wel veilig?

we hebben een aantal vastlopers:

1 bij dit formulier is het mogeljk om een bijlage toetevoegen, echter deze willen we maximaliseren op 1 mb, dit lukt ons dus niet
2 degene die het contact formulier invult willen we een kopie laten krijgen, van hetgene wat hij heeft ingevult, tevens willen we hem/haar een respons mail laten krijgen. (lukt dus ook niet)

een voobeeld van het werkende script kunt u hier zien:

http://www.lovelysiberians.nl/test/contact.php

de scripts heb ik maar gelijk toegevoegd:

in iedergeval bedankt voor het lezen,

groetjes erik

contact.php
PHP:
<?php 	include_once( "contact.lib.php" ); ?>
<html>
<head>
	<title>contact formulier</title>
	<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1">
	<meta name="keywords" content="Room for the lovely siberians">
	<meta name="description" content="Siberische kat">
 	<style type='text/css'>
		.form_title{
			color : #000000;
			font-size: 13px;
			font-family: verdana, Geneva, Arial, Helvetica, sans-serif;
			font-weight : bold;
		}

		.form_field {
			font-size : 13px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #474747;
			font-weight : bold;
			text-align:left;
		}

		.form_text{
			font-size : 11px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #000000;
		}

		.text_box{
			font-size : 11px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #000000;
			width:200px;
		}

		.text_area{
			font-size : 11px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #000000;
			width:200px;
			height:60px;
		}

		.text_select{
			font-size : 11px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #000000;
		}

		.form_error{
			font-size : 11px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #ff0000;
			font-weight : bold;
		}

		.copyright{
			font-size : 11px;
			font-family : Verdana, Arial, Helvetica, sans-serif;
			color : #000000;
		}

	</style>
</head>
<body  marginheight="0" marginwidth="0" leftmargin="0" topmargin="0">
<center>
<meta http-equiv="content-type" content="text/html; charset=">


<!-- Begin: Form Description -->

<br><br><br>
<table cellspacing='16' cellpadding='0' border='0' align='center' ><tr><td>

<font class='form_title'></font>

</td></tr></table>

<!-- End: Your FormMail's Description -->





<!-- Begin: Form -->



<?php
	if( !$isHideForm ): 
		global $sErr ;
		if( $sErr ) print "<br><a name='error'></a><center><font class='form_error' >$sErr</font></center><br>"; 

		$starColor = $sErr ? "#ff0000" : "#000000";
		$style=" class='form_text' ";
 ?>

<form name="frmFormMail" action="<?php print PHP_SELF ?>" method='post' enctype='multipart/form-data'>
<input type='hidden' name='formmail_submit' value='Y'>
<input type='hidden' name='esh_formmail_subject' value="mail van de site">
<input type='hidden' name='esh_formmail_return_subject' value="Bedankt voor uw e-mail">
<input type='hidden' name='esh_formmail_return_msg' value="Wij zullen uw bericht zo spoedig mogelijk in behandeling nemen.">

<table cellspacing='16' cellpadding='0' border='0'  >
	<tr>
		<td class="form_field" valign='top' align='right'>Uw Naam </td><td width='10'  aligh='right' valign='top'> <font size='2' color='#ff0000'>*</font> </td>
		<td class="form_text">
<input type="text" name="uw_Naam"  value="<?php  print HtmlSpecialChars( $HTTP_POST_VARS[ "uw_Naam" ] ); ?>" class='text_box'>
		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Uw telefoonnummer </td><td width='10'  aligh='right' valign='top'> <font size='2' color='#ff0000'>*</font> </td>
		<td class="form_text">
<input type="text" name="uw_telefoonnummer"  value="<?php  print HtmlSpecialChars( $HTTP_POST_VARS[ "uw_telefoonnummer" ] ); ?>" class='text_box'>
		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Heeft u huisdieren? </td><td width='10'  aligh='right' valign='top'> <font size='2' color='#ff0000'>*</font> </td>
		<td class="form_text">
<input type="checkbox" name="Checkbox01_heeft_u_huisdieren"  value="Ja"  <?php  formChecked( $HTTP_POST_VARS[ "Checkbox01_heeft_u_huisdieren" ], "Ja" ); ?> > Ja<br>
<input type="checkbox" name="Checkbox02_heeft_u_huisdieren"  value="Nee"  <?php  formChecked( $HTTP_POST_VARS[ "Checkbox02_heeft_u_huisdieren" ], "Nee" ); ?> > Nee<br>

		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Zo ja wat dan? </td><td width='10'  aligh='right' valign='top'></td>
		<td class="form_text">
<input type="text" name="zo_ja_wat_dan"  value="<?php  print HtmlSpecialChars( $HTTP_POST_VARS[ "zo_ja_wat_dan" ] ); ?>" class='text_box'>
		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Heeft u een cattery? </td><td width='10'  aligh='right' valign='top'> <font size='2' color='#ff0000'>*</font> </td>
		<td class="form_text">
<input type="checkbox" name="Checkbox01_heeft_u_een_cattery"  value="Ja"  <?php  formChecked( $HTTP_POST_VARS[ "Checkbox01_heeft_u_een_cattery" ], "Ja" ); ?> > Ja<br>
<input type="checkbox" name="Checkbox02_heeft_u_een_cattery"  value="Nee"  <?php  formChecked( $HTTP_POST_VARS[ "Checkbox02_heeft_u_een_cattery" ], "Nee" ); ?> > Nee<br>

		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Zo ja hoe heet de cattery? </td><td width='10'  aligh='right' valign='top'></td>
		<td class="form_text">
<input type="text" name="zo_ja_hoe_heet_de_cattery"  value="<?php  print HtmlSpecialChars( $HTTP_POST_VARS[ "zo_ja_hoe_heet_de_cattery" ] ); ?>" class='text_box'>
		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Uw e-mail adres </td><td width='10'  aligh='right' valign='top'> <font size='2' color='#ff0000'>*</font> </td>
		<td class="form_text">
<input type="email" name="uw_e-mail_adres"  value="<?php  print HtmlSpecialChars( $HTTP_POST_VARS[ "uw_e-mail_adres" ] ); ?>" class='text_box'>
		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Bijlage </td><td width='10'  aligh='right' valign='top'></td>
		<td class="form_text">
<input type="file" name="bijlage"  value="" class='text_box'>
		</td>
	</tr>

	<tr>
		<td class="form_field" valign='top' align='right'>Bericht </td><td width='10'  aligh='right' valign='top'> <font size='2' color='#ff0000'>*</font> </td>
		<td class="form_text">
<textarea name="bericht" rows=5 cols=22 ><?php  print HtmlSpecialChars( $HTTP_POST_VARS[ "bericht" ] ); ?></textarea>

		</td>
	</tr>


	<tr><td colspan=3 align='center'><input type='submit' value='Submit'> &nbsp;&nbsp; <input type='button' value='Cancel' onClick="location.href='/';"></td></tr>
</table>


</form>




<!-- End: -->



<?php
		if( $sErr ) print "<script language='javascript' type='text/javascript'>location.href='#error';</script>";;; 

else: //!$isHideForm
	print( "<br><br><hr><center><b>Your form has been sent. Thank you.</b><br><br><input type='button' value='Home' onclick=\"location.href='/';\"></center><br><br>" );
endif; //!$isHideForm
			?>

</body>
</html>



cotact.lib.php
PHP:
<?php
error_reporting(E_PARSE);
define("ADMIN_MAIL", "exroom@msn.com");
define("HOST_NAME", $_SERVER['HTTP_HOST']);
define("PHP_SELF", $_SERVER['PHP_SELF']);
define("ERR_MISSING", "Missing required field : ");
define("ERR_EMAIL", "Please enter a valid e-mail address : ");
define("ERR_SELECT_UPLOAD", "Please select file : ");// recipient
 define('FORM_RECIPIENT', 'exroom@msn.com');
// --- Array of Form Elements ---
$form_mail[] = array( "name" => "uw_Naam", "text" => "Uw Naam",  "type" => "text", "required" => "Required" ) ;
$form_mail[] = array( "name" => "uw_telefoonnummer", "text" => "Uw telefoonnummer",  "type" => "text", "required" => "Required" ) ;
$form_mail[] = array( "name" => "heeft_u_huisdieren", "text" => "Heeft u huisdieren?",  "type" => "checkbox", "required" => "Required" ) ;
$form_mail[] = array( "name" => "zo_ja_wat_dan", "text" => "Zo ja wat dan?",  "type" => "text", "required" => "" ) ;
$form_mail[] = array( "name" => "heeft_u_een_cattery", "text" => "Heeft u een cattery?",  "type" => "checkbox", "required" => "Required" ) ;
$form_mail[] = array( "name" => "zo_ja_hoe_heet_de_cattery", "text" => "Zo ja hoe heet de cattery?",  "type" => "text", "required" => "" ) ;
$form_mail[] = array( "name" => "uw_e-mail_adres", "text" => "Uw e-mail adres",  "type" => "email", "required" => "Required" ) ;
$form_mail[] = array( "name" => "bijlage", "text" => "Bijlage",  "type" => "attachment", "required" => "" ) ;
$form_mail[] = array( "name" => "bericht", "text" => "Bericht",  "type" => "textarea", "required" => "Required" ) ;


// -- Create new vars for checkPass() & sendFormMail() --
$heeft_u_huisdieren = array();
$heeft_u_huisdieren[0]=$HTTP_POST_VARS[ "Checkbox01_heeft_u_huisdieren"];
$heeft_u_huisdieren[1]=$HTTP_POST_VARS[ "Checkbox02_heeft_u_huisdieren"];
$HTTP_POST_VARS[ "heeft_u_huisdieren" ] = join( "\n", $heeft_u_huisdieren);

$heeft_u_een_cattery = array();
$heeft_u_een_cattery[0]=$HTTP_POST_VARS[ "Checkbox01_heeft_u_een_cattery"];
$heeft_u_een_cattery[1]=$HTTP_POST_VARS[ "Checkbox02_heeft_u_een_cattery"];
$HTTP_POST_VARS[ "heeft_u_een_cattery" ] = join( "\n", $heeft_u_een_cattery);




// -- Detech Submit & SendMail --
$isHideForm = false;
if( $HTTP_POST_VARS["formmail_submit"] ){
	$sErr = checkPass();
	if( ! $sErr ){
		sendFormMail( $form_mail, "") ;
		$isHideForm = true;

		$redirect = "";
		if( strlen(trim($redirect)) ):
			header( "Location:$redirect" );
			exit;
		endif;
	}
}


?>
<?
// ===============================================
function    sendFormMail( $form_mail, $sFileName = ""  )
{
    global    $HTTP_POST_VARS ;

    if (ereg('/lovelysiberians.nl/', HOST_NAME))
    {
        return;
    }
	$to = FORM_RECIPIENT;
	$from = "NO_REPLY@" . HOST_NAME;
	$subject = $HTTP_POST_VARS["esh_formmail_subject"];

	// first stage keep it simple:
	$sWhatToDo = $sFileName ? "mailandfile" : "" ; //$HTTP_POST_VARS["esh_formmail_mail_and_file"];

	//$sFileName = $HTTP_POST_VARS["esh_formmail_save_record_file"];
	$cc = $HTTP_POST_VARS["esh_formmail_cc"];
	$bcc = $HTTP_POST_VARS["esh_formmail_bcc"];
	$charset = $HTTP_POST_VARS["esh_formmail_charset"];

    for( $i = 0; $i < count( $form_mail ); $i ++ ){
        $value = trim( $HTTP_POST_VARS[ $form_mail[ $i ][ "name" ] ] );
        $content .= $form_mail[ $i ][ "text" ] . " \t : " . $value ."\n";
        $line .= remove_newline( $value ) . "\t" ;
		if( strtolower("Sender's email") == strtolower($form_mail[ $i ][ "type" ]) ) {
			//print "Type:[" . $form_mail[ $i ][ "type" ] . "] $value <br>\n";
			$from = $value ;
		}
    };
    $content .= "\n\nIP:" . getEnv( "REMOTE_ADDR" );

	switch( strtolower($sWhatToDo) ){
		case "mailandfile" :
	        mailAttachments( $to , $subject , $content,  $from,  $charset, $cc , $bcc ) ;
    	    if( ! appendToFile( $sFileName, $line ) )
				mailReport( $content . "\n\nWrite Form Mail to File Fail." );
			break;

		case "fileonly" :
    	    if( ! appendToFile( $sFileName, $line ) )
				mailReport( $content . "\n\nWrite Form Mail to File Fail.", $from );
			break;

		default :
	        mailAttachments( $to , $subject , $content,  $from,  $charset, $cc , $bcc ) ;
	}

	mailAutoResponse( $from ) ;
}


//------------------------------------------------------------------------------------------
function mailAutoResponse( $to ){
    global    $HTTP_POST_VARS ;
	$subject = $HTTP_POST_VARS["esh_formmail_return_subject"];
	$responseMsg = $HTTP_POST_VARS["esh_formmail_return_msg"];
	if( $to && $responseMsg )
		mail( $to, $subject, $responseMsg, "From: " . FORM_RECIPIENT);
}


//------------------------------------------------------------------------------------------
function mailReport( $content = "", $from = "" ){
	mail( ADMIN_MAIL, "Error@" . HOST_NAME . PHP_SELF, $content, "From:$from" );
}

//------------------------------------------------------------------------------------------
function	remove_newline( $str = "" ){
	$newliner = "<!--esh_newline-->" ; // replace \r\n with $newliner ;
	$newtaber = "<!--esh_newtaber-->" ; // replace \t with $newtaber ;
	$str = ereg_replace( "\t", $newtaber, $str );
	$str = ereg_replace( "\r\n", $newliner, $str );
	return ereg_replace( "\n", $newliner, $str );
}

//------------------------------------------------------------------------------------------
function	checkPass()
{
	global	$form_mail ;
	global	$HTTP_POST_VARS ;
    global    $HTTP_POST_FILES ;

	for( $i = 0; $i < count( $form_mail ); $i ++ ){
		$type = strtolower( $form_mail[ $i ][ "type" ]  );
		$value = trim( $HTTP_POST_VARS[ $form_mail[ $i ][ "name" ] ] );
		$required = $form_mail[ $i ][ "required" ] ;
		$text = stripslashes( $form_mail[ $i ][ "text" ] );

		// simple check the field has something keyed in.
		if( !strlen($value) && (  $required == "Required" ) && $type != "attachment" )
			return ERR_MISSING . $text  ;

		// verify the special case
		/*if(
			( strlen($value) || $type == "attachment" )
			&&  $required == "Required"
		):
		*/
			switch( $type ){
					case 	strtolower("Sender's Name") :
							  break;
					case 	strtolower("Generic email"):
					//case 	strtolower("Sender's email"):
					 case 	"email":    
							   if( ! formIsEMail($value) )	 return ERR_EMAIL . $text ;
							   break;
					case	"text" :
								break;
					case 	"textarea" :
								break;
					case	"checkbox" :
					case 	"radio" :
								break;
					case 	"select" :
								break;
					case strtolower("Date(MM-DD-YYYY)"):
								break;
					case strtolower("Date(MM-YYYY)"):
								break;
					case strtolower("Time(HH:MM:SS)"):
								break;
					case strtolower("Time(HH:MM)"):
								break;
					default :
						//return $sErrRequired . $form_mail[ $i ][ "text" ];
				} // switch
		//endif;
	} // for

	return "" ;
}



//------------------------------------------------------------------------------------------
function formSelected( $var, $val )
{
    echo ( $var == $val ) ? "selected" : "";
}


//------------------------------------------------------------------------------------------
function formChecked( $var, $val )
{
    echo ( $var == $val ) ? "checked" : "";
}


//------------------------------------------------------------------------------------------
function    formIsEMail( $email ){
        return ereg( "^(.+)@(.+)\\.(.+)$", $email );
}


//------------------------------------------------------------------------------------------
function    selectList( $name, $selectedValue, $start, $end, $prompt = "-Select-", $style = "" )
{
    $tab = "\t" ;
    print "<select name=\"$name\" $style>\n" ;
    print $tab . "<option value=''>$prompt</option>\n" ;
    $nLen = strlen( "$end" ) ;
    $prefix_zero = str_repeat( "0", $nLen );
    for( $i = $start; $i <= $end ; $i ++ ){
        $stri = substr( $prefix_zero . $i, strlen($prefix_zero . $i)-$nLen, $nLen );
        $selected = ( $stri == $selectedValue ) ? " selected " : "" ;
        print $tab . "<option value=\"$stri\" $selected >$stri</option>\n" ;
    }
    print "</select>\n\n" ;
}


// -------------------------- Begin Mail Attachment Functions -----------------------------------------------------------------
function    mailAttachments( $to = "" , $subject = "" , $message = "" , $from = "support@lynx.net" , $charset = "iso-8859-1", $cc = "" , $bcc = "" ){
    global    $HTTP_POST_FILES ;

        if( ! strlen( trim( $to ) ) ) return "Missing \"To\" Field." ;

        $boundary = "====_My_PHP_Form_Generator_" . md5( uniqid( srand( time() ) ) ) . "====";

        // setup mail header infomation
        $headers = "From: $from\r\n";
        if ($cc) $headers .= "CC: $cc\r\n";
        if ($bcc) $headers .= "BCC: $bcc\r\n";
		$plainHeaders = $headers ; // for no attachments header
        $headers .= "MIME-Version: 1.0\nContent-type: multipart/mixed;\n\tboundary=\"$boundary\"\n";

        $txtMsg = "\nThis is a multi-part message in MIME format.\n" .
                        "\n--$boundary\n" .
                        "Content-Type: text/plain;\n\tcharset=\"$charset\"\n\n"  . $message . "\n";

        //create mulitipart attachments boundary
        $sError = "" ;
        $nFound = 0;
        foreach( $HTTP_POST_FILES as $aFile ){
                    $sFileName = $aFile[ "tmp_name" ] ;
                    $sFileRealName = $aFile[ "name" ] ;
                    if( is_file( $sFileName ) ):

                        if( $fp = fopen( $sFileName, "rb" ) ) :
                            $sContent = fread( $fp, filesize( $sFileName ) );
                            $sFName = basename( $sFileRealName ) ;
                            $sMIME = getMIMEType( $sFName ) ;

                            $bPlainText = ( $sMIME == "text/plain" ) ;
                            if( $bPlainText ) :
                                $encoding = "" ;
                            else:
                                $encoding = "Content-Transfer-Encoding: base64\n";
                                $sContent = chunk_split( base64_encode( $sContent ) );
                            endif;

                            $sEncodeBody .=     "\n--$boundary\n" .
                                                        "Content-Type: $sMIME;\n" .
                                                        "\tname=\"$sFName\"\n" .
                                                        $encoding .
                                                        "Content-Disposition: attachment;\n" .
                                                        "\tfilename=\"$sFName\"\n\n" .
                                                        $sContent . "\n" ;
                            $nFound ++;
                        else:
                            $sError .= "<br>File $sFileName can not open.\n" ;
                        endif; // if( $fp = fopen( $sFileName, "rb" ) ) :

                    else:
                        $sError .= "<br>File $sFileName doesn't exist.\n" ;
                    endif; //if( file_exists( $sFileName ) ):
        }; // end foreach

         $sEncodeBody .= "\n\n--$boundary--" ;
         $sSource = $txtMsg . $sEncodeBody ;


		 $nFound ? mail( $to, $subject, $sSource, $headers  )
		                : mail( $to, $subject, $message, $plainHeaders );

        return $sError ;
}

/* ---------------------------------------------------------------------------------------------------
    Parameters: $sFileName
    Return :
        1. "" :  no extendsion name, or sFileName is empty
        2. string: MIME Type name of array aMimeType's definition.
   ---------------------------------------------------------------------------------------------------*/
function    getMIMEType( $sFileName = "" ) {

        $sFileName = strtolower( trim( $sFileName ) );
        if( ! strlen( $sFileName  ) ) return "";

        $aMimeType = array(
                                        "txt" => "text/plain" ,
                                        "pdf" => "application/pdf" ,
                                        "zip" => "application/x-compressed" ,

                                        "html" => "text/html" ,
                                        "htm" => "text/html" ,

                                        "avi" => "video/avi" ,
                                        "mpg" => "video/mpeg " ,
                                        "wav" => "audio/wav" ,

                                        "jpg" => "image/jpeg " ,
                                        "gif" => "image/gif" ,
                                        "tif" => "image/tiff " ,
                                        "png" => "image/x-png" ,
                                        "bmp" => "image/bmp"
                                    );
        $aFile = split( "\.", basename( $sFileName ) ) ;
        $nDiminson = count( $aFile ) ;
         $sExt = $aFile[ $nDiminson - 1 ] ; // get last part: like ".tar.zip", return "zip"

        return ( $nDiminson > 1 ) ? $aMimeType[ $sExt ] : "";
}
// End Mail Attachment Functions


//------------------------------------------------------------------------------------------
function    appendToFile( $sFileName = "", $line = "" ){
    if( !$sFileName || !$line ) return 0;
    $hFile = fopen( "$sFileName", "a+w" );
    $nBytes = 0;
    if( $hFile ){
        $nBytes = fputs( $hFile , trim($line)."\r\n" );
        fclose( $hFile );
    };
    return $nBytes ;
}
?>
 
Laatst bewerkt:
weet iemand wat we moeten doen met de file size, of kunnen we daar soms de grote van de bijlage niet mee regelen? we hadden aan het begin van de avond dat begrepen uit ons boek, maar na een dikke 100 pogingen mogen we nog alles versturen

groet, erik
 
Nou een kopie sturen naar degeen die het conatact formulier heeft ingevuld was wachteraf zo opgelost (doch ik daar zeker 6 uur mee bezig ben geweest:shocked:)

nl op de volgende wijze:
(dit is uit de lib)
$cc = $HTTP_POST_VARS["esh_formmail_cc"];
ipv :esh_formmail_cc heb ik mijn variabele uw_e-mail ingevuld dat was eigenlijk alles:)

De response mail heb ik maar laten vallen, dit lukt gewoon niet en eigenlijk vind ik het kopie wel genoeg, er mist gewoon wat en wat dat is geen idee, na 12 uur zoeken heb ik dit opgegeven.

op de attachement een limiet zetten is eigenlijk niet nodig, ik kijk toch wel dagelijks in mijn mail, ik heb honderden verschillende opties uit andere scripts toegepast, maar geen enkel resultaat.

waarschijnlijk wil ik teveel, mogelijkheden, helaas lukt het dan maar af en toe niet
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan