php mailscript werkt niet

Status
Niet open voor verdere reacties.

Killerclown

Gebruiker
Lid geworden
30 dec 2007
Berichten
181
Goeieavond,

Ik probeer een mailscript te maken in php (lees: code gekopieerd van google) maar er zit ergens een fout in die ik niet vind. Ik heb het script wat proberen aanpassen naar mijn persoonlijke noden maar nu zit er een fout in. Hopelijk is er hier iemand met wat meer kennis van php dan mij die het probleem wel ziet.
Kan iemand mij helpen wat het probleem is en hoe ik het kan oplossen?
Ik denk dat het te maken heeft met de accolade } maar daar zit ik vast.

Hieronder de code van het formulier en van het script

FORMULIER
Code:
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<!-- Display submission status -->
<?php if(!empty($statusMsg)){ ?>
    <p class="statusMsg <?php echo !empty($msgClass)?$msgClass:''; ?>"><?php echo $statusMsg; ?></p>
<?php } ?>

<!-- Display contact form -->
<form method="post" action="test_formhandler.php" enctype="multipart/form-data">
    <div class="form-group">
        <input type="text" name="name" class="form-control" placeholder="Name" required="">
    </div>
    <div class="form-group">
        <input type="email" name="email" class="form-control" placeholder="Email address" required="">
    </div>
    <div class="form-group">
        <input type="text" name="subject" class="form-control" placeholder="Subject" required="">
    </div>
    <div class="form-group">
        <input type="text" name="adlink" class="form-control" placeholder="Link" required="">
    </div>
    <div class="form-group">
         <select name="adtime" required>
				<option value="1month">1 month</option>
  				<option value="2month">2 months</option>
  				<option value="3month">3 months</option>
        
    </div>
    <div class="form-group">
        <textarea name="message" class="form-control" placeholder="Write your message here" required=""></textarea>
    </div>
    <div class="form-group">
        <input type="file" name="attachment" class="form-control">
    </div>
    <script src='https://www.google.com/recaptcha/api.js'></script>
    <div class="g-recaptcha" data-sitekey="xxx"></div>
    <div class="submit">
        <input type="submit" name="submit" class="btn" value="SUBMIT">
    </div>
</form>
</body>
</html>

PHP SCRIPT
Code:
<?php
    $postData = $uploadedFile = $statusMsg = '';
    $msgClass = 'errordiv';
    if(isset($_POST['submit'])){
    
	// Get the submitted form data
    $postData = $_POST;
    
	// Check whether submitted data is not empty
    if(!empty($email) && !empty($name) && !empty($subject) && !empty($message) && !empty($adlink) && !empty($adtime)){
    
	// Validate reCAPTCHA box 
    if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){ 
    
	// Google reCAPTCHA API secret key 
    $secretKey = 'xxx'; 
             
    // Verify the reCAPTCHA response 
    $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.'&response='.$_POST['g-recaptcha-response']); 
             
    // Decode json data 
    $responseData = json_decode($verifyResponse); 
	
	// If reCAPTCHA response is valid 
    if($responseData->success){ 
    
	// Posted form data 
	$email = $_POST['email'];
    $name = $_POST['name'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];	
	$adlink = $_POST['adlink'];
	$adtime = $_POST['adtime'];
		    
    // Validate email
    if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
    $statusMsg = 'Please enter your valid email.';
    }else{
    $uploadStatus = 1;
            
    // Upload attachment file
    if(!empty($_FILES["attachment"]["name"])){
                
    // File path config
    $targetDir = "../../upload/";
    $fileName = basename($_FILES["attachment"]["name"]);
    $targetFilePath = $targetDir . $fileName;
    $fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);
                
    // Allow certain file formats
    $allowTypes = array('pdf', 'jpg', 'png', 'jpeg');
    if(in_array($fileType, $allowTypes)){
     
	// Upload file to the server
    if(move_uploaded_file($_FILES["attachment"]["tmp_name"], $targetFilePath)){
    $uploadedFile = $targetFilePath;
    }else{
    $uploadStatus = 0;
    $statusMsg = "Sorry, there was an error uploading your file.";
    }
    }else{
    $uploadStatus = 0;
    $statusMsg = 'Sorry, only PDF, JPG, JPEG, & PNG files are allowed to upload.';
    }
    }       
    if($uploadStatus == 1){
                
    // Recipient
    $toEmail = 'test@test.be';

    // Sender
    $from = 'test';
    $fromName = 'test';
                
    // Subject
    $emailSubject = 'Contact Request Submitted by '.$name;
                
    // Message 
    $htmlContent = '<h2>Contact Request Submitted</h2>
    <p><b>Name:</b> '.$name.'</p>
    <p><b>Email:</b> '.$email.'</p>
    <p><b>Subject:</b> '.$subject.'</p>
	<p><b>Link:</b> '.$adlink.'</p>
	<p><b>Time:</b> '.$adtime.'</p>
    <p><b>Message:</b><br/>'.$message.'</p>';
                
    // Header for sender info
    $headers = "From: $fromName"." <".$from.">" . "\r\n" . "CC: test@test.be";
    if(!empty($uploadedFile) && file_exists($uploadedFile)){
                    
    // Boundary 
    $semi_rand = md5(time()); 
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
                    
    // Headers for attachment 
    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
                    
    // Multipart boundary 
    $message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
    "Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 
                    
    // Preparing attachment
    if(is_file($uploadedFile)){
    $message .= "--{$mime_boundary}\n";
    $fp =    @fopen($uploadedFile,"rb");
    $data =  @fread($fp,filesize($uploadedFile));
    @fclose($fp);
    $data = chunk_split(base64_encode($data));
    $message .= "Content-Type: application/octet-stream; name=\"".basename($uploadedFile)."\"\n" . 
    "Content-Description: ".basename($uploadedFile)."\n" .
    "Content-Disposition: attachment;\n" . " filename=\"".basename($uploadedFile)."\"; size=".filesize($uploadedFile).";\n" . 
    "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    }     
    $message .= "--{$mime_boundary}--";
    $returnpath = "-f" . $email;
                    
    // Send email
    $mail = mail($toEmail, $emailSubject, $message, $headers, $returnpath);
                    
    // Delete attachment file from the server
    @unlink($uploadedFile);
    }else{
     
	// Set content-type header for sending HTML email
    $headers .= "\r\n". "MIME-Version: 1.0";
    $headers .= "\r\n". "Content-type:text/html;charset=UTF-8";
                    
    // Send email
    $mail = mail($toEmail, $emailSubject, $htmlContent, $headers); 
    }	
     
	// If mail sent
    if($mail){
    echo "<script> location.href='advertisment_thanks.html'; </script>";
    exit; //redirect to the 'thank you' page
	$statusMsg = 'Your contact request has been submitted successfully !';
    $msgClass = 'succdiv';
                    
    $postData = '';
    }else{
    $statusMsg = 'Your contact request submission failed, please try again.';
    }
    }
    }
	
    }else{
    $statusMsg = 'Please fill all the fields.';
    }
    }
?>
 
Is het nou veel moeite om te vertellen dat je een leeg scherm krijgt, of een foutmelding met unexpected end of file in ? :p :p

Anyway, het gaat om het laatste. Ik kan mijzelf indenken dat je het niet zal zien als je allemaal accolades onuitgelijnd in je script plaatst.
Zorg voor nette tab's, zodat je eenvoudig kan zien welke accolade bij welk statement hoort.

Wat vind jij beter overzichtelijker?

PHP:
<?php
$dit = 'iets';
$magdit = false;

if($dit == 'iets') {
     if($magdit == FALSE) {
        for ($i = 0; $i <= 10; $i++) {
                if($i == 5) {
                echo "Het nummer is: $i <br>";
            } else {
                echo "Het nummer is: <strong>$i</strong> <br>";
            }    
            
        }
    }
}
?>

Of dit:

PHP:
<?php
$dit = 'iets';
$magdit = false;

if($dit == 'iets') {
if($magdit == FALSE) {
for ($i = 0; $i <= 10; $i++) {
if($i == 5) {
 echo "Het nummer is: $i <br>";
} else {
echo "Het nummer is: <strong>$i</strong> <br>";
}               
}
}
}
?>
 
Laatst bewerkt:
Ik sluit mij volledig aan bij PHP4U ......... het wordt een stuk leesbaarder als er gebruik gemaakt wordt van tabs ........:thumb:

Maar om terug te koen op je probleem, je mist aan het einde 2 keer een afsluit accolade, ik vermoed dat het darna het stuk beter gaat.
 
Mijn excuses voor de onduidelijkheden.

Dit is wat er gebeurd. Als je op submit klikt, verschijnt er een witte pagina ipv de bedankingspagina en er wordt niks verzonden. Geen mail, geen attachment. Er zit dus ergens een fout in die ik niet zie. Mijn kennis van php is dan ook zeer miniem.

Ik heb op het einde 2 accolades toegevoegd maar het resultaat blijft hetzelfde. Geen mail, geen attachment, geen bedankingspagina.
Iemand een idee wat het kan zijn?

Nogmaals mijn excuses voor het niet zo duidelijk script. Ik weet niet wat er gebeurd is met de tabs.
Hieronder nogmaals mijn bestand met tabs. Ik doe gewoon kopie/paste en toch krijg ik hier een ander resultaat dan in mijn editor.
Ik merk dat er weer tabs verdwenen zijn bij het kopiëren maar het is misschien nu toch al iets duidelijker.

Code:
<?php
    $postData = $uploadedFile = $statusMsg = '';
    $msgClass = 'errordiv';
    if(isset($_POST['submit'])){
    
		// Get the submitted form data
    	$postData = $_POST;
    
		// Check whether submitted data is not empty
    	if(!empty($email) && !empty($name) && !empty($subject) && !empty($message) && !empty($adlink) && !empty($adtime)){
    
			// Validate reCAPTCHA box 
    		if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){ 
    
				// Google reCAPTCHA API secret key 
    			$secretKey = 'my_secret_key'; 
             
    			// Verify the reCAPTCHA response 
    			$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.	'&response='.$_POST['g-recaptcha-response']); 
             
    			// Decode json data 
    			$responseData = json_decode($verifyResponse); 
	
				// If reCAPTCHA response is valid 
    			if($responseData->success){ 
    
					// Posted form data 
					$email = $_POST['email'];
					$name = $_POST['name'];
					$subject = $_POST['subject'];
					$message = $_POST['message'];	
					$adlink = $_POST['adlink'];
					$adtime = $_POST['adtime'];
		    
					// Validate email
					if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
    					$statusMsg = 'Please enter your valid email.';
    				}else{
    					$uploadStatus = 1;
            
						// Upload attachment file
						if(!empty($_FILES["attachment"]["name"])){
                
							// File path config
							$targetDir = "../../upload/";
							$fileName = basename($_FILES["attachment"]["name"]);
							$targetFilePath = $targetDir . $fileName;
							$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);
                
							// Allow certain file formats
							$allowTypes = array('pdf', 'jpg', 'png', 'jpeg');
							if(in_array($fileType, $allowTypes)){
     
								// Upload file to the server
								if(move_uploaded_file($_FILES["attachment"]["tmp_name"], $targetFilePath)){
								$uploadedFile = $targetFilePath;
							}else{
								$uploadStatus = 0;
								$statusMsg = "Sorry, there was an error uploading your file.";
							}
						}else{
							$uploadStatus = 0;
							$statusMsg = 'Sorry, only PDF, JPG, JPEG, & PNG files are allowed to upload.';
    					}
    				}       
    				if($uploadStatus == 1){
                
						// Recipient
						$toEmail = 'my_email';

						// Sender
						$from = 'Test';
						$fromName = 'Test';
                
						// Subject
						$emailSubject = 'Contact Request Submitted by '.$name;
                
						// Message 
						$htmlContent = '<h2>Contact Request Submitted</h2>
						<p><b>Name:</b> '.$name.'</p>
						<p><b>Email:</b> '.$email.'</p>
						<p><b>Subject:</b> '.$subject.'</p>
						<p><b>Link:</b> '.$adlink.'</p>
						<p><b>Time:</b> '.$adtime.'</p>
						<p><b>Message:</b><br/>'.$message.'</p>';
                
						// Header for sender info
						$headers = "From: $fromName"." <".$from.">" . "\r\n" . "CC: my_email";
						if(!empty($uploadedFile) && file_exists($uploadedFile)){
                    
							// Boundary 
							$semi_rand = md5(time()); 
							$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
                    
							// Headers for attachment 
							$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
											
							// Multipart boundary 
							$message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
							"Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 
                    
							// Preparing attachment
							if(is_file($uploadedFile)){
								$message .= "--{$mime_boundary}\n";
								$fp =    @fopen($uploadedFile,"rb");
								$data =  @fread($fp,filesize($uploadedFile));
								@fclose($fp);
								$data = chunk_split(base64_encode($data));
								$message .= "Content-Type: application/octet-stream; name=\"".basename($uploadedFile)."\"\n" . 
								"Content-Description: ".basename($uploadedFile)."\n" .
								"Content-Disposition: attachment;\n" . " filename=\"".basename($uploadedFile)."\"; size=".filesize($uploadedFile).";\n" . 
								"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    						}     
							$message .= "--{$mime_boundary}--";
							$returnpath = "-f" . $email;
                    
							// Send email
							$mail = mail($toEmail, $emailSubject, $message, $headers, $returnpath);
											
							// Delete attachment file from the server
							@unlink($uploadedFile);
    					}else{
     
							// Set content-type header for sending HTML email
							$headers .= "\r\n". "MIME-Version: 1.0";
							$headers .= "\r\n". "Content-type:text/html;charset=UTF-8";
                    
							// Send email
							$mail = mail($toEmail, $emailSubject, $htmlContent, $headers); 
						}	
     
						// If mail sent
						if($mail){
							echo "<script> location.href='advertisment_thanks.html'; </script>";
							exit; //redirect to the 'thank you' page
							$statusMsg = 'Your contact request has been submitted successfully !';
							$msgClass = 'succdiv';                   
    						$postData = '';
    					}else{
    						$statusMsg = 'Your contact request submission failed, please try again.';
    					}
    				}
    			}
	
    		}else{
    			$statusMsg = 'Please fill all the fields.';
    			 }
    		}
		}
	}
?>
 
Als ik twee }} onder elkaar zie op één lijn, dan klopt dat niet :p

Een goede PHP-editor geeft duidelijke lijntjes bij statements. Welke gebruik je?
 
Laatst bewerkt:
Dat is net het rare. Bij mij staan de 2 } niet recht onder elkaar. Door kopie/paste naar hier, komt dat zo te staan. Die tabs doen raar.
Waarschijnlijk ligt het aan mijn software. Ik gebruik Dreamweaver CS5 voor al mijn webdesign werk.
Misschien moet ik eens een deftige php-editor zoeken.
 
Ikzelf gebruik Netbeans.
 
Ook een goede keuze!
 
bekijk volgende lijn zeker
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

nu = is een speciaal char en kan geen deel uitmaken van je boundary vermoedelijk zal deze fout ook nog om de hoek komen kijken.

Ik stel voor dat je eens stoeit met deze class het is onderdeel van geheel de vertaler werkt dus niet maar hier vind je wel een oplossing voor indien je het aanpast.

PHP:
<?php
/**
 * Mymailing
 * Atention  i use finfo_file from extension=php_fileinfo.dll , --enable-fileinfo
 * this is the format
 * +-----------------------------------------------+
 * | multipart/related                             |
 * | +---------------------------+  +------------+ |
 * | |multipart/alternative      |  | image/gif  | |
 * | | +-----------+ +---------+ |  |            | |
 * | | |text/plain | |text/html| |  |            | |
 * | | +-----------+ +---------+ |  |            | |
 * | +---------------------------+  +------------+ |
 * +-----------------------------------------------+ 
 * this is now this format
 * +--------------------------------+
 * | multipart/mixed                |
 * | | +-----------+ +----------+   |
 * | | |text/plain | |attachment|   |
 * | | +-----------+ +----------+   |
 * +--------------------------------+ 
 * 
 * @author Lieven Roegiers
 * @copyright 2009
 * @version $Id$
 */
namespace Amail;
class AmailSender{
    private $delimiter ='%';
    private $cashlocation = './cachemails/';
    private $subject = 'ONLY TESTS';
    private $addparts = [];
    private $issend = false;
    private $layout;
    private $encoding = 'utf-8';
    private $_END ="\n";
    private $SEPARATE ;
    private $SUBSEPARATE ;
    private $isimginbedded;
    function __construct($imginbedded =true){
        if (strtoupper(substr(PHP_OS,0,3)=='MAC')) { $this->_END="\r";}
        if (strtoupper(substr(PHP_OS,0,3)=='WIN')) { $this->_END="\r\n";}
        $this->isimginbedded = $imginbedded;
        $this->init();
        //ini_set("SMTP", "autosite.dev");
        //ini_set("smtp_port", 25);
        //ini_set("sendmail_from", "test@autosite.dev");
    }
    //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< HEADERS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>    
    /**
     * Mymailing::setsubject()
     * @return void
     */
    public function setsubject($subject){
        $this->subject = $subject;
    }
    /**
     * Mymailing::is_spammer()
     * @param mixed $from
     * @return
     */
    private function is_spammer($from){
        return $this->is_headerinject($from);
    }
    /**
     * Mymailing::getbody()
     * @return
     */
    private function getbody(){
        $body ='';
        $body.= 'This is a multi-part message in MIME format.'.$this->_END;
        foreach($this->bodyparts as $key=>$value){
            $body .= $this->getpartstart().$value;
        }
        foreach($this->addparts as $key=>$value){
            $body .= $this->getpartstart().$value;
        }   
        return $body;
    }
    public function getpartstart(){
        return '--'.$this->SEPARATE.''; 
    }
    public function getSUBpartstart(){
        return '--'.$this->SUBSEPARATE.''; 
    }
    function wrap_each(&$item){
        $item = '\''.$item.'\'';
    }
    public function encode(&$text,$TYPE,$TYPEfrom=''){
        if (isset($TYPEfrom)&&$TYPEfrom!=''){
            mb_convert_encoding($text,$TYPE);
        }else{
            mb_convert_encoding($text ,$TYPE,$TYPEfrom);
        }
    }
    /**
     * AmailSender::MailSource()
     * @IMPORTANT !!!  finish with two end of line's  for better security. !!!
     * @see Injection. two end of line's for better security. 
     * @param mixed $locale
     * @param mixed $from
     * @param string $name
     * @param string $text
     * @param string $html
     * @param string $values
     * @param string $cashname
     * @return
     */
    public function MailSource($locale,$from,$name,$text,$html,$values,$cashname){
        $content='';
        $mixed = false;
        $sep = $this->getpartstart();
        if(isset($text)&&isset($html)){
            $mix['Content-Type']=' multipart/alternative; boundary="'.$this->getSUBpartstart().'"';
            //$body['Content-Transfer-Encoding']="quoted-printable ".$this->_END;
            $content .=  $sep.$this->_END.$this->header($mix).$this->_END.$this->_END;
            $mixed = true;
            $sep = $this->getSUBpartstart();
        }
        if(isset($text)){
            $body['Content-Type']='text/plain'.$this->_END."\t\t charset='$this->encoding'";
            $body['Content-Transfer-Encoding']=' 7bit';
            //$body['Content-Transfer-Encoding']="quoted-printable ".$this->_END;
            $content .=  $sep.$this->_END.$this->header($body).chunk_split($this->translate($this->crop($text),$values,$locale),76,"=\n");
        }
        if(isset($html)){
            $bodyhtml['Content-Type']='text/html;'.$this->_END."\t\t charset=".$this->encoding.'"';
            $bodyhtml['Content-Transfer-Encoding']=' 7bit';
            //$body['Content-Transfer-Encoding']="quoted-printable ".$this->_END;
            $content .= $sep.$this->_END.$this->header($bodyhtml).
            chunk_split($this->translate($this->crop($html),$values,$locale),76,"=\n");
            //wordwrap($this->translate($this->crop($html),$values,$locale), 75, "=\n", true);
        }
        if($mixed){  $content .=$sep."--".$this->_END;}
        if(is_array($this->addparts)){
            foreach($this->addparts as $key=>$value){
                $content .= $value;
            }
        }
        $content .=$this->getpartstart()."--".$this->_END.$this->_END;
        return $content;
    }
    private function translate($content,$values,$locale){
        preg_match_all('|%(.*)%|',$content,$keys);
        $template= new \autosystem\Qtemplate($content);
        $keys=$this->array_keyfinder($keys[1]);
        $properties = new  \autosystem\Properties($locale);
        if(is_array($keys)){         $translations = $properties->getproperties($keys,'');}
        $template->translate($translations);
        $template->setvalues($values);
        $content = $template->gethtml();
        preg_match_all('|%(.*)%|',$content,$keys);
        $keys=$this->array_keyfinder($keys[1]);
        if(is_array($keys)){         $translations = $properties->getproperties($keys,'');}
        $template->translate($translations);
        $template->setvalues($values);
        return $this->_END.$template->gethtml().$this->_END.$this->_END;
    }    
    public function SendMail($locale,$from,$name,$text,$html,$values,$cashname,$activebackup,$to,$subject,$sendit = false){
        $header =$this->getMailHeader($from,$name);
        if(isset($text)&&isset($html)){
            $header .= 'This is a multi-part message in MIME format.'.$this->_END;
        }
        $source = $this->MailSource($locale,$from,$name,$text,$html,$values,$cashname);
        if($activebackup){
            $this->makeCash($cashname,$header.$source,$locale);
        }
        if($sendit && $this->cansend($email)){
            return true;//mail($email, $this->subject,$source,$header);
        }else{
            print ' TO:'.$to.' SUB:'.$subject.' content:'.$header.$source;
        }
        return false;
    }
    private function init(){
       $stamp = md5(time());
       $this->SEPARATE = '*---Boundary-Part--*'.$stamp;
       $this->SUBSEPARATE ='*---Inner-Part--*'.$stamp;
       $this->IMGKEY=''.$stamp;
    }
    private function getMailHeader($from,$to,$name='',$mixed = false){
        $header['From'] = "$name <$from>";
        $header['Reply-To'] = "$from <$from>";
        $header['MIME-Version'] = '1.0';
        if($mixed){
           $header['Content-Type'] = 'multipart/mixed; boundary="'.$this->SEPARATE.'"';//'.$this->_END."\t\t".'
        }else{
           $header['Content-Type'] = 'multipart/related; '."\n".' boundary="'.$this->SEPARATE.'" type="multipart/alternative" '; 
        }
        $header['Content-Disposition']= 'attachment';
        return $this->header($header);
    }
    private function header($asoarray){
        $header= '';
        foreach($asoarray as $key=>$value){
            $header.= $key.': '.$value.';'.$this->_END;
        }
        return $header;
    }
    private function cansend($email){
        return true;
    }
    private function makeCash($name,$content,$locale){
        return file_put_contents($this->cashlocation.$name.'_'.$locale.'.cashe',$content);
    }
    private function existcash($name,$locale){
        return is_file($this->cashlocation.$name.'_'.$locale.'.cashe');
    }
    private function addpart($filename,$hascdi=false,$contenttypeoverwrite=null){
        if (!is_file($filename)){$this->onerror('attachment not exist:'.$filename);}
        $name= substr(strrchr($filename,'/'),1);
        if(isset($contenttypeoverwrit)){
            $part['Content-Type']= $contenttypeoverwrite.';'.' name='.$name;//TODO check replaced $filename => $name
        }else{
            $part['Content-Type']= $this->get_FileMime($filename).';'.' name='.$name;
        }
        $part['Content-Transfer-Encoding']=' base64';
        $part['Content-Disposition']=' attachment';
        if($hascdi){
            $cdi = $name.'@'.$this->IMGKEY;
            $part['Content-ID']="<$cdi>";
        }
        //$body['Content-Transfer-Encoding']="quoted-printable ".$this->_END;
        $attachment =  $this->getpartstart().$this->_END.$this->header($part).$this->_END;
        $attachment .= chunk_split($this->getAttFiledata($filename).$this->_END).$this->_END;
        array_push($this->addparts,$attachment);
        if($hascdi){
           return $cdi;
        }
    }
    public function addattachment($filename){
        $this->addpart($filename,false,'application/octet-stream');
    }
    public function addimg($filename,$inbedded =true){
        return $this->addpart($filename,true);
    }
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    private function get_FileMime($filename){
        //$fileatt_type = mime_content_type($filename);(OLD CODE)
        //application/octet-stream
         $finfo = finfo_open(FILEINFO_MIME_TYPE);// return mime type ala mimetype extension
         return finfo_file($finfo, $filename); 
    }
    private function Aln2br($txt){
        return strtr($txt, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />'));
    }
    private function crop($txt){
        $content = strtr($txt, array("\r\n" => '', "\r" => '', "\n" => '' , "\t" => '', "  " => ' '));
        //$html = wordwrap($html,75, "-\r\n", true);
        return $content;
    }
    private function array_keyfinder($array){
        $return = [];
        foreach($array as $val){
            if(strpos($val,$this->delimiter)){
                $subarray = explode($this->delimiter,$val);
                $i=0;
                 foreach($subarray as $sval){
                    if($i%2==0){       if(!strpos($sval, "->")){     array_push($return,$sval);   }
                    }
                    $i++;
                 }
            }else{                     if(!strpos($val, "->")){      array_push($return,$val);    }
            }
        }
        return $return;
    }
    private function getAttFiledata($filename,$enbeded = false){
        $file = fopen($filename, 'rb');
        $bestandsinf = fread($file, filesize($filename));//TODO if error on this line posible file exist but is empty
        fclose($file);
        if($enbeded){
            return "data:".$this->get_FileMime($filename).";base64,".base64_encode($bestandsinf);
        }else{
            return base64_encode($bestandsinf);
        }
    }
    private function onerror($error){
        print $error;
    }  
}
?>
 
Kenika, verdiep je toch eens in de persoon zelf.
Denk je nou echt dat iemand die een beginner is zich direct met classes bezighoud? Plus dat dit duidelijk geen relevante code is.......

Of ben jij soms iemand die een beginner rijles geeft in een Catterpillar truck van weet ik hoeveel ton aan gewicht??
 
Laatst bewerkt:
Het is teveel om door te spitten maar ergens bovenaan worden de velden niet ingelezen
Hiermee gaat het beter denk ik
Code:
    // get submitted form data
    $email   = (!isset($_POST['email']))   ? "" : trim($_POST['email']);
    $name    = (!isset($_POST['name']))    ? "" : trim($_POST['name']);
    $subject = (!isset($_POST['subject'])) ? "" : trim($_POST['subject']);
    $message = (!isset($_POST['message'])) ? "" : trim($_POST['message']);
    $adlink  = (!isset($_POST['adlink']))  ? "" : trim($_POST['adlink']);
    $adtime  = (!isset($_POST['adtime']))  ? "" : trim($_POST['adtime']);
    // check whether submitted data is not empty
    if(!empty($email) && !empty($name) && !empty($subject) && !empty($message) && !empty($adlink) && !empty($adtime)){
        ………
    }

Bij de regel erna gebruik je $_POST wel op de juistemanier.
Code:
// Validate reCAPTCHA box
if (isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
    ………
}
 
Laatst bewerkt:
Bloed, zweet en tranen heeft het al gekost tot uren in de nacht.
Na veel zoekwerk en proberen klopt er volgens mij iets niet aan de lijnen met recaptcha.

Hieronder het werkende script zonder recaptcha (zover ben ik al geraakt)

Code:
<?php
$postdata = $uploadedFile = $statusMsg ='';
$msgClass = 'errordiv';
if(isset($_POST['submit'])){
    //Get the submitted form data
    $postData=$_POST;
    $email = $_POST['email'];
    $name = $_POST['name'];
    $subject = $_POST['subject'];
    $message = $_POST['message'];
    $adlink = $_POST['adlink'];
    $adtime = $_POST['adtime']; 
    
    //Check whetter submitted data is not empty
    if(!empty($email) && !empty($name) && !empty($subject) && !empty($message) &&!empty($adlink) && !empty($adtime)){
        
        //Validate email
        if(filter_var($email, filter_validate_email) === false){        
            $statusMsg = 'Please enter your valid email.';
        }else{
            $uploadStatus = 1;
            
            //upload attachment file
            if(!empty($_FILES["attachment"]["name"])){
                
                //File path config
                $targetDir = "../../upload/";
                $fileName = basename ($_FILES["attachment"]["name"]);
                $targetFilePath = $targetDir . $fileName;
                $fileType = pathinfo($targetFilePath, pathinfo_extension);
                
                //allow certain file formats
                $allowTypes = array('pdf', 'jpg', 'png', 'jpeg');
                if(in_array($fileType, $allowTypes)){
                    
                    //upload file to the server
                    if(move_uploaded_file($_FILES["attachment"]["tmp_name"], $targetFilePath)){
                        $uploadedFile = $targetFilePath;
                    }else{
                            $uploadStatus = 0;
                            $statusMsg = "Sorry, there was an error uploading your file.";
                        }
                }else{
                    $uploadStatus = 0;
                    $statusMsg = 'Sorry, only PDF, JPG, JPEG & PNG files are allowed to upload.';
                }
            }
            
            If($uploadStatus == 1){
                
                //Recipient
                $toEmail = 'my email';
                
                //Sender
                $From = 'test;
                $FromName = 'test';
                
                //Subject
                $emailSubject = 'Contact Request Submitted by ' . $name;
                
                //Message
                $htmlContent = '<h2> Contact Request Submitted</h2>
                    <p><b>Name:</b> '.$name.'</p>
                    <p><b>Email:</b> '.$email.'</p>
                    <p><b>Subject:</b> '.$subject.'</p>
                    <p><b>Link:</b> '.$adlink.'</p>
                    <p><b>Time:</b> '.$adtime.'</p>
                    <p><b>Message:</b> '.$message.'</p>';
                //Header for sender info
                $headers = "From: $FromName" . "<" .$From. ">" . "\r\n". "CC: my email";
                if (!empty($uploadedFile) && file_exists($uploadedFile)){
                    //Boundary
                    $semi_rand = md5(time());
                    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
                    
                    //Headers for attachment
                    $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
                    
                    //Multipart boundary
                    $message = "--{$mime_boundary}\n" . "Content-Type: text/html;charset=\"UTF-8\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n";
                    
                    //Preparing attachment
                    If(is_file($uploadedFile)){
                        $message .= "--{$mime_boundary}\n";
                        $fp = @fopen($uploadedFile, "rb");
                        $data = @fread($fp,filesize($uploadedFile));
                        @fclose ($fp);
                        $data = chunk_split(base64_encode($data));
                        $message .= "Content-Type: application/octet-stream; name=\"".basename($uploadedFile) ."\"\n" .
                            "Content-Description: ".basename($uploadedFile)."\n" .
                            "Content-Disposition : attachment;\n" . "filename=\"".basename($uploadedFile)."\"; size=".filesize($uploadedFile).";\n" .
                            "Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
                    }
                    
                    $message .= "--{$mime_boundary}--";
                    $returnpath = "-f" . $email;
                    
                    //Send Email
                    $mail = mail ($toEmail, $emailSubject, $message, $headers, $returnpath);
                    
                    //Delete attachment file from server
                    @unlink($uploadedFile);
                }else{
                    //Set content-type headers for sending HTML email
                    $headers .= "\r\n". "MIME-Version: 1.0";
                    $headers .= "\r\n". "Content-type:text/html;charset=UTF-8";
                    
                    //Send email
                    $mail = mail($toEmail, $emailSubject, $htmlContent , $headers);
                    
                }
                
                //if mail sent
                if($mail){
                    echo "<script> location.href='advertisment_thanks.html';</script>";
                    exit; //redirect to the 'thank you' page
                    $statusMsg = 'Your contact request had been submitted succesfully!';
                    $msgClass = 'succdiv';
                    
                    $postData = '';
                }else{
                    $statusMsg = 'Your contact request submission failed, please try again.';
                }
            }
        }     
    }else{
        $statusMsg = 'Please fill all the fields.';
    }
}
    
?>

Nu zou dus daarin nog de recaptcha ingebouwd moeten worden en daar loopt het volgens mij mis.
Iemand een beter idee dan het mijne waar ik dat moet inbouwen en hoe?

@kenikavanbis: ik denk dat jouw uitleg nog een beetje te hoog gegrepen is voor mij. Mijn kennis van php is zeeeeeeeeeeeer beperkt.
@bron: jouw oplossing gaf geen verschil. Volgens mij klopt er iets niet aan mijn inbouw van de recaptcha. (zie hierboven)
 
Wat heb je al geprobeerd? Misschien zat je al erg warm?
 
Dit is hetgeen ik had met recaptcha. Waarschijnlijk zit het ergens verkeerd ingebouwd ofzo maar daar geraak ik niet aan uit.

Code:
<?php
    $postData = $uploadedFile = $statusMsg = '';
    $msgClass = 'errordiv';
    if(isset($_POST['submit'])){
    
		// Get the submitted form data
    	        $postData = $_POST;
	        $email = $_POST['email'];
	        $name = $_POST['name'];
		$subject = $_POST['subject'];
 		$message = $_POST['message'];	
		$adlink = $_POST['adlink'];
		$adtime = $_POST['adtime'];
    
		// Check whether submitted data is not empty
    	if(!empty($email) && !empty($name) && !empty($subject) && !empty($message) && !empty($adlink) && !empty($adtime)){
    
			// Validate reCAPTCHA box 
    		if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){ 
    
				// Google reCAPTCHA API secret key 
    			$secretKey = 'my_secret_key'; 
             
    			// Verify the reCAPTCHA response 
    			$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secretKey.	'&response='.$_POST['g-recaptcha-response']); 
             
    			// Decode json data 
    			$responseData = json_decode($verifyResponse); 
	
				// If reCAPTCHA response is valid 
    			if($responseData->success){ 
    						    
					// Validate email
					if(filter_var($email, FILTER_VALIDATE_EMAIL) === false){
    					$statusMsg = 'Please enter your valid email.';
    				}else{
    					$uploadStatus = 1;
            
						// Upload attachment file
						if(!empty($_FILES["attachment"]["name"])){
                
							// File path config
							$targetDir = "../../upload/";
							$fileName = basename($_FILES["attachment"]["name"]);
							$targetFilePath = $targetDir . $fileName;
							$fileType = pathinfo($targetFilePath,PATHINFO_EXTENSION);
                
							// Allow certain file formats
							$allowTypes = array('pdf', 'jpg', 'png', 'jpeg');
							if(in_array($fileType, $allowTypes)){
     
								// Upload file to the server
								if(move_uploaded_file($_FILES["attachment"]["tmp_name"], $targetFilePath)){
								$uploadedFile = $targetFilePath;
							}else{
								$uploadStatus = 0;
								$statusMsg = "Sorry, there was an error uploading your file.";
							}
						}else{
							$uploadStatus = 0;
							$statusMsg = 'Sorry, only PDF, JPG, JPEG, & PNG files are allowed to upload.';
    					}
    				}       
    				if($uploadStatus == 1){
                
						// Recipient
						$toEmail = 'my_email';

						// Sender
						$from = 'Test';
						$fromName = 'Test';
                
						// Subject
						$emailSubject = 'Contact Request Submitted by '.$name;
                
						// Message 
						$htmlContent = '<h2>Contact Request Submitted</h2>
						<p><b>Name:</b> '.$name.'</p>
						<p><b>Email:</b> '.$email.'</p>
						<p><b>Subject:</b> '.$subject.'</p>
						<p><b>Link:</b> '.$adlink.'</p>
						<p><b>Time:</b> '.$adtime.'</p>
						<p><b>Message:</b><br/>'.$message.'</p>';
                
						// Header for sender info
						$headers = "From: $fromName"." <".$from.">" . "\r\n" . "CC: my_email";
						if(!empty($uploadedFile) && file_exists($uploadedFile)){
                    
							// Boundary 
							$semi_rand = md5(time()); 
							$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
                    
							// Headers for attachment 
							$headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; 
											
							// Multipart boundary 
							$message = "--{$mime_boundary}\n" . "Content-Type: text/html; charset=\"UTF-8\"\n" .
							"Content-Transfer-Encoding: 7bit\n\n" . $htmlContent . "\n\n"; 
                    
							// Preparing attachment
							if(is_file($uploadedFile)){
								$message .= "--{$mime_boundary}\n";
								$fp =    @fopen($uploadedFile,"rb");
								$data =  @fread($fp,filesize($uploadedFile));
								@fclose($fp);
								$data = chunk_split(base64_encode($data));
								$message .= "Content-Type: application/octet-stream; name=\"".basename($uploadedFile)."\"\n" . 
								"Content-Description: ".basename($uploadedFile)."\n" .
								"Content-Disposition: attachment;\n" . " filename=\"".basename($uploadedFile)."\"; size=".filesize($uploadedFile).";\n" . 
								"Content-Transfer-Encoding: base64\n\n" . $data . "\n\n";
    						}     
							$message .= "--{$mime_boundary}--";
							$returnpath = "-f" . $email;
                    
							// Send email
							$mail = mail($toEmail, $emailSubject, $message, $headers, $returnpath);
											
							// Delete attachment file from the server
							@unlink($uploadedFile);
    					}else{
     
							// Set content-type header for sending HTML email
							$headers .= "\r\n". "MIME-Version: 1.0";
							$headers .= "\r\n". "Content-type:text/html;charset=UTF-8";
                    
							// Send email
							$mail = mail($toEmail, $emailSubject, $htmlContent, $headers); 
						}	
     
						// If mail sent
						if($mail){
							echo "<script> location.href='advertisment_thanks.html'; </script>";
							exit; //redirect to the 'thank you' page
							$statusMsg = 'Your contact request has been submitted successfully !';
							$msgClass = 'succdiv';                   
    						$postData = '';
    					}else{
    						$statusMsg = 'Your contact request submission failed, please try again.';
    					}
    				}
    			}
	
    		}else{
    			$statusMsg = 'Please fill all the fields.';
    			 }
    		}
		}
	}
?>
 
Als iets niet werkt kan je het beste alleen dat stukje testen waarom het gaat. Gebruik een simpel formulier....
Code:
<form method="post" action="test_formhandler.php" enctype="multipart/form-data">
  <input type="text" name="name" value="" /><br />
  <input type="text" name="mail" value="" /><br />
  <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>
  <input type="submit" name="submit" value="Send form">
</form>

…. en minimale php voor verificatie.
PHP:
<?php
// recaptcha starting point
$captSucces = false;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // recaptcha-2 config
    $siteKey = 'SITE_KEY';
    $secret  = 'SECRET_KEY';
    // get form data
    $name = (!isset($_POST['name'])) ? "" : trim($_POST['name']);
    $mail = (!isset($_POST['mail'])) ? "" : trim($_POST['mail']);
    $gcap = (!isset($_POST['g-recaptcha-response'])) ? "" : trim($_POST['g-recaptcha-response']);
    // any empty data?
    if (!empty($name) && !empty($mail) && !empty($gcap)) {
        // recaptcha autoload
        require_once __DIR__ . '/src/autoload.php';
        // new instance
        $recaptcha = new \ReCaptcha\ReCaptcha($secret);
        
        // Note: if provider has blocked "file_get_contents('url')" then use "fsockopen()".
        // To do this, remove line: $recaptcha = new \ReCaptcha\ReCaptcha($secret);
        // and uncomment next line below.
        // $recaptcha = new \ReCaptcha\ReCaptcha($secret, new \ReCaptcha\RequestMethod\SocketPost());
        
        // recaptcah verification
        $resp = $recaptcha->setExpectedHostname($_SERVER['SERVER_NAME'])
                          ->verify($gcap, $_SERVER['REMOTE_ADDR']);
        // recaptcah response
        $captSucces = $resp->isSuccess();
    }
}
if ($captSucces) echo('Verification ok'); else echo('Verification not ok');

