【问题标题】:Display <select> in each table row by using the same database table data使用相同的数据库表数据在每个表行中显示 <select>
【发布时间】:2016-02-03 11:56:34
【问题描述】:

我将构建一个表格让我的用户输入他们的 SPM 结果,然后我的系统将过滤并向他们显示哪些课程有资格申请。

我尝试在一个表中制作 10 行,每行包含 2 个&lt;select&gt;,一个是 SPM 科目,另一个是他们获得的成绩。 Subject 和 Grade 的选项是从我的数据库中获取的。

这是我的表格编码:

<?php
$result = mysql_query("SELECT * FROM spm_subject");
$result2 = mysql_query("SELECT * FROM spm_grade");
?>

<table class="p1" bgcolor="#FFFFCC" bordercolor="#000000" align="center" width="771" border="2">
    <tr>
        <td><div align="center"><strong>No.</strong></div></td>
        <td><div align="center"><strong>Subject Name</strong></div></td>
        <td><div align="center"><strong>Grade</strong></div></td>
    </tr>
<form action="checkresult2.php">
<?php 
    for($i=1; $i<=10; $i++)
    {?>
    <tr>
        <td width="44"><div align="center"><?php echo $i; ?></div></td>
        <td width="601">
            <select>
                <option value="">--- Please choose a subject ---</option>
                <?php
                    while($s = mysql_fetch_assoc($result))
                    {?>
                        <option name="subj"><?php echo $s["name"]; ?></option>
                <?php } ?>
            </select>
        </td>
        <td width="104"><div align="center">
            <select>
                <option value="">&nbsp;</option>
                <?php
                    while($g = mysql_fetch_assoc($result2))
                    {?>
                        <option name="grad"><?php echo $g["grade"]; ?></option>
                <?php } ?>
            </select>
        </div>
        </td>
    </tr>
<?php } ?>
    <tr>
        <td colspan="3">
            <div align="center">
                <input type="submit" value="Submit">
            </div>
        </td>
    </tr>
</form>
</table>

表已构建,但只有第一行能够显示来自&lt;select&gt; 内的两个数据库表的数据。

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 有什么办法可以解决这个问题?什么问题。 ?你没有提到你的问题。
  • 每一行必须有一个 select 和 ALL name 字段,另一行必须有 ALL grade 字段?
  • @Wong 遇到什么错误?
  • @NanaPartykar 表格的第一行只能显示
  • @fusion3k 正好可以在&lt;select&gt;里面显示所有表格数据

标签: php mysql database


【解决方案1】:

1) 删除&lt;table&gt; 中的&lt;form&gt;。因为,A form 不允许作为 table、tbody 或 tr 的子元素。您可以在表单中包含整个表格。您可以在表格单元格中有一个表格。表格中不能包含表格的一部分。更多信息,请点击this

2) &lt;option&gt; 没有 name 属性。检查here

3)name&lt;select&gt;&lt;/select&gt; 。检查here

4) 由于要向 checkresult2.php 页面提交多个值,因此您必须将名称定义为 name="subj[]"name="grad[]" 定义为 array 类型.

5) 在其余 9 行中显示数据的另一种方法是:在 while loop 之前将 query 本身放在此处,如下所示。

更新代码。

<form action="checkresult2.php">
    <table class="p1" bgcolor="#FFFFCC" bordercolor="#000000" align="center" width="771" border="2">
          <tr>
              <td><div align="center"><strong>No.</strong></div></td>
              <td><div align="center"><strong>Subject Name</strong></div></td>
              <td><div align="center"><strong>Grade</strong></div></td>
          </tr>

            <?php 
          for($i=1; $i<=10; $i++)
          {?>
          <tr>
              <td width="44"><div align="center"><?php echo $i; ?></div></td>
              <td width="601">
                  <select name="subj[]">
                      <option value="">--- Please choose a subject ---</option>
                          <?php
                          $result = mysql_query("SELECT * FROM spm_subject");
                          while($s = mysql_fetch_assoc($result))
                          {?>
                              <option value="<?php echo $s['name']; ?>"><?php echo $s["name"]; ?></option>
                      <?php } ?>
                  </select>
              </td>
              <td width="104"><div align="center">
                  <select name="grad[]">
                      <option value="">&nbsp;</option>
                          <?php
                          $result2 = mysql_query("SELECT * FROM spm_grade");
                          while($g = mysql_fetch_assoc($result2))
                          {?>
                              <option value="<?php echo $g['grade']; ?>"><?php echo $g["grade"]; ?></option>
                      <?php } ?>
                  </select>
              </div>
              </td>
          </tr>
            <?php }?>
          <tr>
              <td colspan="3">
                  <div align="center">
                      <input type="submit" value="Submit">
                  </div>
              </td>
          </tr>
    </table>
</form>

[注意mysql_PHP 5.5.0 中已弃用,在PHP 7.0.0 中已被删除。应使用 MySQLiPDO_MySQL 扩展名。]

【讨论】:

  • 嘿@WongJuinHao:很高兴听到这个消息。但是,请记住这5点。 享受 干杯!
  • 我会这样做的!感谢您的指导!
  • 很好的答案,解释清楚; 喜欢它
  • 我正在向你学习@Fred-ii-。我也想像你一样给出答案。简单来说,你是我的理想堆栈溢出。
  • 娜娜你太客气了,grazie mille!
【解决方案2】:

您必须预处理填充两个数组的查询:

$names = $grades = array();
for( $i=1; $i<=10; $i++ ) 
{
    $names[] = mysql_fetch_assoc( $result );
    $grades[] = mysql_fetch_assoc( $result2 );
}

然后,在我们的代码中:

<?php foreach( $names as $key => $name ) {?>
    <option name="subj"><?php echo $name['name']; ?></option>
<?php } ?>

<?php foreach( $grades as $key => $grade ) {?>
    <option name="grad"><?php echo $grade['grade']; ?></option>
<?php } ?>

mysql_fetch_assoc 从结果中获取当前行,然后“转到”下一行,因此当第一个 for 循环终止时,游标已到达结果的末尾,并且 - 在下一个 for 循环中,有没什么可取的。

请注意:

mysql_ 语法在 PHP 5.5.0 中被弃用,在 PHP 7.0.0 中被移除。相反,应使用 MySQLiPDO_MySQL 扩展名。

【讨论】:

  • 虽然没用但是还是要谢谢你的指点!
  • @WongJuinHao 我已经测试过了,它按预期工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多