выберите один переключатель для каждой строки

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

Чтобы отобразить критерии оценки, я использовал цикл do while [переключатель был включен в цикл].
Вот мой код:

<fieldset>
<table border="1">
<tr><br />
<th width="700px">AREAS TO RATE</th>
<th width="100px">1</th>
<th width="100px">2</th>
<th width="100px">3</th>
<th width="100px">4</th>
</tr>

<?php
$rates="select * from tbl_torateareas;";
$raters=mysqli_query($con,$rates);
$raterows=mysqli_fetch_array($raters);?>

<?php do{?>

<tr>
<td><?php echo $raterows['torateareas'];?></td>
<th><input type="radio" name="rad" /></th>
<th><input type="radio" name="rad" /></th>
<th><input type="radio" name="rad" /></th>
<th><input type="radio" name="rad" /></th>
</tr>

<?php }while($raterows=mysqli_fetch_array($raters)); ?>

</table>
</fieldset>

Чтобы выбрать один переключатель, я назвал все переключатели с одинаковым именем [имя: радиан]. Когда я сделал это, только одна радиокнопка была выбрана для всей таблицы. Как в, из вне 10 строк в моей таблице — была выбрана только 1 кнопка который был предположительно, одна радиокнопка для каждого ряда. Hmmmmmmm.

Помогите с этим, пожалуйста. Спасибо!

0

Решение

@MarcoMura прав. Например. создайте дополнительную переменную $ i = 0, увеличивайте ее каждый цикл и добавляйте к своим именам, например, rad0 в первой строке, rad1 во второй и т. д.

В то время как @Ученица расширил мой ответ и попросил пометить его как решение, я знаю более полезный. Идея состоит в том, чтобы использовать не инкрементное число, а id (или, может быть element_idили как этот столбец называется в вашей БД) который, скорее всего, тоже извлекается из вашей БД с помощью select * from tbl_torateareas;

Таким образом, конкретный вклад будет выглядеть

<input type="radio" name="rad[<?php echo $raterows['id'];?>]" />

Это дает вам преимущество в том, что вы будете точно знать, какая запись в вашей БД была оценена, а не только порядковый номер строки в вашей HTML-таблице. Это поможет избежать ошибок, когда таблица в БД может измениться до отправки формы.

Еще один совет:

1.Вы можете использовать <?= вместо <?php echo сделать ваш код более читабельным, если у вас PHP 5.4+ или short_open_tag = yes Нажмите, чтобы посмотреть документацию echo ().

2. смешивание td а также th здесь неразумно, если только вы не сделаете первую клетку th потому что это заголовок, и все остальные tdхотя это все еще действует

3. ваш цикл является избыточным, вам не нужно сначала извлекать результат, а затем ждать, если он извлечет while() в конце концов, просто используйте общий в то время как() синтаксис

while($raterows=mysqli_fetch_array($raters)) {
// do all the stuff
}

вместо

$raterows=mysqli_fetch_array($raters);
do {
// stuff
}
while($raterows=mysqli_fetch_array($raters));

Я знаю, что на ваш вопрос уже был дан ответ, но, возможно, это поможет улучшить код в будущем.

2

Другие решения

Добавьте счетчик в свой цикл.

Вы назначаете один и тот же name ко всем переключателям, поэтому они одинаковы.

<?php do{
$i=0;
?>

<tr>
<td><?php echo $raterows['torateareas'];?></td>
<th><input type="radio" name="rad[<?php echo $i;?>]" /></th>
<th><input type="radio" name="rad[<?php echo $i;?>]" /></th>
<th><input type="radio" name="rad[<?php echo $i;?>]" /></th>
<th><input type="radio" name="rad[<?php echo $i;?>]" /></th>
</tr>

<?php
++$i
}while($raterows=mysqli_fetch_array($raters)); ?>

<tr>
<td><?php echo $raterows['torateareas'];?></td>
<th><input type="radio" name="rad[<?php echo $i;?>]" /></th>

И в вашем коде отправки радио, зациклите на опубликованные значения.

Подобно:

<?php
if (! empty($_POST['rad'])) {
$j=0;
foreach ($_POST['rad'] as $rad) {
// Access your radio buttons code here.
++$j;
}
}
?>
2

Это решение. Спасибо за дальнейшую разработку, сэр Владкрас!

<input type="radio" name="rad[<?php echo $raterows['id'];?>]" />
0
По вопросам рекламы [email protected]