PHP Blätter Navi - Notice: Undefined Offset -1

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo

Ich erhalte eine Notice bei meinem selbstprogrammierten Kommentare-Script, und zwar dann wenn ich den 10ten Beitrag absetze.

Code der bemängelt wird:

PHP:
$listings_per_page = 10;
$max_posts            = 200;
 
  $pages=$s/$listings_per_page;
  $pages1=round($pages, 2);
  $pg= explode(".", $pages1);
  $pcount=count($pg);
  $ext=$pg[$pcount-2]; //hier soll der Fehler stecken!
 
 if($ext!=0) {
   $num=$pg[0]+1;
 }
 else {
   $num=$pg[0];
 }

Sobald es ein Beitrag 11 gibt ist die Notice weg, verstehe nicht wo ich hier einen Fehler mache.

Auf einer Seite sollen 10 Beiträge angezeigt werden. Insgesamt werde 200 gehalten, gibt es einen 200 und ersten dann wird der älteste Beitrag gelöscht, vorher aber in einer history.txt kopiert.
Alles funktioniert nur diese Notice verstehe ich nicht.
 
Es gibt im Array $pg keinen Index -1 - ganz einfach.
 
ich kann nicht nachvollziehen was der code eigentlich tun soll. wenn das ne pagination sein soll dann geht das so nicht.
 
Bei $s=10 ist der Quotient genau "1". Dadurch hat auch das Array nach explode nur ein Element und somit ist pcount=1, wodurch letztlich der Index im Array negativ wird.
 
@Jul

Und was mache ich da jetzt?
Ergänzung ()

@ice
Doch das funktioniert schon, nur halt die eine Notice..

Hier mal der Code:

PHP:
$listings_per_page = 10;
 
 
if(is_file("$folder/feedbacks.txt")) {
 
  $s=sizeof($list123);
 
if($page=='' or !$page) { 
 
   $page=1; 
 }
 
   $end=$listings_per_page*$page;
   $start=$end-$listings_per_page;
 
 if($start<>'0') {
   $new_page=$page-1;
   $prev = '<a href="xxxx&amp;page='.$new_page.'">«</a>';
 }
   else {
    $prev = "&nbsp;";
 }
 
 if($end<$s) {
    $new_page1=$page+1;
    $next = '<a href="xxxx&amp;page='.$new_page1.'">»</a>';
}
  else {
    $next = "&nbsp;";
   }
 
    $end = min($end, count($list123));
   for($i = $start; $i < $end; $i++) {
   if(substr($list123[$i], 1, 5 )!= "") {
 }
}
 
 $pages=$s/$listings_per_page;
 $pages1=round($pages, 2);
 $pg= explode(".", $pages1);
 $pcount=count($pg);
 $ext=$pg[$pcount-2];
 
 if($ext!=0) {
    $num=$pg[0]+1;
 }
  else {
    $num=$pg[0];
 }
   echo '<ul>'."\n";
   echo '<li>'.$prev.'</li>'."\n";
 
   for($i=1; $i<=$num; $i++) {
   if($i==$page) {
 
    echo '<li><span class="activePage">'.$i.'</span></li>'."\n";
  }
   else {
 
    echo '<li><a href="xxxx&amp;page='.$i.'#Nav">'.$i.'</a></li>'."\n";
    }
   }
 
 echo '<li>'.$next.'</li>'."\n";
 echo '</ul>'."\n";
 
Zuletzt bearbeitet:
Falls du die Daten aus einer Datenbank ausliest würde ich mit LIMIT arbeiten und für die Seiten einen GET Parameter übergeben, damit das Skript weiß welche Parameter Limit haben soll.
 
Ne, ist nur eine Kleinigkeit, läuft auf Dateien.

Bekomme ich einfach nicht hin, die Notice kommt immer wenn ich eine Seite voll haben, ein Seite beinhaltet 10 Beiträge. Wenn ich also den 20 oder 30 oder 40 geschrieben haben, erhalte ich die Notice.

Kann ich natürlich mit @verstecken doch es muss doch auch ohne dieses Mogeln gehen. Ich hänge jetzt 3 Stunden dran und bekomme die Notice nicht weg.

Mache ich es aber so:
PHP:
  $pages=$s/$listings_per_page;
  $pages1=round($pages, 2);
  $pg= explode(".", $pages1);
  $pcount=count($pg);
  $ext=$pg[$pcount-1]; //-1 statt -2

Ist die Notice weg, dafür aber wird mir der Link für die nächste Seite gesetzt, die dann aber ohne Beiträge ist, also leer. Und das ist auch Mist.
Kann ich das eventuell mit isset lösen? falls ja, wie genau muss sich vorgehen?

@ice
Ja, jeder kann es besser und anders :D
Ich stecke halt noch in der Übung, die Hauptsache ist doch, das es erst einmal so funktioniert, tut es ja auch wenn ich die Notice verstecke. ;)
 
Reicht ein
PHP:
$ext=$pg[$pcount - 1 < 0 ? 0 : $pgcount - 1]; //-1 statt -2
nicht schon aus? Dann ist sichergestellt, dass $pg[] mit mindestens dem Index 0 angesprochen wird. Besser an der Stelle wäre natürlich ein
PHP:
$pgi = $pgcount - 1;
if( $pgi < 0 ) $pgi = 0;
if( $pgi >= sizeof( $pg ) ) $pgi = sizeof( $pg ) -1;
Wenn du das allerdings ausschließen kannst, reicht ja die Prüfung auf < 0 aus.
 
Hi

Bewirkt das selbe wie das

PHP:
$ext=$pg[$pcount-1]; //-1 statt -2

Notice weg dafür aber Link für leere zweite Seite sichtbar.

EDIT:
Das zweite von dir funktioniert. Vielen Dank!
 
Zuletzt bearbeitet:
Zurück
Oben