使用相同的数据库表数据

时间:2016-02-03 11:56:34

标签: php mysql database

我要构建一个表让我的用户输入他们的SPM结果然后我的系统将过滤并向他们显示哪些课程有资格申请。 我试图在一张桌子上制作10行,每行由2< select>组成,一个是SPM主题,另一个是他们获得的等级。主题和成绩的选项是从我的数据库中获取的。 这是我的表格编码: < PHP $ result = mysql_query(" SELECT * FROM spm_subject"); $ result2 = mysql_query(" SELECT * FROM spm_grade"); ?> < table class =" p1" BGCOLOR ="#FFFFCC" BORDERCOLOR ="#000000" ALIGN ="中心"宽度=" 771"边界=" 2">     < TR>         < td>< div align =" center">< strong> No.< / strong>< / div>< / td>         < td>< div align =" center">< strong>主题名称< / strong>< / div>< / td>         < td>< div align =" center">< strong>成绩< / strong>< / div>< / td>     < / TR> < form action =" checkresult2.php"> < PHP     for($ i = 1; $ i< = 10; $ i ++)     {&GT?;     < TR>         < td width =" 44">< div align =" center"><?php echo $ i; ?>< / DIV>< / TD>         < td width =" 601">             <选择>                 < option value =""> ---请选择一个主题---< / option>                 < PHP                     while($ s = mysql_fetch_assoc($ result))                     {&GT?;                         < option name =" subj"><?php echo $ s [" name"]; ?>< /选项>                 <?php}?>             < /选择>         < / TD>         < td width =" 104">< div align =" center">             <选择>                 < option value ="">& nbsp;< / option>                 < PHP                     while($ g = mysql_fetch_assoc($ result2))                     {&GT?;                         < option name =" grad"><?php echo $ g [" grade"]; ?>< /选项>                 <?php}?>             < /选择>         < / DIV>         < / TD>     < / TR> <?php}?>     < TR>         < td colspan =" 3">             < div align =" center">                 <输入类型="提交"值="提交">             < / DIV>         < / TD>     < / TR> < /形式> < /表> 该表已构建,但只有FIRST ROW能够显示两个< select>内的两个数据库表中的数据。 解决这个问题的任何解决方案?

2 个答案:

答案 0 :(得分:3)

1)删除<form>内的<table>。因为,不允许表单是表,tbody或tr的子元素。您可以在表单中包含整个表。您可以在表格单元格中放置一个表单。您不能在表单中包含表的一部分。有关详情,请点击this

2) <option>没有name属性。查看here

3)name提交给<select></select>。查看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中删除。应使用 MySQLi PDO_MySQL 扩展名。]

答案 1 :(得分:0)

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

$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从结果中获取当前行,然后'go'到下一行,因此当第一个for循环终止时,光标已到达结果的末尾,并且 - 在下一个{{ 1}}循环,没有东西可以获取。

请注意:

  在PHP 5.5.0中不推荐使用

for语法,在PHP 7.0.0中它已被删除。相反,应使用MySQLiPDO_MySQL扩展名。