kointa: foreach zählt 1 zu weit !?

Hi all,

ich habe mir ein kleines php skript geschrieben, dass mir eine tabelle mit daten aus einer datei darstellt. Nur habe ich das Problem, dass die foreach() schleife mir irgendwie 1 zu weit zählt.
Also wenn ich mir das Array durchzählen lasse mit echo count($newgame) dann zeigt es mir zb. 4 an obwohl ich nur 3 games eingetragen habe, folglich wird mir eine leere zeile in meine seite geschrieben.

Das skript sieht folgendermaßen aus:

newgame.php

<?php  
$id = $_POST["id"];  
$url = $_POST["url"];  
$altname = $_POST["altname"];  
$name = $_POST["name"];  
  
if ($id == "" or $url == "" or $altname == "" or $name == "")  
{  
  echo "Es wurden ein oder mehrere Felder nicht korrekt ausgef&uuml;llt";  
}  
else  
{  
  $newgame = "$id|$url|$altname|$name";  
  $datei = fopen("gamelist.txt", "a");  
  fwrite($datei, "\n".$newgame);  
  fclose($datei);  
  
 echo "Eintrag wurde &uuml;bernommen";  
}  
?>

list.php

<?php  
$newgame = file("gamelist.txt");  
krsort($newgame);  
echo "<table id=\"gamelist\" border=\"0\" align=\"center\">";  
echo "<tr>";  
  
echo count($newgame);  
  
$i=0;  
foreach ($newgame as $ausgabe)  
{  
  $ausgabe = stripslashes($ausgabe);  
  $zerlegen = explode("|", $ausgabe);  
  
  echo "<th><a href=\"?id=$zerlegen[0]\" onclick=\"return loadGame(this.href)\"><img src=\"$zerlegen[1]\" alt=\"$zerlegen[2]\" border=\"0\"><br>$zerlegen[3]</a></th>";  
  $i++;  
  
  if ($i == 3)  
  {  
    echo "</tr><tr>";  
    $i=0;  
  }  
}  
  
echo "</tr></table>";  
?>

Reichen die infos aus oder soll ich den Inhalt der gamelist.txt auch noch posten ? da würde jetzt zb. folgendes drin stehen:

40|http://blalbu.de|namedesspiels|name des spiels

nur würde die count funktion hierfür 2 anstatt 1 ausgeben.

hoffe das problem kennt jemand und kann mir helfen.

vielen dank
kointa

  1. hoffe das problem kennt jemand und kann mir helfen.

    dein problem ist
    a) dein code html ist nicht der beste
    warum heisst das ding "gamelist" wenn du es als tabelle auszeichnest? imho ist es eine liste, warum wirds keine liste

    mache dir zuerst gedanken um die html ausgaben, dann erst darum, wie du die inhalte vernünftig dahinbringst

    b)
    wenn du schon wirklich alle 3 zeilen ein tr einbauen willst, dann nutze die macht der mathematik - "modulo" ist dein freund

    1. a) dein code html ist nicht der beste
      warum heisst das ding "gamelist" wenn du es als tabelle auszeichnest? imho ist es eine liste, warum wirds keine liste

      mache dir zuerst gedanken um die html ausgaben, dann erst darum, wie du die inhalte vernünftig dahinbringst

      das ist ja nur die id=, es ist halt eine liste von games, die halt als tabelle dargestellt wird. passt schon ich weiß was gemeint ist ;)

      b)
      wenn du schon wirklich alle 3 zeilen ein tr einbauen willst, dann nutze die macht der mathematik - "modulo" ist dein freund

      jop danke für den tip, habs mal eingebaut..

      1. das ist ja nur die id=, es ist halt eine liste von games, die halt als tabelle dargestellt wird. passt schon ich weiß was gemeint ist ;)

        eine liste die als tabelle dargestellt wird - float für die li-elemente reicht da doch aus ;)

        1. eine liste die als tabelle dargestellt wird - float für die li-elemente reicht da doch aus ;)

          das könnte stimmen :D, muss ich mal austesten.
          ich habs halt so realisisert wegen den bilder die dabei sind, aber wenn <li> die besseres lösung ist dann werd ichs mal testen danke.

  2. öhm da hast du wohl eine Leerzeile am Ende deiner Datei. Am besten prüfst du vor der Ausgabe einer jeden Zeile, ob die Variablen Werte haben und nur wenn das der Fall ist gibst du was aus.

    1. öhm da hast du wohl eine Leerzeile am Ende deiner Datei. Am besten prüfst du vor der Ausgabe einer jeden Zeile, ob die Variablen Werte haben und nur wenn das der Fall ist gibst du was aus.

      danke, so klappts.
      ich dachte ich könnte irgendwie die zuletzt gezählte zeile vom array abschneiden, aber so gehts ja auch.

        
      if ($zerlegen[1] != "" && $zerlegen[2] != "" && $zerlegen[3] != "")  
        {  
           REST  
        }  
      
      

      oder gibts noch ne elegantere lösung ?