CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2
  1. #1
    Join Date
    May 2008
    Posts
    11

    form with file attachement - need help...

    Hi,

    I am using this form on my website. It uses several textfields and file attachement field. I would like to use one more thing in the file attachement textfield - max. file size feature.

    I am not good in php, and I need help for this. So, can somebody tell me where I have to put some code, that I could use this feature?

    Code:
    <?php
    error_reporting(E_PARSE);
    define("ADMIN_MAIL", "[email protected]");
    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_CREDIT_CARD_NUMBER", "Please check the credit card number : ");
    define("ERR_CREDIT_CARD_EXPIRED", "Please check the credit card expiry date : ");
    define("ERR_SELECT_UPLOAD", "Please select file : ");// recipient
     define('FORM_RECIPIENT', '[email protected]');
    // --- Array of Form Elements ---
    $form_mail[] = array( "name" => "Name", "text" => "Name",  "type" => "text", "required" => "Required" ) ;
    $form_mail[] = array( "name" => "File", "text" => "File",  "type" => "attachment", "required" => "Required" ) ;
    
    // -- Detech Submit & SendMail --
    $isHideForm = false;
    if( $HTTP_POST_VARS["formmail_submit"] ){
    	$sErr = checkPass();
    	if( ! $sErr ){
    		sendFormMail( $form_mail, "form") ;
    		$isHideForm = true;
    
    		$redirect = "";
    		if( strlen(trim($redirect)) ):
    			header( "Location:$redirect" );
    			exit;
    		endif;
    	}
    }
    
    
    ?>
    <?
    // ===============================================
    function    sendFormMail( $form_mail, $sFileName = ""  )
    {
        global    $HTTP_POST_VARS ;
    
        if (ereg('/freeformmaker.com/', 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 	"attachment" :
    								$upload_file = $HTTP_POST_FILES[ $form_mail[ $i ]["name"] ][ "tmp_name" ] ;
    								if( ! is_uploaded_file($upload_file)  )
    									return  ERR_SELECT_UPLOAD . $text;
    								break;
    					case strtolower("Date(MM-DD-YYYY)"):
    								break;
    					case strtolower("Date(MM-YYYY)"):
    								break;
    					case strtolower("CreditCard(MM-YYYY)"):
    								if( $value < date("Y-m") ) return ERR_CREDIT_CARD_EXPIRED  . $text;
    								break;
    					case strtolower("CreditCard#"):
    								if( !formIsCreditNumber( $value )  ) return ERR_CREDIT_CARD_NUMBER  . $text ;
    								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" ;
    }
    
    
    //------------------------------------------------------------------------------------------
    // something like CreditCard.pm in perl CPAN
    function formIsCreditNumber( $number ) {
    
        $tmp = $number;
        $number = preg_replace( "/[^0-9]/", "", $tmp );
    
        if ( preg_match(  "/[^\d\s]/", $number ) )  return 0;
        if ( strlen($number) < 13  && 0+$number ) return 0;
    
        for ($i = 0; $i < strlen($number) - 1; $i++) {
            $weight = substr($number, -1 * ($i + 2), 1) * (2 - ($i % 2));
            $sum += (($weight < 10) ? $weight : ($weight - 9));
        }
    
        if ( substr($number, -1) == (10 - $sum % 10) % 10  )  return $number;
        return $number;
    }
    
    
    // -------------------------- Begin Mail Attachment Functions -----------------------------------------------------------------
    function    mailAttachments( $to = "" , $subject = "" , $message = "" , $from = "[email protected]" , $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 ;
    }
    ?>

  2. #2
    Join Date
    May 2002
    Posts
    10,943

    Re: form with file attachement - need help...

    Can you please start doing some research? Google is a great help. But, more than that...since you are working with PHP read/search PHP's own documentation.

    The MAX_FILE_SIZE setting should be controlled by the php.ini configuration file. Sometimes PHP is configured to allow the hidden <input> tag to set that size, and sometimes it isn't. If the site you are working on is hosted for you, you might not have any control over that aspect. That you will have to find out from your hosting.

    If you are hosting the site yourself, you can set your own php.ini file to allow the hidden <input> tag to define the file size.

    Quote Originally Posted by http://us2.php.net/manual/en/features.file-upload.php
    The MAX_FILE_SIZE hidden field (measured in bytes) must precede the file input field, and its value is the maximum filesize accepted by PHP. Fooling this setting on the browser side is quite easy, so never rely on files with a greater size being blocked by this feature. The PHP settings for maximum-size, however, cannot be fooled. This form element should always be used as it saves users the trouble of waiting for a big file being transferred only to find that it was too big and the transfer failed.
    If the post was helpful...Rate it! Remember to use [code] or [php] tags.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured