2012-04-26 64 views
-2

我需要檢查複選框被選中(需要),並需要驗證執行非常像其他表單字段,然後我需要發送電子郵件中的值。複選框驗證和發佈PHP,快速:)

PHP的整個形式,因爲它代表:

<?php 
if(isset($_POST['formtrigger'])): 

    //config 
    define('FORM_SENDTO','[email protected]'); 
    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> 

非常感謝爲你提供幫助! :)

+1

您沒有定義問題和什麼是您的問題。 -1 – kingmaple 2012-04-26 07:37:05

+0

這很酷。你的代碼有問題嗎? – JJJ 2012-04-26 07:38:29

+0

是的,問題是複選框字段沒有得到驗證。 – Mark 2012-04-26 08:18:41

回答

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

有沒有辦法在世界上該代碼將運行復選框的驗證是至少你的問題的

A.你有這麼多Notice: Undefined index錯誤,如55

B.這是行不通的期待您的服務器支持短標籤'

C.太多的重複

我只想糾正錯誤驗證您的請求,但相信我這麼多的東西是錯誤的

$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;  
    } 
+0

謝謝,但沒有任何幫助。標記。 – Mark 2012-06-01 07:23:34