2009-08-08 11 views
6

मैं PHP Filter कार्यों का उपयोग करने के लिए जल्दी से एक रूप को फ़िल्टर और उपयोगकर्ता के लिए प्रतिक्रिया दिखाना चाहते हैं पीएचपी फ़िल्टर समारोह का उपयोग करना। मेरे रूप में कुछ फ़ील्ड आवश्यक हैं, कुछ नहीं हैं।मान्य करने के लिए है, लेकिन उपेक्षा खाली गैर आवश्यक फ़ील्ड

मैं filter_input_array() उपयोग करने के लिए अपने सभी क्षेत्रों फिल्टर करने के लिए जा रहा हूँ। मैं कई रनों में डेटा पास कर दूंगा। इस तरह, मैं कई त्रुटि संदेशों को प्रदर्शित करने में सक्षम हो जाएगा।

मैं एक समस्या है: आवश्यक है कि कैसे मैं खाली फ़ील्ड अनदेखा कर सकते हैं कि नहीं कर रहे हैं? मुझे इसके लिए एक फ़िल्टर नहीं मिला।

अद्यतन:

मैं जाँच करने के लिए फिल्टर का उपयोग करना चाहते: फिल्टर और त्रुटि संदेश के लिए आवश्यकताओं की स्पष्टीकरण

  1. सभी आवश्यक फ़ील्ड
  2. में भर रहे हैं, तो अगर वैकल्पिक फ़ील्ड भर रहे हैं में; यदि नहीं, तो इस प्रक्रिया
  3. ई-मेल, फ़ोन नंबर, आदि जैसे क्षेत्रों में भर रहे हैं, तो बाकी की उपेक्षा।

मैं, त्रुटि के हर प्रकार के लिए त्रुटि संदेश प्रदर्शित करना चाहते हैं की एक अधिकतम के साथ प्रति फ़ील्ड 1 त्रुटि संदेश।

उत्तर

5

filter_xyz_array() फ़ंक्शन एक तत्व है कि इनपुट सरणी में मौजूद नहीं है, उदाहरण के लिए शून्य वापस आ जाएगी

<?php 

$args = array(
    'foo' => array(
     'filter' => FILTER_VALIDATE_INT, 
     'flags'  => FILTER_REQUIRE_ARRAY, 
     'options' => array('min_range' => 1, 'max_range' => 4) 
    ), 
    'bar' => array(
     'filter' => FILTER_VALIDATE_INT, 
     'flags' => FILTER_REQUIRE_SCALAR 
    ) 
); 

$input = array(
    'foo'=>array(1,2,3,4) 
); 

$filtered = filter_var_array($input, $args); 
var_dump($filtered); 

प्रिंट

array(2) { 
    ["foo"]=> 
    array(4) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    int(3) 
    [3]=> 
    int(4) 
    } 
    ["bar"]=> 
    NULL 
} 

isset() एक चर/सरणी तत्व है कि शून्य होता है के लिए झूठे रिटर्न। आप इसका उपयोग पर कर सकते हैं उन तत्वों को अनदेखा करें जो फ़िल्टर फ़ंक्शंस द्वारा NULL पर सेट हैं।
आप फ़िल्टर कर रहे हैं और सरणी फिल्टर समारोह से वापस लौटे की संरचना तुम भी array_filter() "साफ" सरणी का उपयोग कर सकते क्या पर निर्भर करता है।

2

मैं @VolkerK के जवाब से प्रेरित एक कस्टम समाधान का उपयोग कर समाप्त हो गया। मुझे स्पष्ट होना चाहिए था कि मैं क्या चाहता था। मैंने इस जानकारी के साथ अपना प्रश्न अपडेट कर लिया है।

मैं अभी भी एक आसान समाधान की तलाश में हूं।

// errors to display 
$errors = array(); 
// fields to ignore in the validation step 
$ignore_fields = array(); 
// return values after validation 
$returnvalues = array(); 

मैं पहली बार आवश्यक फ़ील्ड के लिए फ़िल्टर किया गया::

function required($string){ 
return trim($string) == "" ? false : $string; 
} 

$required_errors = array(
    "firstname" => "Je moet je voornaam invullen.", 
    "lastname" => "Je moet je achternaam invullen.", 
    "email" => "Je moet je e-mailadres invullen." 
); 

