james909 Posted March 13, 2013 Share Posted March 13, 2013 here is my html and php code: <!-- Form Code Start --> <form id='contactus' action='<?php echo $formproc->GetSelfScript(); ?>' method='post' enctype="multipart/form-data" accept-charset='UTF-8'> <fieldset > <input type='hidden' name='submitted' id='submitted' value='1'/> <input type='hidden' name='<?php echo $formproc->GetFormIDInputName(); ?>' value='<?php echo $formproc->GetFormIDInputValue(); ?>'/> <input type='text' class='spmhidip' name='<?php echo $formproc->GetSpamTrapInputName(); ?>' /> <div><span class='error'><?php echo $formproc->GetErrorMessage(); ?></span></div> <div class='container'> Years Active (from and to):<br/> <select name='years_active_from'> <option value='<?php echo $formproc->SafeDisplay('NULL') ?>'>select</option> <option value='<?php echo $formproc->SafeDisplay('from 2013') ?>'>2013</option> <option value='<?php echo $formproc->SafeDisplay('from 2012') ?>'>2012</option> </select> <br/> <span id='contactus_name_errorloc' class='error'></span> </div> <div class='container'> <input type='submit' name='Submit' value='Submit' /> </div> </fieldset> </form> i am trying to get the different drop down options to change the var $years_active_from; to each of the different years, 2012, 2013 and post NULL if the drop down menu is not used. value='<?php echo $formproc->SafeDisplay('NULL') ?>' is not changing the $years_active_from, what is the correct coding for this? thank james Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/ Share on other sites More sharing options...
mweldan Posted March 14, 2013 Share Posted March 14, 2013 Hi james how do we know what inside $formproc. Post the class codes here. thanks Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418528 Share on other sites More sharing options...
james909 Posted March 14, 2013 Author Share Posted March 14, 2013 from the top of the html page <?PHP require_once("./include/fgcontactform.php"); $formproc = new FGContactForm(); ?> the class codes in fgcontactform.php: class FGContactForm { var $years_active_from; var $years_active_to; the problem is it is not posting anything as the $value from the dropdown box (text input and checkboxs are posting the value, and working as they should) here is the code for posting the $value to the email: function FormSubmissionToMail() { $ret_str=''; foreach($_POST as $key=>$value) { if(!$this->IsInternalVariable($key)) { $value = htmlentities($value,ENT_QUOTES,"UTF-8"); $value = nl2br($value); $key = ucfirst($key); $ret_str .= "<div class='label'>$key :-</div><div class='value'>$value </div>\n"; } } Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418559 Share on other sites More sharing options...
cyberRobot Posted March 14, 2013 Share Posted March 14, 2013 So where are you having the problem? Are you trying to pre-populate the form...or do you need help with the script which process the form submissions? Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418575 Share on other sites More sharing options...
james909 Posted March 14, 2013 Author Share Posted March 14, 2013 the problem is i cant get the value entered in the drop down box to post in the email, it is only posting the name 'years_active_from', and isnt posting in the email sent anything for the value entered Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418578 Share on other sites More sharing options...
cyberRobot Posted March 14, 2013 Share Posted March 14, 2013 Please post the applicable code for reading in the variable and sending out the e-mail. Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418579 Share on other sites More sharing options...
james909 Posted March 14, 2013 Author Share Posted March 14, 2013 <?PHP require_once("class.phpmailer.php"); /* Interface to Captcha handler */ class FG_CaptchaHandler { function Validate() { return false;} function GetError(){ return '';} } class FGContactForm { var $receipients; var $errors; var $error_message; var $email; var $years_active_from; var $years_active_to; var $message; var $from_address; var $form_random_key; var $conditional_field; var $arr_conditional_receipients; var $fileupload_fields; var $captcha_handler; var $mailer; function FGContactForm() { $this->receipients = array(); $this->errors = array(); $this->form_random_key = 'YHgyyjkkrtog'; $this->conditional_field=''; $this->arr_conditional_receipients=array(); $this->fileupload_fields=array(); $this->mailer = new PHPMailer(); $this->mailer->CharSet = 'utf-8'; } function EnableCaptcha($captcha_handler) { $this->captcha_handler = $captcha_handler; session_start(); } function AddRecipient($email,$name="") { $this->mailer->AddAddress($email,$name); } function SetFromAddress($from) { $this->from_address = $from; } function SetFormRandomKey($key) { $this->form_random_key = $key; } function GetSpamTrapInputName() { return 'sp'.md5('YJUhjkjhsgsu'.$this->GetKey()); } function SafeDisplay($value_name) { if(empty($_POST[$value_name])) { return''; } return htmlentities($_POST[$value_name]); } function GetFormIDInputName() { $rand = md5('TygshRt'.$this->GetKey()); $rand = substr($rand,0,20); return 'id'.$rand; } function GetFormIDInputValue() { return md5('rfophUsajlk'.$this->GetKey()); } function SetConditionalField($field) { $this->conditional_field = $field; } function AddConditionalReceipent($value,$email) { $this->arr_conditional_receipients[$value] = $email; } function AddFileUploadField($file_field_name,$accepted_types,$max_size) { $this->fileupload_fields[] = array("name"=>$file_field_name, "file_types"=>$accepted_types, "maxsize"=>$max_size); } function ProcessForm() { if(!isset($_POST['submitted'])) { return false; } if(!$this->Validate()) { $this->error_message = implode('<br/>',$this->errors); return false; } $this->CollectData(); $ret = $this->SendFormSubmission(); return $ret; } function RedirectToURL($url) { header("Location: $url"); exit; } function GetErrorMessage() { return $this->error_message; } function GetSelfScript() { return htmlentities($_SERVER['PHP_SELF']); } function GetName() { return $this->name; } function GetEmail() { return $this->email; } function GetMessage() { return htmlentities($this->message,ENT_QUOTES,"UTF-8"); } /*-------- Private (Internal) Functions -------- */ function SendFormSubmission() { $this->CollectConditionalReceipients(); $this->mailer->CharSet = 'utf-8'; $this->mailer->Subject = "Contact form submission from $this->name"; $this->mailer->From = $this->GetFromAddress(); $this->mailer->FromName = $this->name; $this->mailer->AddReplyTo($this->email); $message = $this->ComposeFormtoEmail(); $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message))); $this->mailer->AltBody = @html_entity_decode($textMsg,ENT_QUOTES,"UTF-8"); $this->mailer->MsgHTML($message); $this->AttachFiles(); if(!$this->mailer->Send()) { $this->add_error("Failed sending email!"); return false; } return true; } function CollectConditionalReceipients() { if(count($this->arr_conditional_receipients)>0 && !empty($this->conditional_field) && !empty($_POST[$this->conditional_field])) { foreach($this->arr_conditional_receipients as $condn => $rec) { if(strcasecmp($condn,$_POST[$this->conditional_field])==0 && !empty($rec)) { $this->AddRecipient($rec); } } } } /* Internal variables, that you donot want to appear in the email Add those variables in this array. */ function IsInternalVariable($varname) { $arr_interanl_vars = array('scaptcha', 'submitted', $this->GetSpamTrapInputName(), $this->GetFormIDInputName() ); if(in_array($varname,$arr_interanl_vars)) { return true; } return false; } function FormSubmissionToMail() { $ret_str=''; foreach($_POST as $key=>$value) { if(!$this->IsInternalVariable($key)) { $value = htmlentities($value,ENT_QUOTES,"UTF-8"); $value = n16br($value); $key = ucfirst($key); $ret_str .= "<div class='label'>$key :</div><div class='value'><b>$value </b></div>\n"; } } foreach($this->fileupload_fields as $upload_field) { $field_name = $upload_field["name"]; if(!$this->IsFileUploaded($field_name)) { continue; } $filename = basename($_FILES[$field_name]['name']); $ret_str .= "<div class='label'>File upload '$field_name' :</div><div class='value'>$filename </div>\n"; } return $ret_str; } function ExtraInfoToMail() { $ret_str=''; $ip = $_SERVER['REMOTE_ADDR']; $ret_str = "<div class='label'>IP address of the submitter:</div><div class='value'>$ip</div>\n"; return $ret_str; } function GetMailStyle() { $retstr = "\n<style>". "body,.label,.value { font-family:Arial,Verdana; } ". ".label {font-weight:bold; margin-top:5px; font-size:1em; color:#333;} ". ".value {margin-bottom:15px;font-size:0.8em;padding-left:5px;} ". "</style>\n"; return $retstr; } function GetHTMLHeaderPart() { $retstr = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'."\n". '<html><head><title></title>'. '<meta http-equiv=Content-Type content="text/html; charset=utf-8">'; $retstr .= $this->GetMailStyle(); $retstr .= '</head><body>'; return $retstr; } function GetHTMLFooterPart() { $retstr ='</body></html>'; return $retstr ; } function ComposeFormtoEmail() { $header = $this->GetHTMLHeaderPart(); $formsubmission = $this->FormSubmissionToMail(); $extra_info = $this->ExtraInfoToMail(); $footer = $this->GetHTMLFooterPart(); $message = $header."Submission form:<p>$formsubmission</p><hr/>$extra_info".$footer; return $message; } function AttachFiles() { foreach($this->fileupload_fields as $upld_field) { $field_name = $upld_field["name"]; if(!$this->IsFileUploaded($field_name)) { continue; } $filename =basename($_FILES[$field_name]['name']); $this->mailer->AddAttachment($_FILES[$field_name]["tmp_name"],$filename); } } function GetFromAddress() { if(!empty($this->from_address)) { return $this->from_address; } $host = $_SERVER['SERVER_NAME']; $from ="nobody@$host"; return $from; } function Validate() { $ret = true; //security validations if(empty($_POST[$this->GetFormIDInputName()]) || $_POST[$this->GetFormIDInputName()] != $this->GetFormIDInputValue() ) { //The proper error is not given intentionally $this->add_error("Automated submission prevention: case 1 failed"); $ret = false; } //This is a hidden input field. Humans won't fill this field. if(!empty($_POST[$this->GetSpamTrapInputName()]) ) { //The proper error is not given intentionally $this->add_error("Automated submission prevention: case 2 failed"); $ret = false; } //email validations if(empty($_POST['email'])) { $this->add_error("Please provide your email address"); $ret = false; } else if(strlen($_POST['email'])>256) { $this->add_error("Email address is too big! An email address can be 256 characters long at most."); $ret = false; } else if(!$this->validate_email($_POST['email'])) { $this->add_error("Please provide a valid email address"); $ret = false; } if($_POST['years_active_to'] = NULL) { $this->add_error("Please select Year Active To"); $ret = false; } else //captcha validaions if(isset($this->captcha_handler)) { if(!$this->captcha_handler->Validate()) { $this->add_error($this->captcha_handler->GetError()); $ret = false; } } //file upload validations if(!empty($this->fileupload_fields)) { if(!$this->ValidateFileUploads()) { $ret = false; } } return $ret; } function ValidateFileType($field_name,$valid_filetypes) { $ret=true; $info = pathinfo($_FILES[$field_name]['name']); $extn = $info['extension']; $extn = strtolower($extn); $arr_valid_filetypes= explode(',',$valid_filetypes); if(!in_array($extn,$arr_valid_filetypes)) { $this->add_error("Valid file types are: $valid_filetypes"); $ret=false; } return $ret; } function ValidateFileSize($field_name,$max_size) { $size_of_uploaded_file = $_FILES[$field_name]["size"]/1024;//size in KBs if($size_of_uploaded_file > $max_size) { $this->add_error("The file is too big. File size should be less than $max_size KB"); return false; } return true; } function IsFileUploaded($field_name) { if(empty($_FILES[$field_name]['name'])) { return false; } if(!is_uploaded_file($_FILES[$field_name]['tmp_name'])) { return false; } return true; } function ValidateFileUploads() { $ret=true; foreach($this->fileupload_fields as $upld_field) { $field_name = $upld_field["name"]; $valid_filetypes = $upld_field["file_types"]; if(!$this->IsFileUploaded($field_name)) { continue; } if($_FILES[$field_name]["error"] != 0) { $this->add_error("Error in file upload; Error code:".$_FILES[$field_name]["error"]); $ret=false; } if(!empty($valid_filetypes) && !$this->ValidateFileType($field_name,$valid_filetypes)) { $ret=false; } if(!empty($upld_field["maxsize"]) && $upld_field["maxsize"]>0) { if(!$this->ValidateFileSize($field_name,$upld_field["maxsize"])) { $ret=false; } } } return $ret; } function StripSlashes($str) { if(get_magic_quotes_gpc()) { $str = stripslashes($str); } return $str; } /* Sanitize() function removes any potential threat from the data submitted. Prevents email injections or any other hacker attempts. if $remove_nl is true, newline chracters are removed from the input. */ function Sanitize($str,$remove_nl=true) { $str = $this->StripSlashes($str); if($remove_nl) { $injections = array('/(\n+)/i', '/(\r+)/i', '/(\t+)/i', '/(%0A+)/i', '/(%0D+)/i', '/(%08+)/i', '/(%09+)/i' ); $str = preg_replace($injections,'',$str); } return $str; } /*Collects clean data from the $_POST array and keeps in internal variables.*/ function CollectData() { $this->email = $this->Sanitize($_POST['email']); $this->years_active_from = $this->Sanitize($_POST['years_active_from']); $this->years_active_to = $this->Sanitize($_POST['years_active_to']); /*newline is OK in the message.*/ $this->message = $this->StripSlashes($_POST['message']); } function add_error($error) { array_push($this->errors,$error); } function validate_email($email) { return eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $email); } function GetKey() { return $this->form_random_key.$_SERVER['SERVER_NAME'].$_SERVER['REMOTE_ADDR']; } } ?> there is my fgcontactform.php code Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418629 Share on other sites More sharing options...
cyberRobot Posted March 14, 2013 Share Posted March 14, 2013 One thing that stands out to me is the following line of code: $value = n16br($value); Should that be nl2br()? http://us.php.net/manual/en/function.nl2br.php Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418641 Share on other sites More sharing options...
james909 Posted March 14, 2013 Author Share Posted March 14, 2013 yes, it is nl2br Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418645 Share on other sites More sharing options...
cyberRobot Posted March 14, 2013 Share Posted March 14, 2013 Hmm...have you tried using var_dump() or print_r() to see if the POST variables contain what you expect? Of course, you'll want to add the test(s) to the portion of the script which processes the form submission. Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418698 Share on other sites More sharing options...
james909 Posted March 14, 2013 Author Share Posted March 14, 2013 where would i put the var_dump() code, i after i hit the submit button it goes to a thank_you_for_your_submission html page Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418705 Share on other sites More sharing options...
james909 Posted March 15, 2013 Author Share Posted March 15, 2013 (edited) the value posts correctly and is displayed in the email using checkboxs, like: Active From: BUT checkboxs and dropdown lists only post the name and not the value to the email? i have been going through this for a while now,i cant understand why the values arent posting, i would expect: <option value='<?php echo $formproc->SafeDisplay('from 2013') ?>'>2013</option> to post the value, to the select name variable, but it isnt Edited March 15, 2013 by james909 Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418772 Share on other sites More sharing options...
jazzman1 Posted March 15, 2013 Share Posted March 15, 2013 (edited) Why are you closing the php code with single quotes? <select name='years_active_from'><option value='<?php echo $formproc->SafeDisplay('NULL') ?>'>select</option><option value='<?php echo $formproc->SafeDisplay('from 2013') ?>'>2013</option><option value='<?php echo $formproc->SafeDisplay('from 2012') ?>'>2012</option></select> Edited March 15, 2013 by jazzman1 Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418775 Share on other sites More sharing options...
james909 Posted March 15, 2013 Author Share Posted March 15, 2013 i am using single quotes, because that is how it is used in the text box input, like this: <div class='container'> <label for='name' >Active From: </label><br/> <input type='text' name='years_active_from' id='years_active_from' value='<?php echo $formproc->SafeDisplay('years_active_from') ?>' maxlength="100" /><br/> <span id='contactus_name_errorloc' class='error'></span> </div> the text input works fine, but the same code is not showing a value for dropdown lists Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418776 Share on other sites More sharing options...
jazzman1 Posted March 15, 2013 Share Posted March 15, 2013 It is my fault, there are out of the php tags, sorry Did you get a correct value before to send the form to the web server? Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418782 Share on other sites More sharing options...
cyberRobot Posted March 15, 2013 Share Posted March 15, 2013 where would i put the var_dump() code, i after i hit the submit button it goes to a thank_you_for_your_submission html page As I think jazzman1 is suggesting, I would first open the form in a browser and check its source code. Does the drop-down menu have the correct value associated with it? If so, you should then try to access the POST variable for the drop-down menu before the instance of the form-processing class is created. For example <?PHP print '<div>Drop-down value: ' . $_POST['years_active_from'] . '</div>'; require_once("./include/fgcontactform.php"); $formproc = new FGContactForm(); ?> If the drop-down value displays, the problem probably lies within the class. Is there anything else that happens before the class instance is created? Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418796 Share on other sites More sharing options...
cyberRobot Posted March 15, 2013 Share Posted March 15, 2013 Actually, the problem might be caused the SafeDisplay() method. <?php function SafeDisplay($value_name) { if(empty($_POST[$value_name])) { return''; } return htmlentities($_POST[$value_name]); } ?> Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418800 Share on other sites More sharing options...
cyberRobot Posted March 15, 2013 Share Posted March 15, 2013 Hmm...part of my post was cut off. When visiting the form for the first time, POST variables will be empty. Anything passed to SafeDisplay() that's empty will be deleted. To counteract that, you could just skip the method for hard-coded values: <option value='from 2013'>2013</option> Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418801 Share on other sites More sharing options...
james909 Posted March 15, 2013 Author Share Posted March 15, 2013 thank you cyberrobot and jazzman, i feel like i'm getting closer to solving this mystery of the missing values. this is the page source in browser <div class='container'> Years Active (from and to):<br/> <select name='years_active_from'> <option value=''>select</option> <option value=''>2013</option> <option value=''>2012</option> </select> <br/> <span id='contactus_name_errorloc' class='error'></span> </div> and if i use the hard coded option code: <option value='from 2013'>2013</option> it does show the value in the page source, but nothing is posted to the email? Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418822 Share on other sites More sharing options...
jazzman1 Posted March 15, 2013 Share Posted March 15, 2013 Can you show us the string before attaching to phpMailer transport method, please. Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418827 Share on other sites More sharing options...
jazzman1 Posted March 15, 2013 Share Posted March 15, 2013 I want you to check what values get inside that method: $this->mailer->AddAddress($email,$name); Quote Link to comment https://forums.phpfreaks.com/topic/275626-php-email-send-form-help-with-drop-down-list-on-_post-send-form/#findComment-1418829 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.