如何修复HTML在PHP之前输出的问题


How to fix HTML being output before PHP that is coded before it?

我有这个代码:

<table><tr><th>Select a Ramp: </th></tr>
<?php 
global $dbc;
$rampq="SELECT item_id, item_name FROM items WHERE category_id = '1'";
$rampr = @mysqli_query($dbc, $rampq) or die(mysqli_error($dbc));            
while($row = mysqli_fetch_array($rampr)){
     echo '<tr><td><input type="radio" name="rampGroup" 
           value="' . $row['item_id'] . '"';
        if(isset($_POST['rampGroup']) && $_POST['rampGroup']==$row['item_id']){
            echo 'checked="checked"';}echo'>' . $row['item_name'] . '</tr>';  }
            echo '<tr><input type="radio" name="rampGroup" value="0"';if(isset($_POST['rampGroup']) && $_POST['rampGroup']==0){echo 'checked="checked"';} 
            echo'>No Ramp</tr></table>';
?> 

当这个代码在浏览器上输出时,它看起来像:

o无坡道
选择坡道:
o液压单闸门
o液压双折叠闸门

"no ramp"应该是最后打印的,但它会跳到查询返回的项目之上。有什么方法可以让它正确输出吗?

您的html无效。noramp项不包含在<td><th>中,因此浏览器将其移动到表的"顶部"。

        echo '<tr><input type="radio" name="rampGroup" value="0"';
                  ^----missing <td> here
        echo'>No Ramp</tr></table>';
                     ^---missing </td> here

您可以尝试这种方式

global $dbc;
$rampq="SELECT item_id, item_name FROM items WHERE category_id = '1'";
$rampr = @mysqli_query($dbc, $rampq) or die(mysqli_error($dbc));            
while($row = mysqli_fetch_array($rampr)){
   if(isset($_POST['rampGroup']) && $_POST['rampGroup']==$row['item_id']){
        $checked= 'checked="checked"';}
   if(isset($_POST['rampGroup']) && $_POST['rampGroup']==0)
       {$checked= 'checked="checked"';}
   echo '<tr><td><input type="radio" name="rampGroup" value="' . $row['item_id'] . '"'.$checked.'>'. $row['item_name'].'<td></tr>';
   echo '<tr><td><input type="radio" name="rampGroup" value="0"'.$checked.'No Ramp></td></tr>'; 
        echo'></tr></table>';

我会推荐一些东西;

首先,缩进:我真的会帮助你有一个清晰的缩进,尤其是在这种情况下的while和if。

第二,验证标记:确保为元素构建了开始标记和结束标记;(即,在您的时间内,将echo "<tr>";作为第一行,echo "</tr>";作为最后一行`)
最好有更多的代码行,并且能够轻松识别标签
(至少在重构之前,一切正常)

第三,验证您的html:您可以使用"查看源代码"按钮或W3C验证器进行检查。两者都将帮助您查找html中的错误,并找出它不能正确显示的原因。

考虑到所有这些,我会重新设计你的代码如下:

<table>
<tr><th>Select a Ramp: </th></tr>
<?php 
global $dbc;
$rampq="SELECT item_id, item_name FROM items WHERE category_id = '1'";
$rampr = @mysqli_query($dbc, $rampq) or die(mysqli_error($dbc)); 
while($row = mysqli_fetch_array($rampr)){
    echo '<tr>';
    echo '<td><input type="radio" name="rampGroup" value="' . $row['item_id'] . '"';
    if(isset($_POST['rampGroup']) && $_POST['rampGroup']==$row['item_id']){
        echo ' checked="checked"';
    }
    echo'>' . $row['item_name'] . '</td>';  
    echo '</tr>';
}
echo '<tr>';
echo '<td><input type="radio" name="rampGroup" value="0"';
if(isset($_POST['rampGroup']) && $_POST['rampGroup']==0) {
    echo 'checked="checked"';
}
echo'>No Ramp</td>';
echo '</tr>';
?> 
</table>