james909 Posted March 7, 2013 Share Posted March 7, 2013 (edited) i am using checkboxes in a a php email send form. here is the my code: <div class='container'> <label for='name' >Music Occupations (tick upto 4 most suitable): </label><br/> <input type="checkbox" name="occupationarray[]" value="DJ" />DJ <input type="checkbox" name="occupationarray[]" value="Producer" />Producer <input type="checkbox" name="occupationarray[]" value="Performer" />Performer <input type="checkbox" name="occupationarray[]" value="Musician" />Musician <input type="checkbox" name="occupationarray[]" value="Remixer" />Remixer <input type="checkbox" name="occupationarray[]" value="Song Writer" />Song Writer <input type="checkbox" name="occupationarray[]" value="Singer" />Singer <input type="checkbox" name="occupationarray[]" value="Record Label Owner" />Record Label Owner <br/> <?php $occupation = implode('', $occupationarray); ?> <span id='contactus_name_errorloc' class='error'></span> </div> i am trying to turn the array generated by the checkboxes into a string, but it is returning the following error: Warning: implode() [function.implode]: Invalid arguments passed in /home/public_html/testpage.php on line 212 how can i correct this, and correctly make a string from the checkbox array? Edited March 7, 2013 by james909 Quote Link to comment Share on other sites More sharing options...
Barand Posted March 7, 2013 Share Posted March 7, 2013 (edited) We cannot see your code so how would we know? or do you mean this <?php $occupation = implode('', $occupationarray); ?> No sign of a form. No data being sent. Hardly surprising. http://www.php.net/manual/en/tutorial.forms.php Edited March 7, 2013 by Barand Quote Link to comment Share on other sites More sharing options...
james909 Posted March 7, 2013 Author Share Posted March 7, 2013 thank you for your reply, sorry i should of been more clearer. here is the part of my php that i am having the problem <?php $occupation = implode('', $occupationarray); ?> before when i had: <div class='container'> <label for='name' >Music Occupations (ie. DJ, Producer, Song writer, etc): </label><br/> <input type='text' name='occupation' id='occupation' value='<?php echo $formproc->SafeDisplay('occupation') ?>' maxlength="100" /><br/> <span id='contactus_name_errorloc' class='error'></span> </div> it had no problems. but i can not get the checkboxes array to work as it should and be turned into a string. it returns the following error on my page Warning: implode() [function.implode]: Invalid arguments passed in /home/public_html/testpage.php on line 212 Quote Link to comment Share on other sites More sharing options...
Barand Posted March 7, 2013 Share Posted March 7, 2013 The code you posted had no sign of <form> tags nor any evidence of subsequently processing data sent from the form. Where id $occupationarray given a value? Quote Link to comment Share on other sites More sharing options...
Barand Posted March 7, 2013 Share Posted March 7, 2013 (edited) try this as an example <?php if (isset($_POST['occupationarray'])) { echo implode(', ' , $_POST['occupationarray']) . '<hr>'; } echo <<<HTML <form method='POST'> <div class='container'> <label for='name' >Music Occupations (tick upto 4 most suitable): </label><br/> <input type="checkbox" name="occupationarray[]" value="DJ" />DJ <input type="checkbox" name="occupationarray[]" value="Producer" />Producer <input type="checkbox" name="occupationarray[]" value="Performer" />Performer <input type="checkbox" name="occupationarray[]" value="Musician" />Musician <input type="checkbox" name="occupationarray[]" value="Remixer" />Remixer <input type="checkbox" name="occupationarray[]" value="Song Writer" />Song Writer <input type="checkbox" name="occupationarray[]" value="Singer" />Singer <input type="checkbox" name="occupationarray[]" value="Record Label Owner" />Record Label Owner <br/> <?php $occupation = implode('', $occupationarray); ?> <span id='contactus_name_errorloc' class='error'></span> </div> <input type="submit" name="btnSubmit" value="Submit"> </form> HTML; ?> Edited March 7, 2013 by Barand Quote Link to comment Share on other sites More sharing options...
james909 Posted March 8, 2013 Author Share Posted March 8, 2013 thank you barand. i noticed you added the 'if' at the top, it is still returning the same error though: Warning: implode() [function.implode]: Invalid arguments passed in /home/public_html/testpage.php on line 212 i have a php page 'FGContactForm' that is called at the top of my html page, using '$formproc = new FGContactForm();' in FGContactForm.php at the top i set the variable classes like this: class FGContactForm { var $occupation; var $occupationarray; and declare it an array using: function FGContactForm() { $this->occupationarray = array(); sorry, but i am quite new to php and still learning. the code works fine using a text box, but i am having trouble with the checkboxes and getting the answers to convert to a string instead of an array. Quote Link to comment Share on other sites More sharing options...
Barand Posted March 8, 2013 Share Posted March 8, 2013 In the example I posted there is a form and the code (at the top) that processes the data sent by form. I still have seen nothing similar in any the code you posted Quote Link to comment Share on other sites More sharing options...
james909 Posted March 8, 2013 Author Share Posted March 8, 2013 this is the form code wrapping the container div: <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='spamhide' name='<?php echo $formproc->GetSpamTrapInputName(); ?>' /> <div><span class='error'><?php echo $formproc->GetErrorMessage(); ?></span></div> .... checkbox code here .... Quote Link to comment Share on other sites More sharing options...
Barand Posted March 8, 2013 Share Posted March 8, 2013 OK. So that form is going to POST the data entered by the user and that data has to be processed. So where is your code to handle the data in the $_POST array? Quote Link to comment Share on other sites More sharing options...
james909 Posted March 8, 2013 Author Share Posted March 8, 2013 in this .php: <?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 $djname; var $djbirthname; var $djbirthplace; var $occupation; var $genre; var $aliases; var $yearsactive; var $website; var $releases; var $soundcloud; 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 = 'HTgsjhartag'; $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('KHGdffgdfvsgst'.$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('jhgafggajhg'.$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 = nl2br($value); $key = ucfirst($key); $ret_str .= "<div class='label'>$key :</div><div class='value'>$value </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 from 'contact us' 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; } //djname validations if(empty($_POST['djname'])) { $this->add_error("Please provide DJ name"); $ret = false; } else if(strlen($_POST['djname'])>100) { $this->add_error("DJ Name is too long! (max 100 characters)"); $ret = false; } //djbirthname validations if(empty($_POST['djbirthname'])) { $this->add_error("Please provide DJ Birth Name"); $ret = false; } else if(strlen($_POST['djbirthname'])>100) { $this->add_error("DJ Birth Name is too long! (max 100 characters)"); $ret = false; } //djbirthplace validations if(empty($_POST['djbirthplace'])) { $this->add_error("Please provide DJ Birth Place"); $ret = false; } else if(strlen($_POST['djbirthplace'])>100) { $this->add_error("DJ Birth Place name is too long! (max 100 characters)"); $ret = false; } //occupation validations if(empty($_POST['occupation'])) { $this->add_error("Please check atleast 1 DJ Occupation checkbox"); $ret = false; } else if(strlen($_POST['occupation'])>200) { $this->add_error("Too many DJ Occupations have been selected!"); $ret = false; } //genre validations if(empty($_POST['genre'])) { $this->add_error("Please provide the DJ's Genre / Music Stlye"); $ret = false; } else if(strlen($_POST['genre'])>100) { $this->add_error("DJ Genre name(s) is too long! (max 100 characters)"); $ret = false; } //aliases validations if(empty($_POST['aliases'])) { $this->add_error("Please provide the DJ's other Aliases / other Names"); $ret = false; } else if(strlen($_POST['aliases'])>100) { $this->add_error("Other DJ Aliases is too long! (max 100 characters)"); $ret = false; } //yearsactive validations if(empty($_POST['yearsactive'])) { $this->add_error("Please provide the DJ's Years Active, from and to dates"); $ret = false; } else if(strlen($_POST['yearsactive'])>100) { $this->add_error("DJ's Years Active text is too long! (max 100 characters)"); $ret = false; } //website validations if(empty($_POST['website'])) { $this->add_error("Please provide the DJ's Website URL, Facebook or Soundcloud Page"); $ret = false; } else if(strlen($_POST['website'])>100) { $this->add_error("DJ's Website text is too long! (max 100 characters)"); $ret = false; } //releases validations if(empty($_POST['releases'])) { $this->add_error("Please provide 2 of the DJ's Most Popular Releases"); $ret = false; } else if(strlen($_POST['releases'])>100) { $this->add_error("DJ's Most Popular Releases text is too long! (max 100 characters)"); $ret = false; } //soundcloud validations if(empty($_POST['soundcloud'])) { $this->add_error("Please provide 2 of the DJ's Soundcloud Track IDs"); $ret = false; } else if(strlen($_POST['soundcloud'])>100) { $this->add_error("DJ's Soundcloud Track IDs text is too long! (max 100 characters)"); $ret = false; } //message validaions if(strlen($_POST['message'])>6144) { $this->add_error("Bio is too big! (max 6000 character, roughly 1000 words)"); $ret = false; } //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->djname = $this->Sanitize($_POST['djname']); $this->djbirthname = $this->Sanitize($_POST['djbirthname']); $this->djbirthplace = $this->Sanitize($_POST['djbirthplace']); $this->occupation = $this->Sanitize($_POST['occupation']); $this->genre = $this->Sanitize($_POST['genre']); $this->aliases = $this->Sanitize($_POST['aliases']); $this->yearsactive = $this->Sanitize($_POST['yearsactive']); $this->website = $this->Sanitize($_POST['website']); $this->releases = $this->Sanitize($_POST['releases']); $this->soundcloud = $this->Sanitize($_POST['soundcloud']); /*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']; } } ?> $occupation is set to be handled as a string, so i am trying to changed the checkboxes array to a string. Quote Link to comment Share on other sites More sharing options...
Barand Posted March 8, 2013 Share Posted March 8, 2013 Change the class to handle it as an array of checkboxes. Note your class expects $_POST['occupation'] whereas you are now sending $_POST['occupationarray'] Quote Link to comment Share on other sites More sharing options...
james909 Posted March 8, 2013 Author Share Posted March 8, 2013 i am trying to change the array from the checkboxes to a string before it goes to the FGContactForm.php and gets sent to email Quote Link to comment 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.