Fehler in Blätterscript

dooby

Grünschnabel
Hi! Mal wieder ein besonders "beliebtes" Thema ;-)! Ich hab ein einfaches Gästebuchscript entworfen und ausgerechnet bei der Blätterfunktion hakt es gewaltig! Sie funktioniert sozusagen eher gar nicht :-(! Vielleicht kann ja mal jemand von euch einen Blick drauf werfen!?
thx dooby
PHP:
<?php
 
 if($HTTP_POST_VARS[abgesendet]==1){
 
    $neuer_Eintrag = trim($HTTP_POST_VARS[neuer_Eintrag]);  // überflüssige Leerzeichen werden entfernt
    $neuer_Eintrag = strip_tags($neuer_Eintrag); // HTML-Code wird entfernt
    $neuer_Eintrag = str_replace("~","",$neuer_Eintrag); // "~" wird durch einen leeren String ersetzt
    $name          = trim($HTTP_POST_VARS[name]);
    $name          = strip_tags($name);
    $name          = str_replace("~","",$name);
    if(!$neuer_Eintrag){ $fehler = "Geben sie bitte einen Text ein!<br>";}
    if(!$name){$fehler = $fehler."Geben sie bitte ihren Namen an!"; }
 }
 

   if($neuer_Eintrag AND $name){
      
      if(file_exists('daten.dat')){$ausgabe="\n";}
      $n_E_Handle=fopen("daten.dat","a");
      $ausgabe = $ausgabe.$neuer_Eintrag."~".$name;
      fputs($n_E_Handle,$ausgabe);
      fclose($n_E_Handle);
      $name="";
      $neuer_Eintrag="";      // Ende neue Einträge speichern

      $Eintrag = file("daten.dat");
      $gesEintraege = count($Eintrag);
      $BpSeite = 5;                         
      
      if(isset($aktSeite) OR $aktSeite ==0){$aktSeite = 1;}
      
      $benSeite = ceil($gesEintraege/$aktSeite);

        for($i = ($gesEintraege-($BpSeite*($aktSeite-1)));$i>=($gesEintraege-(($BpSeite*$aktSeite)-1));$i--){
             
            if(isset($Eintrag[$i-1])){$ausgabe="";}
            
            else{
                 $aktBeitrag=$Eintrag[$i-1];
                 $element = explode("~",$aktBeitrag);            
                   
                 $ausgabe.="<div align=center> 
                 <table cellpadding=10 cellspacing=1  width=50% height=80%>
                  
                  <tr>
                   <td bgcolor=\"yellow\" height=5%><big>Name:</big>$element[0]</td>
                  </tr> 

                  
                  <tr>
                   <td bgcolor=\"blue\" height=5%><big>Beitrag:</big></td>
                  </tr>
 
                  <tr>
                   <td valign=top bgcolor=\"red\" height=70%>$element[2]</td>
                  </tr>

                 </table>

                 </div>";
                   
              }       
           
         }

          if($aktSeite>1){
            $i=$aktSeite-1;
            $link=echo"<a href=\"$PHP_SELF?$aktSeite=$i\">&lt;vorwaerts</a>";
          }

          for($i=1; $i<=$aktSeite;$i++){
             if($i==$aktSeite){
               $link2=echo $i."&nbsp;";  
             } 
              else{
                   $link2= echo"<a href=\"$PHP_SELF?$aktSeite=$i\">$i</a>&nbsp;"        
              }       
          }

        if($aktSeite<$benSeite){
           $i=$aktSeite+1; 
           $link3=echo "<a hef=\"$PHP_SELF?$aktSeite=$i\">next&gt</a>";
        }

}



?>

<html>
<head><title></title></head>
<body>
<center><h3>Gästebuch</h3></center><hr size=4>
<?php echo $fehler ?>
<form action = "<?php echo $PHP_SELF ?>" method = post>
<input type ="hidden" name="abgesendet" value=1>
Name:<br><input type = "text" name="name" value="<?php echo $HTTP_POST_VARS[name]; ?>"cols=25><br>
<textarea cols=50 rows=10 name="neuer_Eintrag"><?php echo $HTTP_POST_VARS[neuer_Eintrag]; ?></textarea>
<input type = "submit" value="Absenden">
</form>
<?php echo $ausgabe; ?>
<?php echo $link; ?>
</body>
</html>
 
Hallo!

Was funktioniert denn nicht?
Werden Fehlermeldungen ausgegeben?
Welche Code-Zeilen betrifft das Problem?

Den gesamten Code zu posten mag für Dich recht einfach sein, doch wenn Dir jemand helfen soll, ist relevanter Code das Zauberwort.

~snuu~
 
Hi!
Nein, es werden keine Fehlermeldungen ausgegeben.
PHP:
        for($i = ($gesEintraege-($BpSeite*($aktSeite-1)));$i>=($gesEintraege-(($BpSeite*$aktSeite)-1));$i--){ 
              
            if(isset($Eintrag[$i-1])){$ausgabe="";} 
             
            else{ 
                 $aktBeitrag=$Eintrag[$i-1]; 
                 $element = explode("~",$aktBeitrag);             
                    
                 $ausgabe.="<div align=center> 
                 <table cellpadding=10 cellspacing=1  width=50% height=80%> 
                   
                  <tr> 
                   <td bgcolor=\"yellow\" height=5%><big>Name:</big>$element[0]</td> 
                  </tr> 

                   
                  <tr> 
                   <td bgcolor=\"blue\" height=5%><big>Beitrag:</big></td> 
                  </tr> 

                  <tr> 
                   <td valign=top bgcolor=\"red\" height=70%>$element[1]</td> 
                  </tr> 

                 </table> 

                 </div>"; 
                    
              }
}

Ein Problem scheint schon einmal am Aufbau dieser Schleife zu liegen. Die Ausgabe von Beiträgen ohne Blätterfunktion hat funktioniert, nachdem ich dann allerdings diese Schleife eingebaut habe, bekomme ich 5 leere Gästebucheinträge, die sich nach jedem "absenden" eines neuen Eintrags um einen verringern. Am Ende stehe ich dann vor meinem Eingabeformular ohne Gästebucheinträge!

tschüssie
dooby
 
Zuletzt bearbeitet:
Der beschriebene Fehler muss am Aufbau der for-Schleife liegen, oder?
Wär ganz nett wenn dass jemand betrachten könnte, dann wüsste ich wo ich ansetzen muss!
Hab es bis jetzt immer noch nicht geschaftt!
mfg
dooby
 
Fehler Nr 1
was soll das bewirken?
if(isset($aktSeite) OR $aktSeite ==0){$aktSeite = 1;}

das bewirkt nur das deine Variable immer auf 1 gesetzt wird sobald sie gesetzt ist, wenn nicht dann bleibt sie ungesetzt ?


Fehler Nr 2
Du zählst in der File nach unten
durch $Eintrag = file("daten.dat"); bekommst du ein array $Eintrag[]
wo $Eintrag[0] die erste Zeile ist, $Eintrag[1] die 2. Zeile usw.

Du fängst auf der zeile -1 an zu lesen, sprich auserhalb des arrays wo etwas zu sehen ist.



Lösungsmöglichkeiten:
if(!isset($aktSeite) OR $aktSeite ==0){$aktSeite = 1;}

und

for($i = ($gesEintraege-($BpSeite*($aktSeite-1)));$i>=($gesEintraege-(($BpSeite*$aktSeite)-1));$i++){

nach weiteren Fehlern habe ich erst mal nicht gesucht, es könnte gut sein das noch einige andere drin sind aber teilweise ist es schwer bei dem Code durchzusteigen auf was du heraus wolltest.
 
Danke für die Antwort!
Ich hab jetzt die Fehler berichtigt! Das Problem ist, dass ich nach dem Verändern der for-Schleife gar keine Beiträge mehr angezeigt bekomme!

Meintest du eine konkrete Stelle, an der man nicht durchblickt auf was ich hinaus wollte?

dooby
 
Dankeschön :) ! Ich werd auch noch mal gucken, ob ich's vielleicht noch selbst irgendwie schaffe.


Hm, ich weiß, ich hab irgendwie die Sache mit dem vernünftigen Einrücken noch nicht so drauf! Ich werd mich aber bemühen :)!