$required_filter = array(); 
    foreach($required_errors as $requiredfieldname => $error){ 
    $required_filter[$requiredfieldname] = array(
     'filter' => FILTER_CALLBACK, 
     'options' => "required", 
     'flags' => FILTER_NULL_ON_FAILURE 
    ); 
} 

$required_filtered = filter_input_array(INPUT_GET | INPUT_POST, 
    $required_filter); 

foreach($required_errors as $required => $error){  
    if(!isset($required_filtered[$required])){ 
    $errors[$required] = $required_errors[$required]; 
    $returnvalues[$required] = ""; 
    $ignore_fields[$required] = "ignored"; // value doesn't matter 
    } 
} 

फिर खाली क्षेत्रों के लिए जाँच करें और उन्हें एक मानक मूल्य

// ignore the other fields if they are empty; 
// the actual form has about 10 values here 
$maybeempty = array("from", "to", "phonenumber"); 

$optional_defaultvalue = array(
    "from" => 0, 
    "to" => 0, 
    "phonenumber" => "", 
); 

$optional_filter = array(); 
foreach($maybeempty as $field){ 
    $required_filter[$requiredfieldname] = array(
    'filter' => FILTER_CALLBACK, 
    'options' => "required", 
    'flags' => FILTER_NULL_ON_FAILURE 
); 
} 

$optional_filtered = filter_input_array(INPUT_GET | INPUT_POST, 
    $required_filter); 
foreach($maybeempty as $field){ 
    if(!isset($optional_filtered[$field])){ 
    $ignore_fields[$field] = "ignored"; // value doesn't matter 
    $returnvalue[$field] = $optional_defaultvalue[$field]; 
    } 
} 
के साथ लोड

पहले, मैं कुछ परिणाम सरणियों बनाया

अंतिम चरण में, मैं एक सत्यापन सरणी, कस्टम त्रुटि संदेश और इग्नो को अनदेखा कर दूंगा

$validity_filter = array(
    'email' => array(
     'filter' => FILTER_VALIDATE_EMAIL, 
     'flags' => FILTER_REQUIRE_SCALAR 
    ), 
    'from' => array(
     'filter' => FILTER_VALIDATE_INT, 
     'flags' => FILTER_REQUIRE_SCALAR, 
     'options' => array('min_range' => 1964, 'max_range' => 2009)), 
    'to' => array(
     'filter' => FILTER_VALIDATE_INT, 
     'flags' => FILTER_REQUIRE_SCALAR, 
     'options' => array('min_range' => 1964, 'max_range' => 2009)) 
); 

// filter all ignored fields 
$validity_filter = array_diff_key($validity_filter, $ignore_fields); 
$validity_filtered = filter_input_array(INPUT_GET | INPUT_POST, 
    $required_filter); 

foreach($validity_filter as $field => $value){ 
    if($value === false){ // NULL values are checked in a previous step 
    $errors[$field] = $validity_errors[$field]; // show error 
    $returnvalues[$field] = $_REQUEST[$field]; // return original value 
    } else { 
    $returnvalues[$field] = $value; // return filtered value 
    } 
} 

// process possible errors and response values 
3

पीएचपी फिल्टर: वैकल्पिक मूल्यों हैंडलिंग/filter_input_array साथ वैकल्पिक फ़ॉर्म इनपुट() फिल्टर समारोह क्षेत्रों रहे हैं, खाली फ़ील्ड या क्षेत्रों कि पहले से ही एक त्रुटि थी छोड़।

मैं कैसे जब पीएचपी फिल्टर के साथ काम कर वैकल्पिक फ़ील्ड या फ़ॉर्म इनपुट संभाल करने की एक आसान तरीका प्रदर्शित करेंगे। अंगूठे का नियम है:

  1. फ़िल्टर सभी फ़ॉर्म इनपुट, & वैकल्पिक आवश्यकता है। आपके फ़िल्टर में वैकल्पिक फ़ील्ड बाहर मत छोड़ो।
  2. शून्य, असत्य के बीच अंतर करने === तुलना ऑपरेटर का उपयोग करें, "" और 0 मूल्यों
4 की जरूरत थी और 4 वैकल्पिक जानकारी के साथ एक सरल संपर्क फार्म के लिए

नमूना कोड

