2016-07-28 3 views
2

Для системы голосования у меня есть форма с несколькими радиовводами и значениями. Фрагмент формы выглядит следующим образом:Как создать эффективную форму с несколькими входами радиосвязи

<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 опций, не делая очень длинной формы и кода для вычисления, а также вывода?

ответ

1

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

$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, чтобы держать его кратким и пои нт. Надеюсь, это покажет общую идею.

+0

Отлично работает! Спасибо за объяснение. –

+0

Добро пожаловать. –

Смежные вопросы