【问题标题】:Checking tick boxes from data from database检查数据库中数据的复选框
【发布时间】:2015-11-06 18:59:38
【问题描述】:

对不起,我应该更好地解释这一点。我试图让它变得简单。这个表单的作用是显示一个人的详细信息,然后用户可以使用复选框选择该人是否可以拥有某些东西(如休息时间)。因此,当加载表单时,复选框已经为某些事情打勾......如果这是有道理的。如果一个人已经有权休息。我将他们的详细信息加载到表格上。休息时间框应该已经打勾了。

学生ID用于表格显示表格上已选择的人。状态也对应于请求。它正在等待批准、批准或拒绝。

                $selected_arrangement_query = "
            SELECT tbl_arrangement_id, arrangement, ta.status
            FROM tbl_arrangement AS ta
            WHERE 
            tbl_student_id = $selected

我会尽量简短地回答这个问题。发生的事情是我有一个带有勾选框的表格。一旦用户单击文本框,它会将数据发布到数据库,然后在选择该选项时显示在表单上。但是文本框中的勾号消失了。我想这样做,以便在提交数据后,勾号将保留在那里。大约有 40 个盒子,所以我预计所有不同排列的编码都会很长,但如果有人可以帮助我开始,我可以进一步复制它。

这里是它的开始。前几个隐藏值只是为了获得相同的用户。

        <table>
        <form name='counter' id='counter' method="get"  >
            <tr><th colspan="8">Counter arrangements</th></tr>  
            <input type="hidden" name="selected" value="<?php echo $selected; ?>" />
            <input type="hidden" name="edited" value="1" /> 
            <input type="hidden" name="evidenceCount" value="<?php echo $selected_evidence_Total; ?>" />
            <input type="hidden" name="arrangementCount" value="<?php echo $selected_arrangement_Total; ?>" />  

            <td valign="top"  >
              <input type="checkbox" Name='arrangements[]'  value='Rest Breaks' OnChange='this.form.submit();'>Rest Breaks</option>
            </td>           
            <td valign="top"  >
              <input type="checkbox" Name='arrangements[]' value='Small Classroom Environment' OnChange='this.form.submit();'>Small Classroom Environment</option>
            </td>
            <td valign="top"  >
              <input type="checkbox" Name='arrangements[]' value='Coloured Overlay' OnChange='this.form.submit();'>Coloured Overlay</option>
            </td>

更新

这是批准拒绝等下拉框的代码。

 <?php
    //declare counter
    $rowcount = 0;
    while ($row = $selected_arrangement_result->fetch_assoc()) {
        printf("<tr>");
        printf("<td><input type='hidden' name='arrangementRowID%s' value='%s' />",$rowcount,$row['tbl_arrangement_id']);
        printf("%s</td>",$row['arrangement']);
        if($row['status']=='Awaiting Approval'){
        ?>


        <td class="right">
        <select name='astatus<?php echo $rowcount; ?>' onchange='submitForm()'>
            <option value='Awaiting Approval' selected="selected">Awaiting Approval</option>
            <option value='Approved'>Approved</option>
            <option value='Rejected'>Rejected</option>
            <option value='Rejected-No Evidence'>Rejected-No Evidence</option>
            <option value='Approved on Appeal'>Approved on Appeal</option>
            <option value='Approved Alternative' >Approved Alternative</option>
        </select>
        </td>
        <?php
        }elseif($row['status']=='Approved'){
        ?>
        <td class="right">
        <select name='astatus<?php echo $rowcount; ?>' onchange='submitForm()'>
            <option value='Awaiting Approval'>Awaiting Approval</option>
            <option value='Approved' selected="selected">Approved</option>
            <option value='Rejected'>Rejected</option>
            <option value='Rejected-No Evidence'>Rejected-No Evidence</option>
            <option value='Approved on Appeal'>Approved on Appeal</option>
            <option value='Approved Alternative' >Approved Alternative</option>
        </select>
        </td>

经过更多研究,我发现了更多代码。我已经对其进行了修改以满足我的需要,这样的东西会起作用吗? 我知道一旦完成,我将需要包括所有复选框。我还需要一个 if 语句,但我想让第一个先工作。

         $arrangement = mysql_query("SELECT tbl_arrangement_id, arrangement FROM tbl_arrangement WHERE Id=$selected");
          $row = mysql_fetch_row($arrangement);
          $selected = explode(',', $row[$arrangement]);
          $j=0;
          for($i=0; $i<count($arrangement); $i++){
             if($j<count($selected) && $selected[$j] == $arrangements[$i]){
                echo $arrangements[$i]." <input type='checkbox' name='arrangements[]' value='". $arrangement[$i] ."' checked> ";
                $j++;
             }
            else echo $arrangements[$i]." <input type='checkbox' name='arrangements[]' value='". $arrangement[$i] ."'> ";
          }

【问题讨论】:

  • 好吧,基本上在加载页面时,获取勾选的值并确保它们被选中?!
  • 你需要一些 JavaScript 知识兄弟 ;)
  • 出于多种原因,您应该考虑让用户提交表单然后进行处理。
  • @Naruto 是的,这就是我需要帮助的!
  • @DDeme 告诉我兄弟,我在 Javascript 方面相当没用

标签: php sql database checkbox


【解决方案1】:

在查看数据库查询结果时,您可以将用于复选框的信息保存在关联数组中,并以复选框的值作为键。

更新:

如果我理解你的解释正确,你可以在这里实现它:

<?php
  //declare counter
  $arrangements = [];
  $rowcount = 0;

  while ($row = $selected_arrangement_result->fetch_assoc()) {
    $arr = str_replace(' ', '', $row["arrangement"]); // Removes spaces
    $arrangements[$arr]] = true;

    printf("<tr>");
    printf("<td><input type='hidden' name='arrangementRowID%s' value='%s' />",$rowcount,$row['tbl_arrangement_id']);
    printf("%s</td>",$row['arrangement']);
    // ...

如果在关联数组中找到框值,则可以在复选框中echoselected="selected"

<input type="checkbox" Name='arrangements[]'  value='RestBreaks' <?php echo isset($arrangements["RestBreaks"]) ? 'checked="checked"' : ""; ?> OnChange='this.form.submit();'>Rest Breaks</input>

关联数组中的空格可能无法很好地工作,因此在上面的示例中,input 值中的空格已被删除。

【讨论】:

  • 好的,我需要为每个盒子都这样做吗?感谢您的回复
  • 是的,每个盒子都有相应的值。
  • 所以它适用于点击它的时候。对不起,我应该更好地解释这一点。我试图让它变得简单。这个表单的作用是显示一个人的详细信息,然后用户可以使用复选框选择该人是否可以拥有某些东西(如休息时间)。因此,当加载表单时,复选框已经为某些事情打勾......如果这是有道理的。如果一个人已经有权休息。我将他们的详细信息加载到表格上。休息时间框应该已经打勾了。
  • 那么让我们看看我是否理解正确。该页面显示了一个人的信息,以及他们可以拥有的这些东西的复选框?信息从何而来,又如何?我假设的数据库。
  • 好吧,原理还是一样的,只不过不是玩GET变量,而是需要利用数据库中的数据。显示您的表结构和/或您如何从数据库中获取数据的示例,我可以更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
  • 2013-03-09
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多