0

データベースから画像を表示することはできましたが、テーブルにフォーマットなしで連続して表示されます。追加の if ループまたは while ループを実行する必要がありますか?

<table cellpadding='4' cellspacing='0'>

<?php
include 'dbFunctions.php';
$arrStocks = executeSelectQuery("SELECT name,id,image,price FROM stocks");

for ($countStocks = 0; $countStocks < count($arrStocks); $countStocks++) {
  $name  = $arrStocks[$countStocks]['name'];
  $image = $arrStocks[$countStocks]['image'];
  $id    = $arrStocks[$countStocks]['id'];
  $price = $arrStocks[$countStocks]['price'];
?>
  <thead>
    <tr>
      <th class="timgG">
        <h4><?php echo '<img src="stocks/' . $image . '">' ?></h4>
      </th>
      <th class="timgG">
        <?php echo '<a href="stockDetails.php?id=' . $id . '">' . $name . '</a>'; ?>
      </th>
    </tr>
<?php
}
?>
  </thead>
</table>
4

2 に答える 2

0

私があなたの質問を正しく理解していれば、画像のグリッドが必要です。グリッドは 2 エントリのテーブルなので、実際には 2 つのループが必要です。行のすべてのエントリ (つまり、すべての列) は最初のループから取得され、すべての行は内部で最初のループを呼び出す 2 番目のループから取得されます。

この次のスニペットに行きます。ただし、あなたが与えなかった未知の制約がいくつかあるので、それらのいくつかを想定します。たとえば、データが 1 次元配列として返されると仮定します。

<?php
$data = array('one', 'two', 'three', 'four', 'five', 'six');
$nbColumns = 3;
?>

<table>
  <?php
    for($row = 0; $row * $nbColumns < count($data); ++$row) {
  ?>
  <tr>
    <?php
    for($col = 0; $col < $nbColumns; ++$col) {
    ?>
      <td><?php echo $data[$row * $nbColumns + $col]; ?></td>
    <?php
    }
    ?>
  </tr>
  <?php
  }
  ?>
</table>

これにより、次が生成されます。

<table>
  <tr>
    <td>one</td>
    <td>two</td>
    <td>three</td>
  </tr>
  <tr>
    <td>four</td>
    <td>five</td>
    <td>six</td>
  </tr>
</table>

このスニペットをニーズに合わせて調整できるはずです。

回答/スニペットを編集できるように、説明が必要なことがあれば教えてください。


編集:

何を説明する必要があるのか​​よくわかりません。

とにかく、最初のコードをスニペットに再挿入しただけで、特別なことは何もしていません。基本的に、上部includeに and の呼び出しを挿入しexecuteSelectQuery、ダム番号を 2 行に置き換えました。最初は画像、2 番目はリンク/名前です。

これはそのまま動作するはずですが、コードの詳細をすべて把握していないため、動作することを保証できません。

<?php
include 'dbFunctions.php';
$arrStocks = executeSelectQuery("SELECT name,id,image,price FROM stocks");
$nbColumns = 3;
?>

<table>
  <?php
    for($row = 0; $row * $nbColumns < count($arrStocks); ++$row) {
  ?>
  <tr>
    <?php
    for($col = 0; $col < $nbColumns; ++$col) {
      $index = $row * $nbColumns + $col;
      $name  = $arrStocks[$index]['name'];
      $image = $arrStocks[$index]['image'];
      $id    = $arrStocks[$index]['id'];
      $price = $arrStocks[$index]['price'];
    ?>
      <td>
        <img src="stocks/<?php echo $image; ?>" alt="<?php echo $name; ?>">
        <br>
        <a href="stockDetails.php?id=<?php echo $id; ?>"><?php echo $name; ?></a>
      </td>
    <?php
    }
    ?>
  </tr>
  <?php
  }
  ?>
</table>

結論として、table目的を達成するために a を使用しないでください。私の答えは少しハックです ($nbColumnsあまり良くありません) が、tables を使用して目的を達成するためのより良い方法はあまりありません。sを使用floatする方が良い解決策かもしれませんが、PHP 関連の問題ではなくなります...


EDIT2:

最後のスニペットを編集してテストしたところ、現在は機能しています ;-)

于 2013-03-25T15:28:14.370 に答える
0

現在のコードは次のようなものを出力します

<table>
  <thead>
  <tr>
    <th><h4><img /></h4></th>
    <th><a>...</a></th>
  </tr>
  <thead>
  <tr>
    <th><h4><img /></h4></th>
    <th><a>...</a></th>
  </tr>
  <thead>
  <tr>
    <th><h4><img /></h4></th>
    <th><a>...</a></th>
  </tr>

  ... 
</thead>

これは整形式の HTML ではありません。ヘッダーに画像を配置したり、テーブルのすべての行をテーブルの列ヘッダーにする必要はないと思います。

代わりに、for ループの外側に開始点を配置するの<td></td>ではなく、使用してみてください。<th></th><thead>

また、テーブルの見出しがどうなるかを検討することもarrStocksできます。それらがクエリの最初の行である場合は、if ステートメントを追加して、最初のテーブル行の出力を変更してそれらを作成できます<th></th>が、繰り返しますが、画像をテーブル ヘッダーとして定義する必要がある理由がわかりません。

編集

テーブル出力を壊す可能性のある他の唯一のものは、インクルードの内容です。

試す:

<?php
include 'dbFunctions.php';
$arrStocks = executeSelectQuery("SELECT name,id,image,price FROM stocks");
?>
<table cellpadding='4' cellspacing='0'>
<?
for ($countStocks = 0; $countStocks < count($arrStocks); $countStocks++) {
  $name  = $arrStocks[$countStocks]['name'];
  $image = $arrStocks[$countStocks]['image'];
  $id    = $arrStocks[$countStocks]['id'];
  $price = $arrStocks[$countStocks]['price'];
?>
    <tr>
      <td class="timgG">
        <?php echo '<img src="stocks/' . $image . '" alt="">' ?>
      </td>
      <td class="timgG">
        <?php echo '<a href="stockDetails.php?id=' . $id . '">' . $name . '</a>'; ?>
      </td>
    </tr>
<?php
}
?>
</table>
于 2013-03-25T00:23:13.040 に答える