如何创建一个具有多个无线电输入的高效表单


How to create an efficient form with several radio inputs

对于投票系统,我有一个带有多个无线电输入和值的表单。表单的一个片段如下:

 <tr>  
    <td class="quickpollheader"><?php echo $quickpolloption1; ?></td>
    <td class="quickpollradio"><input class="quickpollradio" type="radio" name="radiovote" value="1"></td>
     </tr>
     <tr>
    <td class="quickpollheader"><?php echo $quickpolloption2; ?></td>
    <td class="quickpollradio"><input class="quickpollradio" type="radio" name="radiovote" value="2"></td>
     </tr>
     <?php if($quickpolloptions_count >= 3) {
       ?>
     <tr>
    <td class="quickpollheader"><?php echo $quickpolloption3; ?></td>
    <td class="quickpollradio"><input class="quickpollradio" type="radio" name="radiovote" value="3"></td>
     </tr>
     <?php
     }
     if($quickpolloptions_count >= 4) {
       ?>        
     <tr>
        <td class="quickpollheader"><?php echo $quickpolloption4; ?></td>
        <td class="quickpollradio"><input class="quickpollradio" type="radio" name="radiovote" value="4"></td>
     </tr>
     <?php
     } 
     and so on...till 10

管理员可以在settings.php中设置选项的数量,如下所示:

 // SETTINGS
$quickpolltype = "radio"; // set to "radio" or "checkbox"; radio is one   choice, checkbox is multiple choices
$quickpollheader = "Wat is je favoriete browser?"; // the question or header
$quickpolloptions_count = 2; // edit the number of options you want; it starts from option 1 below
/*edit below the content of options between " and "
if number above = 2; only the first 5 options will be shown*/
$quickpolloption1 = "Mozilla:"; // option 1
$quickpolloption2 = "Crome:"; // option 2
$quickpolloption3 = "Opera:"; // option 3
$quickpolloption4 = "IE:"; // option 4
$quickpolloption5 = "Safari:"; // option 5
and so on till 10...

数据将存储在一个平面文件中,为了计算,我使用以下代码:

//getting content of textfile
$filename = "data/vote_result.txt";
$content = file($filename);
//putting content in array
$array = explode("||", $content[0]);
$value0 = $array[0]; 
$value1 = $array[1];
$value2 = $array[2];
$value3 = $array[3];
$value4 = $array[4];
$value5 = $array[5];
....till 10

/* RADIO */
if ($_POST['view'] == 0) {
$value0 = 0;
}
if ($_POST['radiovote'] == 1) {
$value1 = $value1 + 1;
}
if ($_POST['radiovote'] == 2) {
$value2 = $value2 + 1;
}
if ($_POST['radiovote'] == 3) {
$value3 = $value3 + 1;
}
if ($_POST['radiovote'] == 4) {
$value4 = $value4 + 1;
}
if ($_POST['radiovote'] == 5) {
$value5 = $value5 + 1;
}
......
//inserting votes into the txt file     
$addvote =  $value0."||".$value1."||".$value2."||".$value3."||".$value4."||".$value5."||".$value6."||".$value7."||".$value8."||".$value9."||".$value10;
$totalvalues = $value1+$value2+$value3+$value4+$value5+$value6+$value7+$value8+$value9+$value10;
$total1 = (100*round($value1/($totalvalues),2));
$total2 = (100*round($value2/($totalvalues),2));
$total3 = (100*round($value3/($totalvalues),2));
$total4 = (100*round($value4/($totalvalues),2));
$total5 = (100*round($value5/($totalvalues),2));
....and so on

至少,这里是产生输出的地方:

<tr>
    <td class="quickpollheader"><?php echo $quickpolloption1; ?></td>
        <td class="quickpollgraphic"><div class="progresspoll">
                   <div class="percentpollgraph" style="width: <?php echo $total1; ?>%"></div>        
                </div>
    </td>
            <td class="quickpollpercent"><div class="percentpoll"><?php echo $total1; ?></div></td>
            <td class="quickpollcount"><div class="count"><?php echo $value1; ?></div></td>
</tr>
<tr>
            <td class="quickpollheader"><?php echo $quickpolloption2; ?></td>
            <td class="quickpollgraphic"><div class="progresspoll">
                   <div class="percentpollgraph" style="width: <?php echo $total2; ?>%"></div>        
                </div>
    </td>
    <td class="quickpollpercent"><div class="percentpoll"><?php echo $total2; ?></div></td>
    <td class="quickpollcount"><div class="count"><?php echo $value2; ?></div></td>
</tr>
<?php if($quickpolloptions_count >= 3) {
?>
<tr>
            <td class="quickpollheader"><?php echo $quickpolloption3; ?></td>
            <td class="quickpollgraphic"><div class="progresspoll">
                   <div class="percentpollgraph" style="width: <?php echo $total3; ?>%"></div>        
                </div>
    </td>
    <td class="quickpollpercent"><div class="percentpoll"><?php echo $total3; ?></div></td>
    <td class="quickpollcount"><div class="count"><?php echo $value3; ?></div></td>
</tr>
<?php
     }
     if($quickpolloptions_count >= 4) {
?>
.... so on...

对于这个表单,我给了管理员为表单创建10个选项的机会。我如何才能更高效地创建50个选项,而不需要制作很长的表单和计算代码以及输出?

如果在设置中使用数组指定选项,则可以更容易地完成此操作。

$quickpolloptions = ['Mozilla', 'Chrome', 'Opera', 'IE', 'Safari'];

这将允许您使用foreach循环输出选项。

<form method="post">
    <?php foreach ($quickpolloptions as $key => $value) {
        echo "<label>$value</label>";
        echo "<input type='radio' name='radiovote' value='$key'><br>"
    }?>
    <input type="submit" value="Submit">
</form>

然后得到你的结果:

$result_file = 'vote_result.txt';
if (file_exists($result_file)) {
    $results = explode(',', file_get_contents('vote_result.txt'));
} else {
    // start with zeros if you don't have a file yet
    $results = array_fill(0, count($quickpolloptions), 0);
}

如果发布了另一张选票,请更新:

if (isset($_POST['radiovote'])) {
    $results[$_POST['radiovote']]++;
    file_put_contents('vote_result.txt', implode(',', $results));
}

并显示它们:

$total = array_sum($results);
foreach (array_combine($quickpolloptions, $results) as $key => $count) {
    $percent = 100*round($count/($total),2);
    echo "$key: $percent% ($count)<br>";
}

为了简明扼要,我省略了大部分HTML/CSS。希望这能显示出总体思路。