2014-07-09 3 views
0

У меня возникли проблемы с моим кодом. То, что я пытаюсь достичь:PHP add html break после каждого 10-го результата mysql

У меня есть таблица базы данных под названием «matches», содержащая информацию о футбольных арматурах. На данный момент у меня есть около 100 матчей в этой таблице, но в скором времени они будут на 500+, поэтому, чтобы не упустить умы моих зрителей, я хочу, чтобы мой код выполнял разрыв строки (или, может быть, новую строку таблицы, которая сейчас не важна, просто некоторые HTML теги) после каждого 10-го результата отображается (потому что каждую неделю есть 10 матчей)

Вот мой PHP код:

$sql = "SELECT * FROM matches ORDER BY matchid ASC"; 
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql)); 
$fixtures=''; 
while($row = mysqli_fetch_array($query)) { 
    $fixturetime = $row["time"]; 
    $fixturetime2 = $row["time"]; 
    $fixtureid = $row["matchid"]; 
    $fixtureround = $row["round"]; 
    $hometeamid = $row["hometeamid"]; 
    $awayteamid = $row["awayteamid"]; 
    $fixturetime = strtotime($fixturetime); 
    $fixturetime = date('d.m.Y', $fixturetime); 
    $fixturetime2 = strtotime($fixturetime2); 
    $fixturetime2 = date('H:i', $fixturetime2); 

    $fixtures.='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>'; 
} 

А вот HTML выход:

<table> 
    <?php echo $fixtures; ?> 
</table> 

I попробовали некоторые методы, показанные в stackoverflow, но я не смог их правильно реализовать для своего решения. Поскольку я новичок в PHP, я прошу конкретного решения.

спасибо.

ответ

4

Попробуйте это;)

<?php 

$sql = "SELECT * FROM matches ORDER BY matchid ASC"; 
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql)); 
$fixtures = ''; 
$i = 1; 

while($row = mysqli_fetch_array($query)) { 
    $fixturetime = $row["time"]; 
    $fixturetime2 = $row["time"]; 
    $fixtureid = $row["matchid"]; 
    $fixtureround = $row["round"]; 
    $hometeamid = $row["hometeamid"]; 
    $awayteamid = $row["awayteamid"]; 
    $fixturetime = strtotime($fixturetime); 
    $fixturetime = date('d.m.Y', $fixturetime); 
    $fixturetime2 = strtotime($fixturetime2); 
    $fixturetime2 = date('H:i', $fixturetime2); 

    $fixtures .= '<tr><td><strong>' . $hometeamname . '</strong> v. <strong>' . $awayteamname . '</strong></td><td>' . $fixturetime . '</td><td>' . $fixturetime2 . '</td><td style="text-align: right;">' . $fixtureid . '</td><td>' . $i . '</td></tr>'; 

    if(!($i % 10)){ 
     $fixtures .= '<!-- break -->'; 
    } 

    $i++; 
} 
+0

С ' $ i = 0' вы получите перерыв после первой строки. Предложите установку '$ i = 1' для начала. – cOle2

+0

О, мой плохой ... исправлен;) – Zemistr

+0

Я избил вас на минуту. ;-p – ArtisticPhoenix

4

Я предлагаю использовать моды или знак%, это возвращает остаток от деления (так что остаток от п/10 будут 0 каждые 10 строк).

Итак, вы хотите иметь счетчик

$count = 1; 
while($row = .....){ 
    if($count % 10 == 0){ 
    //do line break; 
    } 


    ++$count; 
} 

PHP по модулю справки о http://www.php.net/manual/en/internals2.opcodes.mod.php

вы, возможно, придется играть с этим немного, но это основы.

+0

Это правильный способ сделать это :) Но если вы новичок в PHP, то увидите другие ответы. – beingalex

2

Я предлагаю простейшую вещь, о которой я могу думать.

