2017-03-07 60 views
9

Mam pole tak ...Dezynfekcja i Dodawanie postu meta w nieznanej liczbie pól

<input type="text" name="summary" value="" required /> 

... co jestem w stanie łatwo sanitize_text_field i add_post_meta z tym ...

$summary = sanitize_text_field($_POST["summary"]); 
add_post_meta($post_id, 'summary', $summary); 

Ale jeśli chodzi o dodatkowy post_meta, który muszę przechowywać w DB, nie wiem jak to zrobić, ponieważ nie wiem, ile dodatkowych pól będzie w formularzu. Będzie się różnić.

więc dodatkowe pola formularza może być tak ...

<input type="text" name="cat_01" value="" /> 
<input type="number" name="dog_01" value="" /> 
<input type="number" name="rabbit_01" value="" /> 
<input type="text" name="mouse_01" value="" /> 

<input type="text" name="cat_02" value="" /> 
<input type="number" name="dog_02" value="" /> 
<input type="number" name="rabbit_02" value="" /> 
<input type="text" name="mouse_02" value="" /> 

... ale czasami nie może być 3. set z tych pól, lub czwarty etc i tam naprawdę nie ma limitu, a ja nie wiem, ile będzie zestawów tych pól.

Tak na przykład, jeśli istnieje 3rd zestaw tych dziedzinach będą wyglądać następująco:

<input type="text" name="cat_03" value="" /> 
<input type="number" name="dog_03" value="" /> 
<input type="number" name="rabbit_03" value="" /> 
<input type="text" name="mouse_03" value="" /> 

Więc masz pomysł.

Jak mogę zdezynfekować i dodać_post_meta, gdy nie wiem, co zamierzam przechwycić?

Pozdrawiam.

Odpowiedz

1

Możesz użyć foreach do iteracji dowolnej liczby pól. Przykład:

foreach($_POST as $name=>$value){ 
    $sanitizedValue = sanitize_text_field($value); 
    add_post_meta($post_id, $name, $sanitizedValue); 
} 
12

Dlaczego nie ułatwiają na siebie i uratować wszystkich tych w tablicy coś takiego:

<!-- With type --> 
<input type="text" name="animal[dog][]" value=""/> 
<input type="text" name="animal[cat][]" value="" /> 
<!-- No Type --> 
<input type="text" name="animal[]" value="" /> 

Masz pomysł prawda?

na backend następnie można uzyskać pól z

if(isset($_POST['animal'])) { 
    $sanitized_array = array(); 

    foreach($_POST['animal'] as $type) { 
    if(is_array($type)) { 
     // This is a type, let's go over that 

     // If it does not exist, create it 
     if(! isset($sanitized_array[ $type ])) { 
     $sanitized_array[ $type ] = array(); 
     } 

     foreach($type as $value) { 
     $sanitized_array[ $type ][] = sanitize_text_field($value); 
     } 
    } else { 
     // It is not an array, so it's a value instead 
     $sanitized_array[] = sanitize_text_field($value); 
    } 
    } 

    // We have our sanitized array, let's save it: 
    update_post_meta($post_id, 'animal', $sanitized_array); 
} 

to jest coś podobnego już stworzyliśmy gdzie pola są wykonywane dynamicznie i nie wiemy, ile będziemy musieli oszczędzać.

Mam nadzieję, że dostarczy Ci poradnik jak to zrobić.

+0

Dla tych, którzy nie są obeznani z obsługą zmiennych POST przez PHP, polega to na wbudowaniu w PHP scalania przesłanych wartości z nazwami kończącymi się "[]" zwiniętymi w tablicę. Zamówienie powinno zawsze być takie samo, jak zamówienie DOM –

1

W poniższym kodzie wziąłem tablicę z limitem 4, który możesz umieścić, dopóki nie użyjesz swoich zestawów zwierząt. następnie sprawdź, który z nich jest wysłany, a następnie santized tę zmienną post.

$sanited_array = array(); 
    for($i = 1 ; $i < 4 ; $i++) 
    { 

    if(isset($_POST['cat_0'.$i])) 
    { 
     $sanited_array['cat'][] = sanitize_text_field($_POST['cat_0'.$i]); 
    } 
    if(isset($_POST['dog_0'.$i])) 
    { 
     $sanited_array['dog'][] = sanitize_text_field($_POST['dog_0'.$i]); 
    } 
    if(isset($_POST['rabbit_0'.$i])) 
    { 
     $sanited_array['rabbit'][] = sanitize_text_field($_POST['rabbit_0'.$i]); 
    } 
    if(isset($_POST['mouse_0'.$i])) 
    { 
     $sanited_array['mouse'][] = sanitize_text_field($_POST['mouse_0'.$i]); 
    } 
} 
update_post_meta($post_id, 'animal', $sanited_array);