<?php 
if ($_SERVER["REQUEST_METHOD"] == "POST"){ 
/*set validation control variable*/ 
$input_error_flag = true; 

/*set form input validation filters*/ 
$form_filter = array(
    'first_name'  => FILTER_SANITIZE_STRING, 
    'middle_name'  => FILTER_SANITIZE_STRING, 
    'last_name'   => FILTER_SANITIZE_STRING, 
    'email_address'  => FILTER_SANITIZE_EMAIL, 
    'postal_address' => FILTER_SANITIZE_NUMBER_INT, 
    'street_address' => FILTER_SANITIZE_STRING, 
    'telephone_number' => FILTER_SANITIZE_NUMBER_INT, 
    'mobile_number'  => FILTER_SANITIZE_NUMBER_INT, 
); 

/*list optional fields or optional form inputs in array*/ 
$optional_fields = array(
    'middle_name'  => "", 'postal_address' => "", 
    'street_address' => "", 'mobile_number'  => "", 
    ); 

/*set error display message of each required element*/ 
$error_description = array(
    'first_name'  =>"Missing or incorrect First Name", 
    'last_name'   =>"Missing or incorrect Last Name", 
    'email_address'  =>"Missing or incorrect Email Address", 
    'telephone_number' =>"Missing or incorrect Telephone Number", 
    ); 

/*sanitize all form inputs against form_filter*/ 
$form_data = filter_input_array(INPUT_POST, $form_filter); 

/*check form inputs for filter validation errors*/ 
foreach ($form_data as $form_input => $value){ 
    /*check if filter failed (false), input not defined (null) or input missing ("") 
    * and insert name of form input element into $invalid_array for error display 
    */ 
    if($value === FALSE || $value === NULL || $value == ""){ 
     /*exclude error display for optional items with empty values*/ 
     if(!(array_key_exists($form_input, $optional_fields) && $value == "")){ 
      $invalid_inputs[] = $form_input; 
     } 
    } 
} 

/*unset filter validation control variable if no errors*/ 
if(empty ($invalid_inputs)) 
       $input_error_flag = false; 

/*your calls to SQL functions for INSERT or UPDATE statements go here*/ 
if(!$input_error_flag){ 
    functionname::getInstance()->insert_contact_details($form_data); 
} 
} 
?> 
नीचे दिखाया गया है

और अंत में त्रुटि प्रदर्शन अनुभाग के साथ एचटीएमएल फॉर्म

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
    <form action="sample.php" method="POST" id="sample"> 
    <label for="first_name">First Name*</label> 
    <input type="text" name="first_name" id="first_name" 
      value="<?php echo $form_data['first_name']; ?>"/><br/> 
    <label for="middle_name">Middle Name</label> 
    <input type="text" name="middle_name" id="middle_name" 
      value="<?php echo $form_data['middle_name']; ?>"/><br/> 
    <label for="last_name">Last Name*</label> 
    <input type="text" name="last_name" id="last_name" 
      value="<?php echo $form_data['last_name']; ?>"/><br/> 
    <label for="email_address">Email Address*</label> 
    <input type="text" name="email_address" id="email_address" 
      value="<?php echo $form_data['email_address']; ?>"/><br/> 
    <label for="postal_address">Postal Address</label> 
    <input type="text" name="postal_address" id="postal_address" 
      value="<?php echo $form_data['postal_address']; ?>"/><br/> 
    <label for="street_address">Street Address</label> 
    <input type="text" name="street_address" id="street_address" 
      value="<?php echo $form_data['street_address']; ?>"/><br/> 
    <label for="telephone_number">Telephone Number*</label> 
    <input type="text" name="telephone_number" id="telephone_number" 
      value="<?php echo $form_data['telephone_number']; ?>"/><br/> 
    <label for="mobile_number">Mobile Number</label> 
    <input type="text" name="mobile_number" id="mobile_number" 
      value="<?php echo $form_data['mobile_number']; ?>"/><br/> 
    <input type="submit" name="submit" value="submit"><br/> 
     <?php 
      //display input validation errors on your html form 
      if ($input_error_flag){ 
       foreach($invalid_inputs as $key => $form_input){ 
        if(array_key_exists($form_input, $error_description)){ 
         echo $error_description[$form_input]."<br/>"; 
        } 
       } 
      } 
     ?> 
    </form> 
    </body> 
</html> 
संबंधित मुद्दे