Check op laatste rij in een while lus
hoewel ik nu al enige tijd bezig ben met php, blijf ik momenteel sukkelen met een beginners probleem. Ik heb via mysqli een menu opgebouwd vanuit m'n database. Elk menu item heeft een verticale streep achter de titel (voorafgegaan door wat padding uiteraard) zodat er een goed onderscheid is. Het is zo dat ik voor de laatste menutitel géén streepje wens. Ik moet met andere woorden een check doen wanneer de laatste lus uitgevoerd wordt zodat ik een extra css class kan meegeven (.last). Heeft iemand een idee hoe je hiervoor te werk gaat? Mijn code ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$menu = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
$sql = "SELECT title, id, weight, active FROM pages WHERE active = 1 ORDER BY weight ASC";
if(!$result = $menu->query($sql)){
trigger_error('Fout in query:' . $menu->error);
}else{
while($row = $result->fetch_assoc()){
echo '<li class="active"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}
}
$menu->close();
?>
$menu = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
$sql = "SELECT title, id, weight, active FROM pages WHERE active = 1 ORDER BY weight ASC";
if(!$result = $menu->query($sql)){
trigger_error('Fout in query:' . $menu->error);
}else{
while($row = $result->fetch_assoc()){
echo '<li class="active"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}
}
$menu->close();
?>
Alvast bedankt voor de tips en de hulp!
Aantal rows opvragen en een teller mee laten lopen. Zijn ze gelijk dan ben je bij de laatste.
Code (php)
PS.
Je hebt een lus met een $i die wordt geïnitialiseerd en geïncremented.
Die kan je ook in een for zetten.
Heel erg gebruikelijk is dit misschien niet, maar niets verplicht je om als tweede statement in de parameter van de for lus iets te zetten dat iets met $i te maken heeft.
Gewijzigd op 16/12/2010 10:28:15 door Kris Peeters
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$i = 0;
while($row = $result->fetch_assoc()){
$i++;
$totalRows = mysqli_num_rows($result);
// Spaties in de URL vervangen door koppeltekens
$title = str_replace(' ', '-', $row['title']);
// URL omzetten naar kleine letters
$title = strtolower($title);
// Laatste pagina?
$last = '';
if($i == $totalRows){
$last = 'last';
}
// Pagina actief?
if($page == $title){
echo '<li class="active ' . $last . '"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}else{
echo '<li class="' . $last . '"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}
}
?>
$i = 0;
while($row = $result->fetch_assoc()){
$i++;
$totalRows = mysqli_num_rows($result);
// Spaties in de URL vervangen door koppeltekens
$title = str_replace(' ', '-', $row['title']);
// URL omzetten naar kleine letters
$title = strtolower($title);
// Laatste pagina?
$last = '';
if($i == $totalRows){
$last = 'last';
}
// Pagina actief?
if($page == $title){
echo '<li class="active ' . $last . '"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}else{
echo '<li class="' . $last . '"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$menu = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
$sql = "SELECT title, id, weight, active FROM pages WHERE active = 1 ORDER BY weight ASC";
$menutext = '';
if(!$result = $menu->query($sql)){
trigger_error('Fout in query:' . $menu->error);
}else{
while($row = $result->fetch_assoc())
{
if(strlen($menutext))
{
$menutext .= ' | '; //voor elke behalve de eerste zetten we het streepje
}
$menutext .= '<li class="active"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}
}
$menu->close();
echo $menutext;//plaats dit waar je het menu wilt weergeven
?>
$menu = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
$sql = "SELECT title, id, weight, active FROM pages WHERE active = 1 ORDER BY weight ASC";
$menutext = '';
if(!$result = $menu->query($sql)){
trigger_error('Fout in query:' . $menu->error);
}else{
while($row = $result->fetch_assoc())
{
if(strlen($menutext))
{
$menutext .= ' | '; //voor elke behalve de eerste zetten we het streepje
}
$menutext .= '<li class="active"><a href="/' . $title . '" title="' . $row['title'] . '">' . $row['title'] . '</a></li>';
}
}
$menu->close();
echo $menutext;//plaats dit waar je het menu wilt weergeven
?>
Gewijzigd op 16/12/2010 11:53:06 door TJVB tvb
Regel 7 in de while() zetten is niet echt netjes en een hoop extra gedoe voor de server. Die regel hoeft slechts één keer uitgevoerd te worden. Dus zet je het vóór de while().
Gewijzigd op 16/12/2010 11:56:00 door - SanThe -