Probleme FOR-Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme FOR-Schleife

    Hallo,

    ich habe einige Probleme mit meiner FOR-Schleife. Hier ein Auszug:

    $Anzahl=2;
    $maximum = 2;
    $minimum = 0;

    for( $i = $minimum ; $i < ($minimum + $Anzahl) ; $i++ )
    {
    $kdnr = $liste[$i]['kdnr'];
    $inhaber_nachname = $liste[$i]['inhaber_nachname'];
    echo "<br>";
    echo "Kdnr: $kdnr";
    }

    Mein Problem ist folgendes. Wenn ich insgesamt 3 Datensätze habe, und möchte 2 pro Seite ausgeben, dann werden auf der 1.Seite 2 Datensätze ausgegeben. Das ist soweit richtig. Auf der 2.Seite wo der 3.Datensatz dargestellt wird, wird noch zusätzlich ein 4. leer Datensatz angezeigt. Ich möchte, dass auf der 2.Seite nur der 3.Datensatz angezeigt wird, mehr nicht. Wieso? Ich kann den Fehler in der FOR-Schleife nicht finden. Vielleicht könnt ihr mir ja weiter helfen.

    Ich wäre euch sehr dankbar!

    Gruss
    Benji

  • #2
    drei datensätze => indizes von 0 bis 2

    du zählst aber von 0 bis 3
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Wieso bis 3? Könntest du mir das bitte etwas genauer erläutern?

      Kommentar


      • #4
        sorry verlesen

        du zählst natürlich von 0 solange hoch wie der zähler kleiner als 2 is, also von 0 - 1
        => schleife wird zweimal durchlaufen

        das machst du aber immer, ich seh nirgends, dass du die größe des arrays berücksichtigst
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Wie muss ich denn die Schleife umschreiben, damit die korrekte Anzahl der Datensätze angezeigt wird?

          Kommentar


          • #6
            kommt drauf an was in $liste drinsteht, aber prinzipiell verkehrt wäre sowas nicht:
            PHP-Code:
            $max=min(count($liste), ($minimum+$anzahl));

            for (
            $i=0;$i<$max;$i++) 
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              mach das nach diesem Prinzip (nicht 1:1 übernehmen)

              1.) Ermittele die Größe des Arrays
              2.) Leite anhand dieser Infos deine Schleifenlaufzeit ab.


              PHP-Code:
               $seiten ceil($menge $Anzahl);
                if ( !
              $z )
                
              $z 1;

              $maximum $s $Anzahl;
              $minimum $maximum $Anzahl
              Ich habe hierzu schon mal ein Tut geschrieben in den CodeSchnippseln....

              Angenommen du hast eine Anzahl von 2 und eine Menge an Datensätzen im Array 5
              dann bekommst du rechnerisch 2,5 -> es wird aufgerundet also 3. Stimm auch

              $s ist deine derzeitige Seite wo du übergibst z.B. Seite 2

              Deine For(); musst du dann auf das ganze hier umschreiben dann springt sie da rein wo sie soll.

              Beispiel weitergeführt.......

              $maximum=2+2
              $maximum=4
              $minimum=4-2
              $minimum=2

              von 2 bis 4.


              Dann musst du nur noch die letzte Position abfangen
              $maximum=6
              $minimum=4
              -> 2 Datensätze wo es aber nur noch einen gibt.......

              Schau mal ins codeschnippsel vorbei
              [color=blue]MfG Payne_of_Death[/color]

              [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
              [color=red]Merke:[/color]
              [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

              Murphy`s Importanst LAWS
              Jede Lösung bringt nur neue Probleme
              Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
              In jedem kleinen Problem steckt ein großes, das gern raus moechte.

              Kommentar


              • #8
                Das hat auch nicht geklappt. Auf der 1.Seite werden zwar die beiden Datensätze dargestellt, aber auf der 2.Seite werden dann alle 3 angezeigt. Da stimmt die FOR Schleife immer noch nicht.

                Kommentar


                • #9
                  schau dir mal das von pod an

                  mein snippet sorgtn ur dafür, dass du das richtige ende erwsicht, den richitgen anfang musst du ja auch noch angeben
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Hier ein Auszug aus meinem Code:

                    $Abzahl = 2;
                    $liste = array();
                    if($obj = mysql_query("SELECT * FROM dhs_branchenbuch_spezialeintrag WHERE linkverzeichnis=1"))
                    {
                    while($row = mysql_fetch_assoc($obj))
                    {
                    array_push($liste,$row);
                    }
                    }

                    $menge = 3;
                    $seiten = ceil($menge / $Anzahl);

                    if ( !$z )
                    $z = 1;

                    $maximum = $z * $Anzahl;
                    $minimum = $maximum - $Anzahl;

                    If ($menge > 0)
                    {
                    for( $i = $minimum ; $i < ($maximum) ; $i++ )
                    {
                    $kdnr = $liste[$i]['kdnr'];
                    echo "Kdnr: $kdnr";
                    }
                    }

                    If ($menge > $Anzahl)
                    {
                    echo "<b><center>";
                    $vor = $z - 1; // Gibt einen Statuswert ab der sagt ob es noch ältere Einträge gibt.
                    $next = $z + 1; // Gibt einen Statuswert ab ob es noch weitere gibt.

                    If ($vor != 0 )
                    echo "<a href=\"anzahl_seiten1.php?z=$vor\">";
                    If ($vor == 0)
                    {
                    echo "<span class=\"links_inaktiv\"><strike>Zurück</strike></span>";
                    }
                    else
                    {
                    echo "<span class=\"links_normal\">Zurück</span>";
                    }
                    If ($vor !=0) echo "</a>";
                    echo " | ";
                    If ($next <= $seiten)
                    echo "<a href=\"anzahl_seiten1.php?z=$next\">";
                    If ($next > $seiten)
                    {
                    echo "<span class=\"links_inaktiv\"><strike>Vor</strike></span>";
                    }
                    else
                    {
                    echo "<span class=\"links_normal\">Vor</span>";
                    }
                    If ($next <=$seiten) echo "</a>";
                    echo"</b></center><P>";
                    }


                    Mit diesem Skript werden immer noch 4 statt 3 Datensätze verteilt auf 2 Seiten angezeigt.

                    Kommentar


                    • #11
                      Gleich ein Fehler aufgefallen:

                      1.) keine Forum PHP-Tags
                      2.)
                      $Abzahl = 2;
                      heisst wohl net $Anzahl oder?

                      3.) Den Thread zu Ende lesen, da steht was von aufgrund bestimmter Konstellationen zwischen $Anzahl und Datensatzmenge kann es zu Problemen kommen.
                      Daher sehe ich auch kein break


                      Frage ist der 4.Datensatz ein leerer?
                      [color=blue]MfG Payne_of_Death[/color]

                      [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                      [color=red]Merke:[/color]
                      [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                      Murphy`s Importanst LAWS
                      Jede Lösung bringt nur neue Probleme
                      Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                      In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                      Kommentar


                      • #12
                        Sorry hab mich bei $anzahl verschrieben. Natürlich soll es $anzahl heissen.

                        Und der 4.Datensatz ist bei mir leer.

                        Kommentar


                        • #13
                          Geh noch mal in den Thread bei den CodeSchnippsels und schau dir den Beitrag von Happy den Beitrag genauer an, dann dürfte das nicht mehr vorkommen.

                          Du musst eben nur noch bedenken das aufgrund der Rundung und bestimmtes Zahlenkonstellationen eine höhere Differenz gibt als tatsächlich vorhanden ist, das bedeutet es muss vorab abgefangen werden indem die For(); geclosed wird.
                          [color=blue]MfG Payne_of_Death[/color]

                          [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                          [color=red]Merke:[/color]
                          [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                          Murphy`s Importanst LAWS
                          Jede Lösung bringt nur neue Probleme
                          Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                          In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                          Kommentar


                          • #14
                            Ich habe versucht die Beiträge von Happy auswendig zu machen. Leider ohne Erfolg. Könntest du mir bitte den Link geben? Wie meinst du das mit dem Abfangen der Schleife?

                            Kommentar


                            • #15
                              Beitrag von mr.happyiness

                              break = kickt bzw. beendet eine Schleife
                              dazu noch eine Bedingung und es müsste klappen.

                              Ich denke das von Happy müsste hinhauen, ansonsten selber logisch drüber nachdenken.

                              [color=red]Nachtrag: Funktioniert todsicher, gerade mal nachgehakt. Es würde sogar reichen das >= durch ein == zu ersetzen. Da letzterer Fall so eh nicht eintreten kan[/color]

                              Gruß
                              Zuletzt geändert von Payne_of_Death; 18.08.2003, 22:13.
                              [color=blue]MfG Payne_of_Death[/color]

                              [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                              [color=red]Merke:[/color]
                              [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                              Murphy`s Importanst LAWS
                              Jede Lösung bringt nur neue Probleme
                              Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                              In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                              Kommentar

                              Lädt...
                              X