簡體   English   中英

顯示 <select>每個表行中使用相同的數據庫表數據

[英]Display <select> in each table row by using the same database table data

我將構建一個表,讓用戶輸入他們的SPM結果,然后我的系統將過濾並顯示給他們哪些課程適用。

我試圖在一個表中制作10行,每行包含2個<select> ,其中一個是SPM主題,另一個是他們所獲得的等級。 從我的數據庫中獲取“主題”和“成績”選項。

數據庫表-spm_subject 數據庫表-spm_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>

該表已構建,但只有FIRST ROW能夠顯示兩個<select>內兩個數據庫表中的數據。

有解決此問題的解決方案嗎?

1)刪除<table>內的<table> <form> <table> 因為,不允許將表單作為表,tbody或tr的子元素。 您可以在表單中包含整個表格。 您可以在表格單元格中有一個表單。 您不能在表單中包含表的一部分。 有關更多信息,請單擊

2) <option>沒有name屬性。 在這里檢查

3)<select></select> name 在這里檢查

4)由於要向checkresult2.php頁面提交多個值,因此必須將name定義為name="subj[]"name="grad[]"作為array類型。

5)另一種顯示其余9行數據的方法是:在while loop之前while loopquery本身放在那里,如下所示。

更新的代碼。

<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擴展名。]

您必須預處理填充兩個數組的查詢:

$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循環終止時,游標已到達結果的結尾,並且-在next for循環中,沒有任何內容可獲取。

請注意:

mysql_語法在PHP 5.5.0中已棄用,在PHP 7.0.0中已刪除 相反,應使用MySQLiPDO_MySQL擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM