2011-10-04 18 views
15

Próbuję utworzyć formularz za pomocą PHP i nie mogę znaleźć samouczka na temat tego, czego potrzebuję, więc myślę, że pytam tutaj.Otrzymuj dane POST z wielu pól wyboru?

mam wiele opcji pól wyboru na mojej stronie ...

<li> 
    <label>What service are you enquiring about?</label> 
    <input type="checkbox" value="Static guarding" name="service">Static guarding<br> 
    <input type="checkbox" value="Mobile Patrols" name="service">Mobile Patrols<br> 
    <input type="checkbox" value="Alarm response escorting" name="service">Alarm response escorting<br> 
    <input type="checkbox" value="Alarm response/ Keyholding" name="service">Alarm response/ Keyholding<br> 
    <input type="checkbox" value="Other" name="service">Other<input type="hidden" value="Other" name="service"></span> 
    </li> 

Nie jestem pewien jednak, jak zebrać wszystkie wyboru wartości za pomocą metody POST?

przypadku korzystania

$service = $_POST['service']; 

mogę dostać tylko „inne” powrócił

Odpowiedz

43

nazwą pola jak service[] zamiast service, wtedy będziesz mieć do niego dostęp w tablicy. Po tym, można stosować zwykłe funkcje tablic:

  • Sprawdź, czy pewna wartość została wybrana:

    if (in_array("Other", $_POST['service'])) { /* Other was selected */} 
    
  • Get pojedynczą nową linię rozdzieloną ciąg z wszystkich wybranych opcji:

    echo implode("\n", $_POST['service']); 
    
  • Przeprowadź pętlę przez wszystkie zaznaczone pola wyboru:

    foreach ($_POST['service'] as $service) { 
        echo "You selected: $service <br>"; 
    } 
    
-1
<input type="checkbox" value="Other" name="service">Other<input type="hidden" value="Other" name="service"></span> 

Masz pole wejściowe ukryte o tej samej nazwie, co pole wyboru. "później" pola o takiej samej nazwie jak wcześniejsze spowodują nadpisanie wartości poprzedniego pola. Oznacza to, że twój formularz, jak napisano powyżej, ZAWSZE prześle service=Other.

Biorąc pod uwagę frazowanie twojego pytania w html, brzmi bardziej jak chcesz przycisk radiowy, który pozwala wybrać tylko JEDNĄ grupę pól o tej samej nazwie. Pola wyboru są sytuacją "ORAZ", przyciski radiowe odpowiadają "LUB"

3

Obecnie jest to po prostu przechwytywanie ostatniego ukrytego wejścia. Dlaczego w ogóle masz ten ukryty wkład? Jeśli chcesz, aby zebrać informacje, jeśli „inne” pole jest zaznaczone, a następnie trzeba ukryć

<input type="text" name="other" style="diplay:none;"/> 

i można pokazać go z javascript, gdy zaznaczone jest „inne” pudełko. Coś w tym stylu.

Tylko usługa atrybut name []

<li> 
<label>What service are you enquiring about?</label> 
<input type="checkbox" value="Static guarding" name="service[]">Static guarding<br> 
<input type="checkbox" value="Mobile Patrols" name="service[]">Mobile Patrols<br> 
<input type="checkbox" value="Alarm response escorting" name="service[]">Alarm response escorting<br> 
<input type="checkbox" value="Alarm response/ Keyholding" name="service[]">Alarm response/ Keyholding<br> 
<input type="checkbox" value="Other" name="service[]">Other</span> 
</li> 

Następnie w PHP można uzyskać do niego dostęp, tak jak

$service = $_POST['service']; 
echo $service[0]; // Output will be the value of the first selected checkbox 
echo $service[1]; // Output will be the value of the second selected checkbox 
print_r($service); //Output will be an array of values of the selected checkboxes 

etc ...

Powiązane problemy