Jump to content

problems turning an array from checkboxes into a string


james909

Recommended Posts

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 by james909
Link to comment
Share on other sites

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
Link to comment
Share on other sites

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 by Barand
Link to comment
Share on other sites

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.
Link to comment
Share on other sites

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 ....
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.