[PHP] Skrypt listy przebojów - problem

0

Witam!

Napisalem nastepujacy skrypt (opis problemu umieszcze pod nim):

(...) // Budowanie tablicy na podstawie pliku
$plik = fopen ("dane/lista.txt","r");
$linia = fgetss ($plik,1024);
$pozycja = array(NULL);
$ile_propozycji = "0";
$ile_glosow = "0";
while(!feof($plik))
  {
  list($utwor,$glosy,$data) = explode("||", $linia);
  array_push($pozycja, "$glosy</font></td><td><font class='normalny'>$utwor</font></td><td><font class='normalny'><i>$data</i></font> ");
  $ile_propozycji++;
  $ile_glosow = $ile_glosow+$glosy;
  $linia = fgetss ($plik,1024);
  }
fclose($plik);

// Sortowanie tablicy i przygotowania
$numer = "0";
arsort($pozycja, SORT_NUMERIC);
reset($pozycja);
(...)

// Wypisywanie wynikow
while (list($klucz,$wartosc) = each ($pozycja))
   {
   $numer++;
   echo "<tr>
   <td><font class='normalny'>$wartosc";
   if ($zaglosowano != "tak") { echo "<input class='2' type='radio' name='sonda' value='$klucz'> "; }
   if ($numer > $ile_hitow) { echo "<font class='dodatek'>(#$numer)</font>"; }
   echo "</td>
   </tr>";
   if ($numer == $ile_hitow)
	   {
	   echo "<tr><td colspan='4'><hr></td></tr>";
	   }
   }
echo "</table><br>";
if ($zaglosowano != "tak") { echo "<input type='submit' value='Głosuj'></form>"; }
echo "<font class='normalny'><b>RAZEM:</b> propozycji - $ile_propozycji, głosów - $ile_glosow.</font>";

... Wszystko dziala niby poza jednym bugiem, ktorego nie potrafie znalezc. Efekt wywolania skryptu jest nastepujacy (przyklad):

2 CHOICE - Boiling Blood 21-03-2005
1 PH5,5 - Ula Wróć 22-03-2005
1 PERFECT CIRCLE - The Outsider 22-03-2005
0 GEISHA GONER - Among The Lies 22-03-2005
0 CHOICE - All Go Down 21-03-2005
0 SCEPTIC - Unbeliever's Script 22-03-2005
0 BUDDY RICH - Buddy's Rock 22-03-2005
0 CHOICE - Slide 21-03-2005
0 CHOICE - Lost 21-03-2005
0 CHOICE - The Angerfeeder 21-03-2005

0 CHOICE - Human 21-03-2005 (#11)
0 CHOICE - Angels Of The End 21-03-2005 (#12)
(#13)
0 CHOICE - Trapped 21-03-2005 (#14)

RAZEM: propozycji - 13, głosów - 4.

Prosze zwrocic uwage na fragment zaznaczony przeze mnie pogrubieniem. Nie chce zeby tak sie dzialo ;P Skad sie bierze ta pusta linia z "(#13)"? Zamiast tego powinna byc ta nizsza linia, ale oznaczona #13, nie #14.

Prosze jakiegos mistrza o pomoc w znalezieniu buga, ktory sprawia, ze wyniki nie sa wyswietlane prawidlowo.</b>

0

Moze w pliku z ktorego pobierasz dane masz jakis blad, ukryty znak czy cos co powoduje taki odczyt?

0

Sluszne spostrzezenie (dzieki), o to chodzilo. Tylko teraz jestem w kropce... Okazuje sie, ze skrypt, dzieki ktoremu mozliwe jest edytowanie pliku z danymi z panelu administracyjnego, jest nieprawidlowy, bo cos chrzani (prawdopodobnie ze znakami \n albo cos).
Tak mniej wiecej wyglada:

// Edytowanie
$nazwa_pliku = $lista;
$fd = fopen ($nazwa_pliku, "r"); 
$tresc = @fread ($fd, filesize ($nazwa_pliku)); 
fclose ($fd);

<form name="edit" method="post" action="index.php?opcja=save_lista">
<textarea name="tresc" cols="83" rows="15"><?php echo $tresc ?></textarea><br>
<input type="submit" value="Zapisz">
</form>

// Zapisywanie
$tresc = stripslashes($tresc);
$fil = $lista;
$fp = fopen($fil, "w");
fputs($fp, $tresc);
fclose($fp);

Co powinienem zmienic??

Przy okazji znalazlem tez inny blad, ktory jednak juz naprawilem. Problem znajdowal sie we fragmencie kodu odpowiadajacego za wyswietlenie wynikow na stronie. Nalezalo przesunac warunek na poczatek petli:

// Wypisywanie wynikow
while (list($klucz,$wartosc) = each ($pozycja))
   {
   if ($numer == $ile_hitow)
	   {
	   echo "<tr><td colspan='4'><hr></td></tr>";
	   }
   $numer++;
   echo "<tr><td><font class='normalny'>$wartosc";
   if ($zaglosowano != "tak") { echo "<input class='2' type='radio' name='sonda' value='$klucz'> "; }
   if ($numer > $ile_hitow) { echo "<font class='dodatek'>(#$numer)</font>"; }
   echo "</td></tr>";
   }
echo "</table><br>";

1 użytkowników online, w tym zalogowanych: 0, gości: 1