Я делаю систему оценки сотрудников, сейчас я нахожусь в управлении оценочного листа.
Чтобы отобразить критерии оценки, я использовал цикл 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.
Помогите с этим, пожалуйста. Спасибо!
@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));
Я знаю, что на ваш вопрос уже был дан ответ, но, возможно, это поможет улучшить код в будущем.
Добавьте счетчик в свой цикл.
Вы назначаете один и тот же 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;
}
}
?>
Это решение. Спасибо за дальнейшую разработку, сэр Владкрас!
<input type="radio" name="rad[<?php echo $raterows['id'];?>]" />