试图让MySQL结果水平显示

时间:2017-12-31 05:27:00

标签: php html css mysql mysqli

我正在创建一个网页,根据他们的经验水平在游戏中列出十个角色,并使用与每个角色相关联的图片显示它们。我的代码可以工作,但是当我希望它成为一行时,输出就在一列中。我确实在这里看到了一些非常相似的地方:MySQL data from database align horizontally我试图遵循这个例子,但要么最终出现错误,要么面孔没有出现。我是一个业余爱好者,我只是为了朋友这样做,所以我的知识非常基础。

相关代码:

<table border="3" width="90%">
<tr>
<th width="25%">XP</th>
<td>
<?php 
$resultgood = mysqli_query($con,"SELECT * FROM Life WHERE goodxp > 0 ORDER BY goodxp DESC LIMIT 10");
    while($row = mysqli_fetch_array($resultgood))
    {
    $face = mysqli_query($con,"SELECT face FROM Description WHERE charname='$row[charname]'");
    $row = mysqli_fetch_row($face);
    $face = $row[0];
    $name = mysqli_query($con,"SELECT charname FROM Life WHERE charname='$row[charname]'");
    $row = mysqli_fetch_row($name);
    $name = $row[0];
    echo "<left>";
    echo "<table border='1'>";
    echo "<tr><td>";
    echo "<img src='pictures/$face' alt='$name' border='2'>";
    echo "</td></tr>";
    echo "</table>";
    echo "<br>";
    }
?>
</td>
</tr>
</table>

有人有什么建议吗?谢谢!

因此,按照下面的Bombelman建议,我得到了它的工作。如果其他人遇到这个问题,这里是工作代码:

<tr>
<th width="25%">Goody Two Shoes</th>
<td><?php 
echo "<table border='1'><tr>";
echo "<left>";
$resultgood = mysqli_query($con,"SELECT * FROM Life WHERE goodxp > 0 ORDER BY goodxp DESC LIMIT 10");
    while($row = mysqli_fetch_array($resultgood))
    {
    $face = mysqli_query($con,"SELECT face FROM Description WHERE charname='$row[charname]'");
    $row = mysqli_fetch_row($face);
    $face = $row[0];
    $name = mysqli_query($con,"SELECT charname FROM Life WHERE charname='$row[charname]'");
    $row = mysqli_fetch_row($name);
    $name = $row[0];
    echo "<td>";
    echo "<img src='pictures/$face' alt='$name' border='2'>";
    echo "</td>";
    }
    echo "</tr>";
    echo "</table>";
?></td>
</tr>

2 个答案:

答案 0 :(得分:0)

将“table”和“row”标记放在循环之外,并将结果放在“td”标记之间。

查看您的脚本,您有几个表。

确保只有&lt; td&gt;和&lt; / td&gt;标签在while循环中。 输出应该类似于我的例子。

希望它有所帮助!

<table style="width:100%">

  <tr>
    <td>Character 1</td>
    <td>Character 2</td>
    <td>Character 3</td>
    <td>Character 4</td>
    <td>Character 5</td>
  </tr>

</table>

答案 1 :(得分:0)

查看sql查询让我觉得你应该能够在两个表上进行基本连接,而不是在循环中嵌套查询。生成html表应该相当简单 - 遍历表中行的记录集结果,并遍历查询返回的表行中单个单元格的字段。

$sql='select l.*, d.face from `life` l
    join `description` d on d.`charname`=l.`charname`
    where l.`goodxp` > 0 
    order by l.`goodxp` desc 
    limit 10';

$res=$con->query( $sql );

/* fetch the column names into an array */
$fields=array();
array_walk( $res->fetch_fields(),function( $item, $key, $fields ){
    $fields[]=$item->name;
},&$fields );


$html=array();

$html[]='<table>';
/* add field names as column headers */
$html[]='<tr>';
foreach( $fields as $field )$html[]='<th>'.$field.'</th>';
$html[]='</tr>';

/* 
    iterate through recordset, 
    add new row for every record 
    but table cell for every 
    field in record
*/
while( $rs=$res->fetch_object() ){
    $html[]='<tr>';

    foreach( $fields as $field ){/* show image or text */
        $data = $field=='face' ? "<img src='pictures/{$rs->$field}' />" : $rs->$field;
        $html[]='<td>'.$data.'</td>';
    }

    $html[]='</tr>';
}
$html[]='</table>';

/* render table */
echo implode( PHP_EOL, $html );

根据PHP的版本,在使用array_walk函数并通过引用传递第三个参数时可能会遇到麻烦。如果是这种情况,那么改变

$fields=array();
array_walk( $res->fetch_fields(),function( $item, $key, $fields ){
    $fields[]=$item->name;
},&$fields );

$fields=array();
array_walk( $res->fetch_fields(),function( $item, $key ){
    global $fields;
    $fields[]=$item->name;
} );