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?

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

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

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;
?>

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.

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 ....

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.

Archived

This topic is now archived and is closed to further replies.

×
×
  • 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.