views:

151

answers:

5

I'm trying to put an image as a separator between menu items but not on the outside and I'm not sure how to do this.. So it would end up being something like this:

HOME | ABOUT | CONTACT

unfortunately my code puts one after every entry including the last one.

mysql_select_db($database_db_connection, $db_connection);
$query_rsMenu = "SELECT * FROM menu WHERE online = 1 ORDER BY position ASC";
$rsMenu = mysql_query($query_rsMenu, $db_connection) or die(mysql_error());

echo "<ul class='MenuBarVertical'>\n";
    while($row_rsMenu = mysql_fetch_assoc($rsMenu)) {
    echo ("   <li><a href=\"../" . $row_rsMenu['menuURL'] . "\">" . $row_rsMenu['menuName'] . "</a> <img src='SiteFiles/Site/separator.jpg' /> </li>\n");
    }
echo "</ul>\n";

mysql_free_result($rsMenu);

Thanks

+2  A: 

The easy solution is to special case either the last iteration or the first one. The first one is usually easier: set $first = true outside the loop, inside the loop: if (!$first) { print 'separator'; }.

djc
I'd say this is the most elegant way.
z-boss
A: 
$count = 0;
$dbRows = mysql_num_rows($rsMenu);
while($row_rsMenu = mysql_fetch_assoc($rsMenu)) {
    $count++;
    echo ("   <li><a href=\"../" . $row_rsMenu['menuURL'] . "\">" . $row_rsMenu['menuName'];
    if($count < $dbRows)
      echo ("</a> <img src='SiteFiles/Site/separator.jpg' /> </li>\n");
    }
Femaref
Thanks... this is what I was looking for!
dmschenk
A: 

You could use mysql_num_rows() to get the number of rows from the result set, and build some logic against the result.

Kris.Mitchell
A: 

Yet another answer :

for ($i = 1; $i <= mysql_num_rows($rsMenu); $i++) {

  $row_rsMenu = mysql_fetch_assoc($rsMenu);
  // do something;

  if ($i == mysql_num_rows($rsMenu) - 1) {
    // this is the last element, do something;
  }

}
Furuno
Now you're requesting the number of rows on every iteration, that's just wasteful.
djc
+3  A: 

You could also build an array and use implode when you print it out. This also separates the database model from the view a little better.

mysql_select_db($database_db_connection, $db_connection);
$query_rsMenu = "SELECT * FROM menu WHERE online = 1 ORDER BY position ASC";
$rsMenu = mysql_query($query_rsMenu, $db_connection) or die(mysql_error());

$array = array();
while($row_rsMenu = mysql_fetch_assoc($rsMenu)) {
    $array[] = "<li><a href=\"../" . $row_rsMenu['menuURL'] . "\">" . $row_rsMenu['menuName'] . "</a></li>\n";
}

mysql_free_result($rsMenu);

echo "<ul class='MenuBarVertical'>\n";
echo implode(' <img src="SiteFiles/Site/separator.jpg" /> ', $array);
echo "</ul>\n";

Of course the tags end up between the li instead of inside, but since you are making the li inline I think it will work.

SorcyCat