$sql = "SELECT * FROM matches ORDER BY matchid ASC"; 
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql)); 
$fixtures=''; 
$counter = 0; 
while($row = mysqli_fetch_array($query)) { 
$counter++; 
$fixturetime = $row["time"]; 
$fixturetime2 = $row["time"]; 
$fixtureid = $row["matchid"]; 
$fixtureround = $row["round"]; 
$hometeamid = $row["hometeamid"]; 
$awayteamid = $row["awayteamid"]; 
$fixturetime = strtotime($fixturetime); 
$fixturetime = date('d.m.Y', $fixturetime); 
$fixturetime2 = strtotime($fixturetime2); 
$fixturetime2 = date('H:i', $fixturetime2); 

$fixtures.='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>'; 

if (($counter % 10) == 0){ $fixtures .= '<br>'; } 
} 

Это добавит 1 к счетчику каждый раз, когда выполняется итерация. Оператор if проверяет, есть ли остаток после проверки $ counter против 10. Если он есть, он будет продолжать работать без разрыва строки. Если нет остатка, то есть он кратен 10, он добавит
до конца.

Надеюсь, это то, что вы хотите!

0

Вам нужно будет подсчитать каждую строку. Используя новую переменную $i, начиная с 0, эта переменная будет увеличена на единицу в каждом цикле. Затем проверьте, превышает ли эта переменная 10. Если он добавляет больше html к строке $fixtures, которая создает «пустую» строку.

Если пустая строка найдена также сбросить переменную $i назад 0

$sql = "SELECT * FROM matches ORDER BY matchid ASC"; 
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql)); 
$fixtures=''; 
$i = 0; // <-- New variable 

while($row = mysqli_fetch_array($query)) { 

    $fixturetime = $row["time"]; 
    $fixturetime2 = $row["time"]; 
    $fixtureid = $row["matchid"]; 
    $fixtureround = $row["round"]; 
    $hometeamid = $row["hometeamid"]; 
    $awayteamid = $row["awayteamid"]; 
    $fixturetime = strtotime($fixturetime); 
    $fixturetime = date('d.m.Y', $fixturetime); 
    $fixturetime2 = strtotime($fixturetime2); 
    $fixturetime2 = date('H:i', $fixturetime2); 

    $fixtures.='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>'; 

    $i ++; // <-- add one 

    if ($i > 10) { // <-- If larger than 10 then do this statement 

     $fixtures.='<tr><td colspan=4>BREAK</td></tr>'; 
     $i = 0; // <-- Oh and reset $i 
    } 

} 
0

Я хотел бы посмотреть на нумерации страниц решений, которые используют OFFSET с пунктом LIMIT.За пределами этого, хотя, вы можете сохранить свои результаты в группах по 10, а затем применить выходной логики, как вы Переберите группы:

$sql = "SELECT * FROM matches ORDER BY matchid ASC"; 
$query = mysqli_query($Connection, $sql) or die (mysqli_error($sql)); 
$fixtures = array(); // Each element will be an array of fixtures 
$fixturesPerGroup = 10; // How many fixtures per group 
$fixtureCount = 0; // Counter during the while loop iterating 
$fixtureGroup = 0; // Which group to put the fixtures into 
while($row = mysqli_fetch_array($query)) { 
    $fixturetime = $row["time"]; 
    $fixturetime2 = $row["time"]; 
    $fixtureid = $row["matchid"]; 
    $fixtureround = $row["round"]; 
    $hometeamid = $row["hometeamid"]; 
    $awayteamid = $row["awayteamid"]; 
    $fixturetime = strtotime($fixturetime); 
    $fixturetime = date('d.m.Y', $fixturetime); 
    $fixturetime2 = strtotime($fixturetime2); 
    $fixturetime2 = date('H:i', $fixturetime2); 

    $fixtures[$fixtureGroup][] ='<tr><td><strong>' .$hometeamname. '</strong> v. <strong>' .$awayteamname. '</strong></td><td>' .$fixturetime. '</td><td>' .$fixturetime2. '</td><td style="text-align: right;">' .$fixtureid. '</td><td>' .$i. '</td></tr>'; 

    $fixtureCount++; 
    // Once we reach the fixturesPerGroup count, go to the next group 
    if (($fixtureCount % $fixturesPerGroup) == 0) { 
     $fixtureGroup++; 
    } 
} 

Затем вы можете перебрать группы:

<table> 
<?php 
foreach ($fixtures as $fixturesInGroup) { 
    // Do logic here for displaying each group 
    echo implode('<br />', $fixturesInGroup); 
} 
?> 
</table> 
Смежные вопросы