【问题标题】:Radio buttons in foreach loopforeach 循环中的单选按钮
【发布时间】:2013-09-05 11:45:01
【问题描述】:

我从数据库中提取了一系列问题,需要为每个问题循环单选按钮。我需要将所有答案返回到一个看起来像这样的数组中

$answer_grp1 = array("T", "T", "T");

我的代码如下所示。将数组放入 $_POST['answer_grp1']

的正确 (name=??) 语法是什么
<?php foreach ($questions as $question):
            if ($question['q_type']==1): ?>
                <tr>
                    <td style="width:5%;"><?= $question['q_number'] ?></td>
                    <td style="width:15%;">
                        T<input type="radio" name=answer_grp1[] value="T" />
                        F<input type="radio" name=answer_grp1[] value="F" />
                    </td>
                    <td><?= $question['q_text'] ?></td>
                </tr>
            <?php endif;
            endforeach; ?>

【问题讨论】:

  • 使用answer_grp1[0], answer_grp1[1] ..等。为了名字
  • 用引号括起来:name="answer_grp1[]"。提交表单时,假设您使用$_POST,您将在$_POST['answer_grp1'] 中获得可用的值。另外,你的标题是“收音机”,我没有看到任何收音机输入元素。
  • @ChrisRockwell 这是一个错字对不起。问题是当我尝试这种格式时,每个问题的所有单选按钮都作为一个单选按钮组。因此,例如,当您将问题 #1 回答为“T”时,一旦您回答问题 #2,它就会将答案从 #1 切换出来
  • 这就是radio 输入元素的行为方式——每个问题都有一个答案。如果需要,您可以将checkbox 设置为看起来像radio
  • 对,我需要为每个问题创建一个单独的单选组但将答案分配给 $answer_grp1 中的同一数组的语法

标签: php arrays radio-button


【解决方案1】:

我更倾向于使用 for 循环:

<?php 
  for ($i = 0; $i < count($questions); $i++) {
    $question = $questions[$i];
    if ($question['q_type']==1): ?>
      <tr>
              <td style="width:5%;"><?= $question['q_number']; ?></td>
              <td style="width:15%;">
                T<input type="radio" name=answer_grp1[<?php print $i; ?>] value="T" />
                F<input type="radio" name=answer_grp1[<?php print $i; ?>] value="F" />
               </td>
               <td><?= $question['q_text']; ?></td>
            </tr>
<?php endif;
        endfor; ?>

这是你的代码:

<?php 
$i = 0;
foreach ($questions as $question):
        if ($question['q_type']==1): ?>
            <tr>
                <td style="width:5%;"><?= $question['q_number']; ?></td>
                <td style="width:15%;">
                    T<input type="radio" name=answer_grp1[<?php print $i; ?>] value="T" />
                    F<input type="radio" name=answer_grp1[<?php print $i; ?>] value="F" />
                </td>
                <td><?= $question['q_text']; ?></td>
            </tr>
        <?php endif; ?>
<?php 
$i++
endforeach; ?>

【讨论】:

  • 我不知道为什么我没有点击,但这正是我需要做的。
【解决方案2】:

你会使用

$_POST['answer_grp1'][0]
$_POST['answer_grp1'][1]

...等等。

如果所有答案都在这个数组中,您也可以像这样循环遍历它:

for ($x=0; $x<count($_POST['answer_grp1']); $x++)
{
   $value = $_POST['answer_grp1'][$x];
}

只要所有字段都在一个&lt;form&gt; 标记内并且您提交了表单,那么该数组就应该在$_POST 全局中可用。

您对每个输入的命名,answer_grp1[] 是正确的;但是您应该在名称周围添加引号。

您还应该在问题输出后添加分号 - 更改:

<?= $question['q_text'] ?>

到这里:

<?= $question['q_text']; ?>

【讨论】:

  • 问题不是表单提交后如何获取值,而是如何标记单选元素,以便值作为一个组传递。答案是,你不能;应该使用checkboxes。
  • 这是不正确的。如果您将[] 添加到单选名称的末尾,只要每个单选按钮都有一个数字,就需要。因此,如果第一个无线电名称是 answer_grp1[0],第二个是 answer_grp1[1],那么它将全部包含在不同索引的同一个数组中。
  • 当时我误解了这个问题,我认为 OP 想要来自同一个无线电组的多个值。如果我终于理解了这个问题,您的答案仍然需要修改,OP 需要知道如何格式化标记。
猜你喜欢
  • 2014-01-01
  • 2018-05-02
  • 1970-01-01
  • 2013-11-29
  • 2014-08-15
  • 1970-01-01
  • 2018-02-13
  • 2016-04-05
  • 2013-08-05
相关资源
最近更新 更多