如何修复在PHP之前输出并在其之前编码的HTML?

如何修复在PHP之前输出并在其之前编码的HTML?,php,html,html-table,output,Php,Html,Html Table,Output,我有以下代码: <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));

我有以下代码:

<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项目不包含在or中,因此浏览器会将其移动到表的顶部

        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和ifs

第二,验证标记:确保为元素构建开始标记和结束标记;ie;在你的时间里,把回声;作为一线和回声;作为最后一行` 最好有更多的代码行,并且能够轻松地识别标记。至少在重构之前,当一切正常时

第三,验证html:您可以使用“查看源代码”按钮或使用。两者都将帮助您在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>

您可以按ctrl+u将其放入td中,则您的表代码无效