cya dooby
 
Sorry, dass ich schon wieder rum nerve :( !
Also, ich hab jetzt eigentlich alles so hinbekommen, wie ich es mir vorgestellt habe, mit Außname der Links für die Blätterfunktion.

PHP:
for($h=1;$h<=$benSeiten;$h++){
       $link.="<a href=\"$PHP_SELF?aktSeite=$h\">$h</a>";
   }
Die Links werden dargestellt, allerdings funktionieren sie nicht richtig, sondern geben nur eine leere Seite mit dem Eingabeformular aus.
Der Wert der Variable $aktSeiten wird je nach Aufruf des Links geändert. Folglich müsste sich die Variable
PHP:
$startwert = ($aktSeite*$BpSeite) - $BpSeite;
ändern und die for-Schleife:
PHP:
for($i=$startwert-1;$i<$startwert+$BpSeite;$i++){
if(!isset($Eintrag[$i])){$ausgabe="";}
     else{

      $aktBeitrag=$Eintrag[$i];     
      $element = explode('~',$aktBeitrag); 
      
      $ausgabe.= "INHALT";
}
}
ab dem Startwert die Daten ausgeben, welcher der Seitenzahl entspricht!?

Soweit waren meine Überlegungen...

dooby

editiert: Ich bin mir nicht sicher, ob der Fehler bei der Übergabe des neuen Wertes für $aktSeite, oder bei den Bedingungen in der for-Schleife, für die Ausgabe der Einträge liegt. Am plausibelsten erscheint mir jedoch letzteres, da ich die erste Fehlerquelle mit...
PHP:
if(!isset($aktSeite)||($aktSeite==0)){$aktSeite=1;}
...ja eigentlich schon ausschließe bzw. das Fehlerresultat keine leere Seite wäre.

Ich hoffe ich hab nach meinem vielen editieren noch mal die Kurve gekriegt und es geschafft meine eigentliche Frage deutlich zu machen...
ciaoi nochmal dooby
 
Zuletzt bearbeitet:
Zurück