HTML: массив радиокнопок - PullRequest
       24

HTML: массив радиокнопок

3 голосов
/ 14 февраля 2012

Хорошо, у меня другая проблема при работе с массивами радиокнопок, чем у других потоков.

Я хочу, чтобы в зависимости от выбранного ответа значение сохранялось вдругой массив, но я не хочу, чтобы пользователь мог выбрать более одного варианта из одного и того же вопроса.

Пример:

Question 1
<input type="radio" name="Array1[]" value="question1"/>
<input type="radio" name="Array2[]" value="question1"/>
<input type="radio" name="Array3[]" value="question1"/>
<input type="radio" name="Array4[]" value="question1"/>

Question 2
<input type="radio" name="Array1[]" value="question2"/>
<input type="radio" name="Array2[]" value="question2"/>
<input type="radio" name="Array3[]" value="question2"/>
<input type="radio" name="Array4[]" value="question2"/>

Цель этого состоит в том, чтобычто я могу расположить сами вопросы в одной из 4 категорий и заполнить каждый массив вопросами, которые им были назначены.

Пример:

Предполагается, что 4 вопроса и ответы равны 1,3, 1, 2, я хочу получить следующие массивы:

Array1[0] = "question1"
Array1[1] = "question3"

Array2[0] = "question4"

Array3[0] = "question3"

Array4[] = Empty array

Можно ли это сделать или мне нужен другой подход для достижения желаемого результата?Кстати, я планирую обработать эту форму с помощью PHP.

РЕДАКТИРОВАТЬ: Еще несколько деталей.Пример использования.

<h1>What are your preferences?</h1>
<form type=...etc.>
    <label>Cats</label>
    <input type="radio" name="Love[]" value="Cats"/>
    <input type="radio" name="Like[]" value="Cats"/>
    <input type="radio" name="Dislike[]" value="Cats"/>
    <input type="radio" name="Hate[]" value="Cats"/>
    <label>Dogs</label>
    <input type="radio" name="Love[]" value="Dogs"/>
    <input type="radio" name="Like[]" value="Dogs"/>
    <input type="radio" name="Dislike[]" value="Dogs"/>
    <input type="radio" name="Hate[]" value="Dogs"/>
    <label>Ferrets</label>
    <input type="radio" name="Love[]" value="Ferrets"/>
    <input type="radio" name="Like[]" value="Ferrets"/>
    <input type="radio" name="Dislike[]" value="Ferrets"/>
    <input type="radio" name="Hate[]" value="Ferrets"/>
    <label>Turtles</label>
    <input type="radio" name="Love[]" value="Turtles"/>
    <input type="radio" name="Like[]" value="Turtle"/>
    <input type="radio" name="Dislike[]" value="Turtles"/>
    <input type="radio" name="Hate[]" value="Turtles"/>
<form>

Ответы [ 4 ]

2 голосов
/ 14 февраля 2012

Я думаю, вы можете догадаться, что имя группирует флажки, поэтому способ, которым вы хотите это сделать, невозможен без javascript.Я предлагаю вам назвать флажки для каждого вопроса, а затем вы можете сгруппировать их по значению с помощью php.Например, если вы получаете ответы 1, 3, 1, 2, вы можете push поместить их в соответствующий массив.Это было бы что-то вроде этого.Но это не доказательство взломщиков

        <form method="post">
            <input type="radio" name="v1" id="v1-1" value="1"/><label for="v1-1">1-1</label><br/>
            <input type="radio" name="v1" id="v1-2" value="2"/><label for="v1-2">1-2</label><br/>
            <input type="radio" name="v1" id="v1-3" value="3"/><label for="v1-3">1-3</label><br/>

            <input type="radio" name="v2" id="v2-1" value="1"/><label for="v2-1">2-1</label><br/>
            <input type="radio" name="v2" id="v2-2" value="2"/><label for="v2-2">2-2</label><br/>
            <input type="radio" name="v2" id="v2-3" value="3"/><label for="v2-3">2-3</label><br/>

            <input type="radio" name="v3" id="v3-1" value="1"/><label for="v3-1">3-1</label><br/>
            <input type="radio" name="v3" id="v3-2" value="2"/><label for="v3-2">3-2</label><br/>
            <input type="radio" name="v3" id="v3-3" value="3"/><label for="v3-3">3-3</label><br/>

            <input type="radio" name="v4" id="v4-1" value="1"/><label for="v4-1">4-1</label><br/>
            <input type="radio" name="v4" id="v4-2" value="2"/><label for="v4-2">4-2</label><br/>
            <input type="radio" name="v4" id="v4-3" value="3"/><label for="v4-3">5-3</label><br/>
            <input type="submit" value="vote"/>
        </form>
<?php
if(! empty($_POST))
{
    $plausible_answers = array(1,2,3,4);
    $answers = array();
    for($i=1;! empty($_POST["v$i"]);++$i)
    {
        if(in_array($_POST["v$i"], $plausible_answers))
        {
            $answers[$_POST["v$i"]][] = $i;
        }
    }
    print_r($answers);
}
?>
2 голосов
/ 14 февраля 2012

Вы можете выбрать только одну радиокнопку на имя, поэтому, если у вас разные имена (как у вас), пользователи смогут выбрать более одной радиокнопки на вопрос. Извините, но то, что вы предлагаете, не сработает. Вместо этого вам придется вести ручной список номеров ответов на соответствующий вопрос. Кажется, что вы знаете все ответы заранее, так что это не должно быть таким уж большим делом.

1 голос
/ 14 февраля 2012

Я думаю, вам нужно прийти к этому с другой стороны, что-то вроде этого

<label>Cats</label>
<input type="radio" name="Cats" value="Love"/> Love
<input type="radio" name="Cats" value="Like"/> Like
<input type="radio" name="Cats" value="Dislike"/> Dislike 
<input type="radio" name="Cats" value="Hate"/> Hate

, а на стороне сервера, что-то вроде:

$loves=array();
$likes=array();
$dislikes=array();
$hates=array();

, затем выполнить итерациючерез $ _POST, проверяя значение и, если оно совпадает с любым из четырех ожидаемых, вставляет имя в соответствующий массив.

0 голосов
/ 12 января 2015

вы можете создать массив как массив [], но в переключателе мы должны дать индекс для этого как массив [1], массив [2] ... динамически.id мы даем имя как radioArray [], как и другие входные данные type = "fname []", но оно не будет автоматически увеличивать индекс, который мы должны увеличивать индекс с помощью дополнительной переменной.

  e.g name= "$radiArray[1] = 'val1'"; //give index like 1,2,3 ...
      name ="$radiArray[2] = 'val2'"; ....
...