Help With For Each Loop

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
dissonantallure
Forum Newbie
Posts: 21
Joined: Tue Feb 03, 2009 7:48 pm

Help With For Each Loop

Post by dissonantallure »

This is an excerpt of a PHP form mail script which i intend to modify.

The variable $errors is defined as such :

Code: Select all

 
 
unset($errors);
        $errors = array();
 
 
        if ($verify_method == 'recaptcha') {
            @include_once('recaptchalib.php');
            $privatekey = $re_private_key;
            $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);
            if (!$resp->is_valid) {
                $errors[] = DDFM_INVALIDVER;
            }
        }
 
 
 
        // Get form input and put in array
 
        foreach ($_POST as $key => $i) {
 
            if ($key != "form_submitted") {
                if (!is_array($i)) {
                    $form_input[strtolower($key)] = trim($i);
                } else {
                    $form_input[strtolower($key)] = $i;
                }
            }
 
        }
 
        
        $msg_field_sep = ': ';
        $msg_field_line_end = "\n\n";
 
 
        $fsindex = -1;
 
        // Validate input
        foreach ($form_struct as $fs) {
        
            if (!isset($form_input[$fs['fieldname']])) {
                $form_input[$fs['fieldname']] = '';
            }
 
            $fsindex++;
 
            // check for fields used in vars
            if (isset($form_input[$fs['fieldname']])) {
                $sender_name = ddfm_str_replace($fs['fieldname'], ddfm_stripslashes($form_input[$fs['fieldname']]), $sender_name);
                $sender_email = ddfm_str_replace($fs['fieldname'], ddfm_stripslashes($form_input[$fs['fieldname']]), $sender_email);
                $email_subject = ddfm_str_replace($fs['fieldname'], ddfm_stripslashes($form_input[$fs['fieldname']]), $email_subject);
            }
 
            switch ($fs['type']) {
            
                case 'date':
 
                    // type=date|class=|label=|fieldname=|req=(TRUEFALSE)
 
                    $t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 
                    if ((strtolower($fs['req']) == 'true') && ($t == "")) { 
 
                        $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 
                    } else if (ddfm_injection_chars($t)) {
 
                        $errors[] = DDFM_INVALIDINPUT . " '" . $fs['label'] . "'";
 
                    } 
 
                    $csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;
                    $mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;
                    $message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);
                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                    $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
                    break;
 
                case 'text':
 
                    // type=text|class=|label=|fieldname=|max=|req=(TRUEFALSE)|[ver=]|[default=]
 
                    $t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 
                    if ((strtolower($fs['req']) == 'true') && ($t == "")) { 
 
                        $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 
                    } else if (strlen($t) > (int)$fs['max']) {
 
                        $errors[] = $fs['max'] . ' ' . DDFM_MAXCHARLIMIT . " '" . $fs['label'] . "'";
 
                    } else if (ddfm_injection_chars($t)) {
 
                        $errors[] = DDFM_INVALIDINPUT . " '" . $fs['label'] . "'";
 
                    } else  if ((strtolower($fs['ver']) == 'email') && ((strtolower($fs['req']) == "true") || ($t != ""))) {
 
                        if (!dd_is_valid_email($t)) $errors[] = DDFM_INVALIDEMAIL . " '" . $fs['label'] . "'";
 
                    } else if ((strtolower($fs['ver']) == 'url') && ((strtolower($fs['req']) == "true") || ($t != ""))) {
 
                        if (!ddfm_is_valid_url($t)) $errors[] = DDFM_INVALIDURL . " '" . $fs['label'] . "'";
 
                    } 
 
                    $csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;
                    $mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;
                    $message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);
                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                    $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
                    
                    
                break;
 
                case 'password':
 
                    // type=password|class=|label=|fieldname=|max=|req=(TRUEFALSE)|confirm=(TRUEFALSE)
 
                    $t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 
                    if ((strtolower($fs['req']) == 'true') && ($t == "")) {
 
                        $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
        
                    } else if (strlen($t) > (int)$fs['max']) {
 
                        $errors[] = $fs['max'] . ' ' . DDFM_MAXCHARLIMIT . " '" . $fs['label'] . "'";
 
                    } else if (ddfm_injection_chars($t)) {
 
                        $errors[] = DDFM_INVALIDINPUT . " '" . $fs['label'] . "'";
 
                    } else if (strtolower($fs['confirm']) == 'true') {
 
                        $tc = ddfm_stripslashes($form_input[$fs['fieldname']  . 'c']);
            
                        if ($t != $tc) $errors[] = DDFM_NOMATCH . " '" . $fs['label'] . "'";
 
                    }
 
                    $csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;
                    $mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;
                    $message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);
                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                    $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
 
                    break;
 
                case 'textarea':
                case 'widetextarea':
            
                    // type=textarea|class=|label=|fieldname=|max=|rows=|req=(TRUEFALSE)|[default=]
 
                    $t = ddfm_stripslashes($form_input[$fs['fieldname']]);
 
                    if ((strtolower($fs['req']) == 'true') && ($t == "")) {
 
                        $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 
                    } else if (strlen($t) > (int)$fs['max']) {
            
                        $errors[] = $fs['max'] . ' ' . DDFM_MAXCHARLIMIT . " '" . $fs['label'] . "'";
 
                    }
 
                    $csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;
                    $mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;
                    $message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);
                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                    $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
 
                    break;              
 
                case 'verify':
 
                    // type=verify|class=|label=
 
                    if ($verify_method == 'basic') {
 
                        $t = ddfm_stripslashes($form_input['fm_verify']);
 
                        if ($t == "") {
 
                            $errors[] = DDFM_MISSINGVER;
 
                        } else if (trim($_COOKIE["ddfmcode"]) == "") {
 
                            $errors[] = DDFM_NOVERGEN;
 
                        } else if ($_COOKIE["ddfmcode"] != md5(strtoupper($t))) { 
 
                            $errors[] = DDFM_INVALIDVER;
 
                        } 
 
                    }
 
                    break;
 
                case 'checkbox':
 
                    //  type=checkbox|class=|label=|data=
                    //    (fieldname),(text),(CHECKED),(REQUIRED),
                    //    (fieldname),(text),(CHECKED),(REQUIRED),
                    //    (fieldname),(text),(CHECKED),(REQUIRED)
 
                    $data = explode(",", trim($fs['data']));
 
                    $tmp_msg = array();
 
                    for ($i = 0; $i < count($data); $i+=4) {
                        
                        $t = '';
                        if (isset($form_input[$data[$i]])) {
                            $t = ddfm_stripslashes(trim($form_input[$data[$i]]));
                        }
 
                        if ((strtolower($data[$i+3]) == 'true') && ($t == "")) {
                            $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
                        }
 
                        if ($t != "") $tmp_msg[] = $t;
 
                        $message_structure = ddfm_str_replace($data[$i], $t, $message_structure);
                        $auto_reply_message = ddfm_str_replace($data[$i], $t, $auto_reply_message);
                        $sent_message = ddfm_str_replace($data[$i], ddfm_bsafe($t), $sent_message);
 
 
                    }
 
                    $csv .= str_replace($save_delimiter, ' ', implode(', ', $tmp_msg)) . $save_delimiter;
                    $mail_message .= $fs['label'] . $msg_field_sep . implode(', ', $tmp_msg) . $msg_field_line_end;
 
                    break;
                
                case 'radio':
 
                    //  type=radio|class=|label=|fieldname=|req=|[default=]|data=
                    //    (text),(text),(text),(text)
 
                    $t = ddfm_stripslashes(trim($form_input[$fs['fieldname']]));
 
                    if ((strtolower($fs['req']) == 'true') && ($t == "")) {
 
                        $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 
                    }
 
                    $csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;    
                    $mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;
                    $message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);
                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                    $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
                    break;
 
                case 'select':
 
                    //  type=select|class=|label=|fieldname=|multi=(TRUEFALSE)|data=
                    //    (#group),(text),(text),(#group),(text),(text)
 
                    $data = explode(",", trim($fs['data']));
 
                    if (strtolower($fs['multi']) != 'true') {               
 
                        $t = ddfm_stripslashes($form_input[$fs['fieldname']]);
                        
                        $first_item = $data[0];
 
                        if ((strtolower($fs['req']) == 'true') && (($t == "") || ($t == $first_item))) {
 
                            $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 
                        }
                    
                        $csv .= str_replace($save_delimiter, ' ', $t) . $save_delimiter;
                        $mail_message .= $fs['label'] . $msg_field_sep . $t . $msg_field_line_end;
                        $message_structure = ddfm_str_replace($fs['fieldname'], $t, $message_structure);
                        $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                        $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
 
                    } else { // multi = true
    
                        $t = (array)$form_input[$fs['fieldname']];
 
                        if ((count($t) == 1) && ($t[0] == '')) {
                            unset($t[0]);
                        }
 
                        if ((strtolower($fs['req']) == 'true') && (count($t) == 0)) {
                            $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
                        }
                        
                        $tmp_msg = array();
 
                        foreach ($t as $tt) {
                            if ($tt != "") $tmp_msg[] = $tt;
                        }
 
                        $csv .= str_replace($save_delimiter, ' ', implode(', ', $tmp_msg)) . $save_delimiter;
                        $mail_message .= $fs['label'] . $msg_field_sep . implode(', ', $tmp_msg) . $msg_field_line_end;
                        $message_structure = ddfm_str_replace($fs['fieldname'], implode(', ', $tmp_msg), $message_structure);
                        $auto_reply_message = ddfm_str_replace($fs['fieldname'], implode(', ', $tmp_msg), $auto_reply_message);
                        $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe(implode(', ', $tmp_msg)), $sent_message);
                
                    }
 
                    break;
 
                case 'file':
 
                    // type=file|class=|label=|fieldname=|[req=]|[allowed=1,2,3]
 
                    if ((strtolower($fs['req']) == 'true') && (($_FILES[$fs['fieldname']]['name'] == ""))) { 
                        $errors[] = DDFM_MISSINGFILE . " '" . $fs['label'] . "'";
                    }
                    
 
                    $allowed = array();
 
                    if (trim($fs['allowed']) != "") {
                        $allowed = (array)explode(",", trim(strtolower($fs['allowed'])));
                    }
 
                    if (($_FILES[$fs['fieldname']]['name'] != "") && ((int)$_FILES[$fs['fieldname']]['size'] == 0)) {
 
                            $errors[] = DDFM_FILETOOBIG . ' ' . $_FILES[$fs['fieldname']]['name'];
 
                    } else if ($_FILES[$fs['fieldname']]['tmp_name'] != "") {
 
                        if (($_FILES[$fs['fieldname']]['error'] == UPLOAD_ERR_OK) && ($_FILES[$fs['fieldname']]['size'] > 0)) {
 
                            $origfilename = $_FILES[$fs['fieldname']]['name'];
                            $filename = explode(".", $_FILES[$fs['fieldname']]['name']);
                            $filenameext = $filename[count($filename) - 1];
                            unset($filename[count($filename) - 1]);
                            $filename = implode(".", $filename);
                            $filename = substr($filename, 0, 15) . "." . $filenameext;
                            $file_ext_allow = TRUE;
 
                            if (count($allowed) > 0) {
 
                                $file_ext_allow = FALSE;
                                
                                for ($x = 0; $x < count($allowed); $x++) { 
                                    if (strtolower($filenameext) == strtolower($allowed[$x])) {
                                        $file_ext_allow = TRUE;
                                    }
                                } 
                            }
                            if ($file_ext_allow) {
 
                                if((int)$_FILES[$fs['fieldname']]['size'] < $max_file_size) {
 
                                    $attached_files[$attached_index]['file'] = $_FILES[$fs['fieldname']]['name']; 
                                    $attached_files[$attached_index]['tmpfile'] = $_FILES[$fs['fieldname']]['tmp_name']; 
                                    $attached_files[$attached_index]['content_type'] = $_FILES[$fs['fieldname']]['type']; 
                                    $attached_index++;
 
                                    $csv .= str_replace($save_delimiter, ' ', $_FILES[$fs['fieldname']]['name']) . $save_delimiter;
                                    
                                    if (!$attach_save) {
                                        $mail_message .= DDFM_ATTACHED . $msg_field_sep . $_FILES[$fs['fieldname']]['name'] . "\n\n"; 
                                    }
                                    
                                    $message_structure = ddfm_str_replace($fs['fieldname'], $_FILES[$fs['fieldname']]['name'], $message_structure);
                                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $_FILES[$fs['fieldname']]['name'], $auto_reply_message);
                                    $sent_message = ddfm_str_replace($fs['fieldname'], $_FILES[$fs['fieldname']]['name'], $sent_message);                   
 
                                } else { 
                                    $errors[] = DDFM_FILETOOBIG . ' ' . $_FILES[$fs['fieldname']]['name'];
                                }
                            } else { 
                                $errors[] = DDFM_INVALIDEXT . ' ' . $_FILES[$fs['fieldname']]['name'];
                            }
                        } else { 
                            $errors[] = DDFM_UPLOADERR . ' ' . $_FILES[$fs['fieldname']]['name'];
                        }
                    } 
 
                    $message_structure = ddfm_str_replace($fs['fieldname'], '', $message_structure);
                    $auto_reply_message = ddfm_str_replace($fs['fieldname'], $t, $auto_reply_message);
                    $sent_message = ddfm_str_replace($fs['fieldname'], ddfm_bsafe($t), $sent_message);
 
                    break;
 
 
                case 'selrecip':
 
                    //  type=selrecip|class=|label=|data=(select),User1,user1@domain.com,User2 etc..
 
                    $data = explode(",", trim($fs['data']));
                    
                    $t = ddfm_stripslashes($form_input['fm_selrecip']);
 
                    if (($t == "") || ($t == $data[0])) {
 
                        $errors[] = DDFM_MISSINGFIELD . " '" . $fs['label'] . "'";
 
                    } else {
 
                        for ($i = 1; $i < count($data); $i+=2) {
 
                            if ($data[$i] == $t) {
                                $sel_recip = trim($data[$i+1]);
                            }
                        }
 
                    }   
 
                    break;
 
            }
 
 
        }
 
 
 
        // make sure no un-used fieldnames are left in template
        foreach ($form_struct as $fs) {
            $message_structure = ddfm_str_replace($fs['fieldname'], '', $message_structure);
            $auto_reply_message = ddfm_str_replace($fs['fieldname'], '', $auto_reply_message);
            $sent_message = ddfm_str_replace($fs['fieldname'], '', $sent_message);
        }
 
 
 
        if (ddfm_injection_chars($sender_name)) $errors[] = DDFM_INVALIDINPUT;
        if (ddfm_injection_chars($sender_email)) $errors[] = DDFM_INVALIDINPUT;
        if (ddfm_injection_chars($email_subject)) $errors[] = DDFM_INVALIDINPUT;
 
 
 
I then say:

Code: Select all

 
        if ($errors) {
 
            $o .= '<div class="ddfmwrap"><div class="ddfmerrors">' . DDFM_ERRORMSG . '</div>';
            $o .= '<div class="errorlist">';
            foreach ($errors as $err) {
                $o .= $err . '<br/>';   
            }
            
            $o .= '</div><div style="clear:both;"><!-- --></div></div>';
 
 
This gives me an output of all errors like so;

Missing Field 'Name'
Missing Field 'Email'
Missing Field 'Verify'
Etc....

Name: [-- Input --]

Email: [-- Input --]

I would like to then take $err and break it up into individual errors which I can place next to each input. Like So....

Name: [-- Input --] Missing Field 'Name'

Email: [-- Input --] Missing Field 'Email'

Can anyone Please Help me? I feel like I am so close I just need a little help, if you have any information that can help me please don't hesitate to post. Thank You!
corkman
Forum Newbie
Posts: 14
Joined: Thu Apr 09, 2009 3:40 am

Re: Help With For Each Loop

Post by corkman »

I hope I understand what you are trying to do ;) You will have to write something like:

Code: Select all

.
.
 
echo ('<input type="text" name="name">');
if (isset($_REQUEST["formsent"])
  if (!isset($_REQUEST["name"]))
    echo (" missing");
echo ("<br>");
 
echo ('<input type="text" name="email">');
if (isset($_REQUEST["formsent"])
  if (!isset($_REQUEST["email"]))
    echo (" missing");
echo ("<br>");
 
.
.
etc for each field you need.

Note, that you should place inbetween your <form> </form>

Code: Select all

<input type="hidden" name="formsent" value="1">
to avoid writing "missing" next to the field on the very first pass, when the user had no chance yet to fill the form.

This will notice the user on unfilled fields. How to implement it to your code you will have to find yourself, I think that noone will have time to rewrite the whole script for you ;)

Hope that helps.
Post Reply