De benodigde reCaptcha bestanden vind je in de bijlage.
Kijk voor de meest recente versie even op https://github.com/google/recaptcha
Je vindt daar ook voorbeelden van de andere reCaptcha versies.
 

Bijlagen

  • recaptchaV2-2018.12.zip
    16,4 KB · Weergaven: 19
@Bron: jouw stukje code voor minimale php verificatie heeft me op weg geholpen. Thanks!!!
Ik heb nog wel wat moeten puzzelen en uittesten maar momenteel lijkt het te lukken.

Ik heb wel nog wat stom zitten sukkelen met het volgende
Code:
if(filter_var($email, FILTER_VALIDATE_EMAIL) === false)

Ik had daar per ongeluk het volgende van gemaakt
Code:
if(filter_var($email, filter_validate_email) === false)

Wat is eigenlijk het verschil tussen de hoofdletters en de kleine letters? Blijkbaar werkte het niet met kleine letters.
Ik vond daarover niet direct iets terug op google. (of verkeerd gezocht :))

Merci!
 
Omdat het hoofdlettergevoelig is? :p
Het is een vaste constante als flag voor die functie. Die horen altijd in hoofdletters.
 
filter_var($email, FILTER_VALIDATE_EMAIL)
De naam van het "validatie filter" moet inderdaad in hoofdletters.

Het nadeel van dit filter is dat x@y.z een valide emailadres is, wat wel erg simpel is.
De php code hieronder filtert een emailadres wat strikter. Uitleg staat tussen de regels.
Code:
// controleer format van $email
$validEmail = (!preg_match("/^([a-z0-9_\+\-\.]{1,32})@([a-z0-9\-\.]{2,64})\.([a-z]{2,7})$/ix", $email) === false);
// array met toegestane tld's
$whiteTld = [
  '.biz','.com','.edu','.eu','.info','.int','.net','.org','.outlook',
  '.ad','.at','.be','.ch','.de','.dk','.es','.fi','.fr','.gb','.ie',
  '.is','.it','.li','.lu','.mc','.nl','.no','.pt','.se','.uk'
];
// controleer tld in $email
$tld = strtolower(substr($email, strrpos($email, '.')));
if (in_array($tld, $whiteTld) === false) $validEmail = false;
// hier aangekomen geeft $validEmail aan of $email valide is. 
if ($validEmail) {
  echo $email . " is ok";
}
 
Hmm...misschien moet ik die nieuwe filter voor email toch maar eens proberen.
Ik had het hier en daar wel al eens gelezen dat het stukje code dat ik gebruik onvoldoende is.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan