复选框验证和发布 PHP,快速:)


Checkbox Validation and Post PHP, quick one :)

我需要检查复选框是否已选中(必需),并且需要验证才能像其他表单字段一样执行,然后我需要在电子邮件中发布值。

PHP的整个形式:

<?php
if(isset($_POST['formtrigger'])):
    //config
    define('FORM_SENDTO','hello@domain.com');
    define('FORM_SUBJECTLINE','Enquiry from website');
    define('ERR_MSG_FIELD_REQUIRED','This field is required.');
    define('ERR_MSG_FIELD_INVALIDEMAIL','Please enter a valid email address.');
    //setup validation rules
        //Name
        $validation_rules['forename']['required'] = true;
        $validation_rules['surname']['required'] = true;
        //Company
        $validation_rules['company']['required'] = true;
        //Address
        $validation_rules['address']['required'] = true;
        //Tel
        $validation_rules['tel']['required'] = true;
        //Email
        $validation_rules['email']['required'] = true;
        $validation_rules['email']['valid_email'] = true;
        //Enquiry
        $validation_rules['enquiry']['required'] = true;
        //title/gender
        $validation_rules['ts1']['required'] = true;
        $validation_rules['ts2']['required'] = true;
    //validate the form
    $formerrors=0;
    foreach($_POST as $formfield_name=>$formfield_value):
        //set the entered value as a sanitised string
        $_POST_SANITISED[$formfield_name] = filter_var($formfield_value,FILTER_SANITIZE_STRING);
        //Check if required
        if($validation_rules[$formfield_name]['required']):
            if(!strlen($formfield_value)>0):
                $formerrors++;
                $fielderrors[$formfield_name][] = ERR_MSG_FIELD_REQUIRED;
            endif;
        endif;
        //Check if valid email required
        if($validation_rules[$formfield_name]['valid_email']):
            if(!filter_var($formfield_value,FILTER_VALIDATE_EMAIL)):
                $formerrors++;
                $fielderrors[$formfield_name][] = ERR_MSG_FIELD_INVALIDEMAIL;
            endif;
        endif;
    endforeach;
    //process form and send message if validation passed
    if($formerrors==0):
        $email_msg[] = "New general enquiry'n'n-----------'n";
        $email_msg[] = "Title: ".$_POST_SANITISED['ts1']."'n";
        $email_msg[] = "Gender: ".$_POST_SANITISED['ts2']."'n";
        $email_msg[] = "Forename: ".$_POST_SANITISED['forename']."'n";
        $email_msg[] = "Surname: ".$_POST_SANITISED['surname']."'n";
        $email_msg[] = "Company: ".$_POST_SANITISED['company']."'n";
        $email_msg[] = "Address: ".$_POST_SANITISED['address']."'n";
        $email_msg[] = "Telephone No.: ".$_POST_SANITISED['tel']."'n";
        $email_msg[] = "Email: ".$_POST_SANITISED['email']."'n";
        $email_msg[] = "Enquiry: ".$_POST_SANITISED['enquiry']."'n";
        $email_msg[] = "-----------'n";
        $email_msg = implode('',$email_msg);
        $email_headers = 'From: ' . $_POST_SANITISED['email'] . "'r'n" .
        'Reply-To: ' . $_POST_SANITISED['email'] . "'r'n" .
        'X-Mailer: PHP/' . phpversion();
        mail(FORM_SENDTO,FORM_SUBJECTLINE,$email_msg,$email_headers);
        header('Location: ?msgsent=1#thanks');
    endif;
endif;
function errorOutput($fieldname=''){
    global $fielderrors;
    if(count($fielderrors[$fieldname])>0):
        foreach($fielderrors[$fieldname] as $err_msg):
            $error_str .= '<div class="form-fielderror-msg">'.$err_msg.'</div>';
        endforeach;
    endif;
    return $error_str ? $error_str : false;
}
function errorClass($fieldname=''){
    global $fielderrors;
    $error_class = '';
    if(count($fielderrors[$fieldname])>0):
       $error_class = 'form-fielderror';
    endif;
    return $error_class ? $error_class : false;
}

?>

这是 HTML:

        <?php if($_GET['msgsent']==1): ?>
    <h1>Thanks for your enquiry. If requested, we will get in touch shortly.</h1>
    <?php else: ?>

    <div id="form-cont">
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">

            <div class="form-element">
                <label for="ts1">Title:*</label>
                <select name="ts1" class="<?=errorClass('ts1')?>">
                        <option value="">-- Please select --</option>
                        <option value="Mr" <?=$_POST['ts1']=='Mr' ? 'selected="selected"' : '' ?>>Mr</option>
                        <option value="Mrs" <?=$_POST['ts1']=='Mrs' ? 'selected="selected"' : '' ?>>Mrs</option>
                        <option value="Miss" <?=$_POST['ts1']=='Miss' ? 'selected="selected"' : '' ?>>Miss</option>
                        <option value="Ms" <?=$_POST['ts1']=='Ms' ? 'selected="selected"' : '' ?>>Ms</option>
                </select>
                <?=errorOutput('ts1')?>
            </div>
            <div class="form-element">
                <label for="ts2">Gender:*</label>
                <select name="ts2" class="<?=errorClass('ts2')?>">
                        <option value="">-- Please select --</option>
                        <option value="Male" <?=$_POST['ts2']=='Male' ? 'selected="selected"' : '' ?>>Male</option>
                        <option value="Female" <?=$_POST['ts2']=='Female' ? 'selected="selected"' : '' ?>>Female</option>
                </select>
                <?=errorOutput('ts2')?>
            </div>      
            <div class="form-element">
                <label for="forename">Forename:*</label>
                <input type="text" name="forename" class="textbox <?=errorClass('forename')?>" value="<?=$_POST['forename']?>" />
                <?=errorOutput('forename')?>
            </div>
            <div class="form-element">
                <label for="surname">Surname:*</label>
                <input type="text" name="surname" class="textbox <?=errorClass('surname')?>" value="<?=$_POST['surname']?>" />
                <?=errorOutput('surname')?>
            </div>
            <div class="form-element">
                <label for="company">Company:*</label>
                <input type="text" name="company" class="textbox <?=errorClass('company')?>" value="<?=$_POST['company']?>" />
                <?=errorOutput('company')?>
            </div>
            <div class="form-element">
                <label for="address">Address:*</label>
                <input type="text" name="address" class="textbox <?=errorClass('address')?>" value="<?=$_POST['address']?>" />
                <?=errorOutput('address')?>
            </div>
            <div class="form-element">
                <label for="tel">Telephone No:*</label>
                <input type="text" name="tel" class="textbox <?=errorClass('tel')?>" value="<?=$_POST['tel']?>" />
                <?=errorOutput('tel')?>
            </div>
            <div class="form-element">
                <label for="email">Email:*</label>
                <input type="text" name="email" class="textbox <?=errorClass('email')?>" value="<?=$_POST['email']?>" />
                <?=errorOutput('email')?>
            </div>  
            <div class="form-element">
                <label for="enquiry">Your Enquiry:*</label>
                <textarea name="enquiry" class="<?=errorClass('enquiry')?>"><?=$_POST['enquiry']?></textarea>
                <?=errorOutput('enquiry')?>
            </div>      
            <div class="form-element">
                <label for="terms">Terms and Conditions</label>
                <input type="checkbox" name="terms" class="checkbox <?=errorClass('terms')?>" value="<?=$_POST['terms']=1?>" />
                <?=errorOutput('terms')?>
            </div>      
            <div class="form-element">
            <p class="clear">* denotes required field.</p>
            <input type="submit" class="submit" name="submit" value="Send" alt="Submit" title="Submit" />
            </div>
            <input type="hidden" name="formtrigger" value="1" />
        </form>
    </div>
    <?php endif ?>  

底部有问题的复选框:

<div class="form-element">
            <label for="terms">Terms and Conditions</label>
            <input type="checkbox" name="terms" class="checkbox <?=errorClass('terms')?>" value="<?=$_POST['terms']=1?>" />
            <?=errorOutput('terms')?>
        </div> 

非常感谢您的帮助! :)

if (isset($_POST['terms']))
{
    // checked
}

世界上没有办法运行验证复选框是你最少的问题

一个。您有很多Notice: Undefined index错误,例如 55

二.这不起作用,因为您的服务器支持短标签''

三. 重复过多

只会纠正您要求的验证错误,但相信我,很多事情都是错误的

    $formerrors=0;
    $_POST_SANITISED = array();
    foreach($_POST as $formfield_name=>$formfield_value){
        //set the entered value as a sanitised string
        $_POST_SANITISED[$formfield_name] = filter_var($formfield_value,FILTER_SANITIZE_STRING);
        //Check if required
        if(isset($validation_rules[$formfield_name]['required']))
        {
            if(!strlen($formfield_value)>0){
                $formerrors++;
                $fielderrors[$formfield_name][] = ERR_MSG_FIELD_REQUIRED;
            }
        }
        //Check if valid email required
        if(isset($validation_rules[$formfield_name]['valid_email']))
        {
            if(!filter_var($formfield_value,FILTER_VALIDATE_EMAIL)){
                $formerrors++;
                $fielderrors[$formfield_name][] = ERR_MSG_FIELD_INVALIDEMAIL;
            }
        }
    };
    if(!isset($_POST['terms']))
    {
        $formerrors++;
        $fielderrors["terms"][] = ERR_MSG_FIELD_REQUIRED;       
    }