php одноразовый цикл для каждой записи базы данных - PullRequest
0 голосов
/ 15 мая 2018

У меня нет большого опыта, когда дело доходит до php, циклов и т. Д., Но я скопировал этот код со своей страницы, которую я пытаюсь загрузить. Это страница продукта для автосалона, и я пытаюсь показать каждую машину в таблице (я не знаю достаточно CSS, чтобы сделать это таким образом), я изучаю только 2 месяца.

С этим кодом я показываю каждую машину столько раз, сколько записей в базе данных определенного класса.

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

До сих пор я пытался использовать do-while, где есть вычисление оператора if для значения $ i, которое заканчивалось только неопределенным предупреждением переменной для $title = [...] как Undefined Variable row in...

Что лучше всего использовать для запуска цикла один раз для каждой записи в базе данных?

Прошу прощения за любые опечатки, я исчерпан.

while ($row = mysqli_fetch_assoc($result)) 
{
    $count = mysqli_num_rows($result);
    $title = ("$row[year] "."$row[brand] ". "$row[model]");
    $uppic = $row['pic'];
    $picloc = "/upload/$uppic";
    $price = $row['price'];
    $stock = $row['stocknr'];
    for ($i = 1;$i <= $count; $i++)
    {
        if (($i == 1) or (($i - 1) % 4) == 0) {
            echo '<table><tr>' . "\n";
        }
        echo "<td>";
        echo "<table>";
        echo "<tr>";
        echo "<br><a href='$des'>
          <span>$title</span></a>";
        echo "</tr>";
        echo "<tr>";
        echo "<a href='$des'>
      <img src='$picloc'></a>";
        echo "</tr>";
        echo "<tr>";
        echo "<br><a href=''>
  <span>$</span></a>";
        echo "</tr></table>";
        echo "</td>";

        // for 5th, 10th, 15th etc record 
        if ((($i) % 4) == 0) {
            echo '</tr>';
        }
    }
}

также пробовал это:

for ($i = 0;$i <= $count; $i++)
{
    $query = "SELECT year, brand, model, class, stocknr, price, status, pic 
    FROM stock WHERE class = 'car' ORDER BY brand ASC";

    $result = mysqli_query($con,$query);
    $row = mysqli_fetch_assoc($result);
    $count=mysqli_num_rows($result);
    do {
        $title = ("$row[year] "."$row[brand] ". "$row[model]");
        $uppic = $row['pic'];
        $picloc = "/upload/$uppic";
        $price = $row['price'];
        $stock = $row['stocknr'];
        if (($i == 1) or (($i - 1) % 4) == 0) {
            echo '<table><tr>' . "\n";
        }
        echo "<td>";
        echo "<table>";
        echo "<tr>";
        echo "<br><a href='d.php?stocknr=$stock'>
          <span>$title</span></a>";
        echo "</tr>";
        echo "<tr>";
        echo "<a href='d.php?stocknr=$stock'>
      <img src='$picloc'></a>";
        echo "</tr>";
        echo "<tr >";
        echo "<br><a href='d.php?stocknr=$stock'>
  <span>R$p</span></a>";
        echo "</tr></table>";
        echo "</td>";

        // for 5th, 10th, 15th etc record
        if ((($i) % 4) == 0) {
            echo '</tr>';
        }
        while ($i <= $count); 
    }

завершился только тайм-аутом соединения при загрузке страницы.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Я думаю, что вам лучше использовать CSS, чем помещать такую ​​логику в ваш код. Я сделал очень простой пример во фрагменте ниже, где я использую DIV, чтобы разбивать новые строки каждые 5 элементов div, возможно, это должно дать вам некоторые подсказки. Если вы хотите разделить для каждых 5 элементов, вы должны разделить 100/5, тогда вы найдете 20% для каждого элемента div, однако я поставил границу размера 1px, поэтому я округлил значение до 19%, из-за этого дополнительная ширина, я надеюсь, это поможет! PS: я думаю, что есть лучший способ справиться с этой границей без этого обходного пути, я не могу вспомнить, как я решил это ...

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
<style type="text/css">
.container {
    display: flex;
    flex-flow: row wrap;
}

.container>div {
    height: 50px;
    width: 19%;
    border: 1px solid gray;
}
</style>
</head>
<body>
    <div class="container">
        <div>teste</div>
        <div>teste1</div>
        <div>teste2</div>
        <div>teste3</div>
        <div>teste4</div>
        <div>teste5</div>
        <div>teste6</div>
        <div>teste7</div>
        <div>teste8</div>
        <div>teste9</div>
        <div>teste10</div>
        <div>teste11</div>
    </div>
</body>
</html>
0 голосов
/ 15 мая 2018

Используйте код ниже:

$count = mysqli_num_rows($result);
$i = 1;
echo "<table>";
while ($row = mysqli_fetch_assoc($result)) 
{

    $title = ("$row[year] "."$row[brand] ". "$row[model]");
    $uppic = $row['pic'];
    $picloc = "/upload/$uppic";
    $price = $row['price'];
    $stock = $row['stocknr'];

    if($i%4==1) echo "<tr>";

        echo "<td>";
            echo "<table>";
                echo "<tr>";
                    echo "<br><a href='$des'><span>$title</span></a>";
                echo "</tr>";
                echo "<tr>";
                    echo "<a href='$des'><img src='$picloc'></a>";
                echo "</tr>";
                echo "<tr>";
                    echo "<br><a href=''><span>$</span></a>";
                echo "</tr></table>";
        echo "</td>";

    if($i%4==0 || $i == $count) echo '</tr>';

    $i++;
}
echo "</table>";
...