Я создаю веб-страницу, на которой перечислены десять персонажей в игре в зависимости от их уровня опыта, и они отображаются с изображением, связанным с каждым персонажем. Мой код работает, но вывод находится в столбце, когда я хочу, чтобы он был в строке. Я видел, что здесь спрашивали нечто очень похожее: данные MySQL из базы данных выравниваются по горизонтали и я попытался последовать этому примеру, но либо у меня были ошибки, либо лица не отображались. Я любитель, я просто делаю это для друзей, так что мои знания довольно базовые.

Соответствующий код:

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

У кого-нибудь есть предложения? Благодаря!


Поэтому, следуя приведенному ниже предложению Бомбельмана, я заставил его работать. Если кто-то еще столкнется с этой проблемой, вот рабочий код:

<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>
1
Pomegranate 31 Дек 2017 в 08:27

2 ответа

Лучший ответ

Поместите теги «table» и «row» из цикла, и результаты будут зациклены только между тегами «td».

Глядя на ваш сценарий, у вас есть несколько таблиц.

Убедитесь, что внутри цикла 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>
0
Bombelman 31 Дек 2017 в 08:16

Глядя на запросы 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;
} );
0
Professor Abronsius 31 Дек 2017 в 08:51