Check op laatste rij in een while lus

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam Clauw

Sam Clauw

16/12/2010 00:11:07
Quote Anchor link
Hallo allen,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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();

?>


Alvast bedankt voor de tips en de hulp!
 
PHP hulp

PHP hulp

22/11/2024 20:03:21
 
- SanThe -

- SanThe -

16/12/2010 00:29:10
Quote Anchor link
Aantal rows opvragen en een teller mee laten lopen. Zijn ze gelijk dan ben je bij de laatste.
 
Vincent Huisman

Vincent Huisman

16/12/2010 07:28:51
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$i
=0;
while($row = $result->fetch_assoc())
{

    $i++;
    
    if($i == het aantal tijen)
    {

        // Doe hier geen streepje
    }
    else
    {
        // Wel een streepje
    }
}

?>
 
Kris Peeters

Kris Peeters

16/12/2010 09:36:50
Quote Anchor link
Wat ik meestal doe in dat soort gevallen is dat streepje vóór de link te zetten; behalve bij de eerste iteratie. Dat rekent nog simpeler.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$i
=0;
while($row = $result->fetch_assoc())
{

  if ($i>0) { echo ' | ';}
  echo '<li class="acti ... ';
  $i++;
}

?>


PS.
Je hebt een lus met een $i die wordt geïnitialiseerd en geïncremented.
Die kan je ook in een for zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
for($i=0; $row = $result->fetch_assoc(); $i++) {
...
}

?>

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

Sam Clauw

16/12/2010 11:41:10
Quote Anchor link
Bedankt SanThe, Vincent en Kris! De teller werkt uiteindelijk en de extra klasse werd toegewezen. 'k Heb het op de volgende manier opgelost, een combi van jullie reacties in feite:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';                            
    }
}


?>
 
TJVB tvb

TJVB tvb

16/12/2010 11:52:07
Quote Anchor link
En als je het streepje er nu voor zet?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>
Gewijzigd op 16/12/2010 11:53:06 door TJVB tvb
 
- SanThe -

- SanThe -

16/12/2010 11:54:15
Quote Anchor link
@Sam:

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 -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.