如何控制单选按钮?数据来自数据库,PHP,MYSQL

时间:2014-07-20 11:15:05

标签: php html mysql controls radio

我在为教师创建考勤界面时整理单选按钮时遇到问题。当我从mysql数据库中提取数据以在编辑表单中显示时,我正在尝试检查正确的单选按钮。

有一个包含四列的表,其中列分隔为名称,存在,不存在和后期。通过获取MYSQL数据库在网页中回显名称列表,这意味着如果在列表中添加了新学生,那么它将自动与缺席,现在和晚期选项一起在网页中回显。请查看下面的代码,我用它来单独回显名称列表和其他选项。

          while($row = mysqli_fetch_array($result))
           {

   echo "<tr>
   <td><img......../></td> 
   <td>" .$row['name']. $row['surname']."</td>  
   <td><input type='radio' name='attend' value='present' /> Present &nbsp;
   <input type='radio' name='attend' value='absent' /> Absent &nbsp;
   <input type='radio' name='attend' value='late' /> Late &nbsp; 
   <td>
    </tr>";
    }

   echo "<input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'>"; 
   echo "</table>"; 
   echo "</form> <br/>"; 
   ?>

操作功能

 foreach ($_POST['attend'] as $attendance => $value) {

 if($value == 'present') {

  $query = "INSERT INTO Test (date, status) VALUES (NOW(), '1')";  
   $close = mysqli_query($con, $query); 
  echo "present done properly"; 

2 个答案:

答案 0 :(得分:1)

您正在错误地显示它。您需要为每次出席提供不同的名称。

这样做:

 while($row = mysqli_fetch_array($result))
           {

   echo "<tr>
   <td><img......../></td> 
   <td>" .$row['name']. $row['surname']."</td>  
   <td><input type='radio' name='attend".$row['name']."' value='present' /> Present &nbsp;
   <input type='radio' name='attend".$row['name']."' value='absent' /> Absent &nbsp;
   <input type='radio' name='attend".$row['name']."' value='late' /> Late &nbsp; 
   <td>
    </tr>";
    }

   echo "<input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'>"; 
   echo "</table>"; 
   echo "</form> <br/>"; 
   ?>

正如您所看到的,我将name='attend'替换为name='attend".$row['name']."',但为了使其更好,您应该使用唯一ID替换$row['name'],例如主键。

当您需要遍历所有参与值时,您需要遍历所有名称。

    foreach ($names as $name)
    {
    $value=$_POST['attend'.$name]; //this value could be absent , present or late
echo $name.' '.$value.'<br>'; //You have the name as well as value. Now you can insert or Update them in the database within this loop itself.
    }

但是我强烈建议你在那里使用主键而不是名字。否则当两个人的名字相同时你会遇到问题。

答案 1 :(得分:0)

我认为我们缺少相当多的信息来帮助您,但我希望您可以使用我为您准备的这些代码。假设&#39;状态&#39;在数据库中,当前为1(如您的示例所示),因为缺少它2,并且已经晚了它3.此外,我假设您的结果顶部的查询以某种方式包含此状态。另外,我已经为每个表格行创建了一个表单,因为我还没有看到任何教师ID将数组分配给复选框“&#39;名称标签。

用于处理表单的PHP代码:

<?php
if ($isset($_POST['attend']) {
  switch ($_POST['attend']) {
    case 'present':
      $status = 1;
      break;
    case 'absent':
      $status = 2;
      break;
    case 'late':
      $status = 3;
      break;
    default:
      $status = 0;
      break;
  }
  if ($status != 0) {
    $query = "INSERT INTO Test (date, status) VALUES (NOW(), " . $status . ")";
    $close = mysqli_query($con, $query);
    echo $_POST['attend'] . " done properly";
  }
}
?>

你的表单(我猜你在这之前的某个地方有一个开放的<table>标签和一个表头):

<?php
$result = mysqli_query(" WHATEVER YOUR QUERY IS ");

$statuses = array(1 => 'Present', 2 => 'Absent', 3 => 'Late');

while ($row = mysqli_fetch_array($result)) { ?>
  <tr>
    <td><img......../></td> 
    <td><?php echo $row['name'] . " " . $row['surname']; ?></td>  
    <td>
    <form action="" method="post">
      <?php foreach ($statuses as $status) { ?>
        <input type="radio" name="attend" value="<?php echo strtolower($status); ?>"<?php echo ($row['status'] == $status) ? ' checked' : ''; ?> /> <?php echo $status; ?> &nbsp;
      <?php } ?>
      <input class='attendanceSubmitBtn' type='submit' name='btnSubmit' value='Submit'> 
    </form>
    </td>
  </tr>
<?php } ?>
</table>
<br/>