1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Wir danken allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben.

php-Problem mit Schleifen

Dieses Thema im Forum "Software" wurde erstellt von schnabbel, 15. Juli 2002.

  1. schnabbel

    schnabbel New Member

    Kann mir jemand sagen wo sich im folgendem Script ein Fehler eingeschlichen hat? Eigentlich sollte es externe Textfiles ($i) auflisten. Beginnend mit der höchsten Zahl ($counterstand). Mit der kleinsten Zahl beginnend funzt alles wunderbar aber das Script ist für ein Gästebuch und da sollte schon der letzte Eintrag oben stehen.
    Danke schonmal!
    schnabbel

    <?php
    $filecount = "comments/zahl.txt";
    list($counterstand) = file($filecount);

    if($zahl == ""){

    $zahl = "11";
    $i=$counterstand;
    }

    for($i=$i; $i < $zahl; $i--)
    {

    if(file_exists("comments/$i.txt")){
    include("comments/$i.txt");

    echo "<center>
    <table border="0" cellpadding="1" cellspacing="0" bgcolor="white"width=" 99%">
    <tr>
    <td>

    <table valign="bottom" top="2" cellpadding="2" cellspacing="0" width="100%" >
    <tr>
    <td bgcolor="#000033" cellspacing="0" valign="bottom">
    <tt>Eintrag Nr.: </tt><tt>$i :: $uhr ::</tt></td></tr>
    <tr>
    <td bgcolor="#003366" cellspacing="0" valign="bottom">
    <tt>Name:</tt><b>$name</b><tt>e-Mail:</tt><a href= mailto:$email>$email</a></td>
    </tr>
    <tr>
    <td valign="top" bgcolor="#006699">
    <font face="arial" size="">
    <b>Nachricht:</b><br>$text<br><br>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table><br>
    </center>";

    }
    }

    echo "<br>";
    $i3=$i-1;
    if($i > "$i3") {

    if($i>20){
    $i3=$i-10;
    $i4=$i-20;
    echo "<center><a href="$PHP_SELF?zahl=$i3&i=$i4"><< zurück</a> ||</center>";
    }
    if($counterstand>$i){
    $i2=$i+20;
    $i=$i+10;
    echo " <center><a href="$PHP_SELF?zahl=$i2&i=$i">weiter >></a></center>";
    }
    exit;
    }

    ?>
     
  2. createch2

    createch2 New Member

    Ich habs nur mal kurz überflogen:

    Kann es sein das die for-Schleife vor deinen i$-Zählern aufhört und du $i weiterbenutzt? Und warum kommentierst du die Gänsefüsschen aus? lass die doch gleich weg...
    Und woher bekommt dein $counterstand einen wert?
     
  3. schnabbel

    schnabbel New Member

    Das mit den Gänsefüsschen ist mir klar. War unnötig.
    Der Wert für $counterstand steht in der Datei "zahl.txt". Diese wiederum wird von einem anderen Script gesteuert.
    Und das mit der Schleife ist so:
    Beginne ich mit $i=1 und sage in der letzten Anweisung der Schleife $i++ funktioniert alles wunderbar. Alle Einträge werden aufgelistet (1.txt,2.txt,3.txt usw). Ich hätte es halt gerne rückwärts (...3.txt,2.txt,1.txt). Eben beginnend mit der höchsten Zahl.
     
  4. createch2

    createch2 New Member

    for($i=$i; $i < $zahl; $i--)

    liegts an dem "minusminus" ? hast du das mal einzeln ausprobiert? glaub das geht so nur beim erhöhen (++). Wenn nicht, gib dein "--" vorher in eine Variable.

    for($i=0; $i < $zahl; $i++)
    $xyz=$counterstand-$i;
    echo "$xyz.txt";

    sinngemäß zumindest.
     
  5. schnabbel

    schnabbel New Member

    Das "minusminus" war's wohl:
    for($i=$i; $i < $zahl; $i=$i-1)...

    Danke für Deine Hilfe!
    Gruß Schnabbel
     
  6. createch2

    createch2 New Member

    na fein, freut mich. vielleicht brauche ich ja auch mal hilfe. immerhin ist dieses forum hier eines der besten was ich kenne. zwar nicht in php-sachen, aber von der hilfbereitschaft und dem niveau.

    wenn ich auf php4-forum.de schaue, traut man sich kaum was zu posten, weil jede 2.antwort "Bist du zu doof, benutz die suchfunktion" ist.
     
  7. schnabbel

    schnabbel New Member

    Genau aus diesem Grund habe ich hier gefragt. Die anderen Foren sind mir
    1. zu unübersichtlich
    2. zu unpersönlich und
    3. sind mir die Antworten meißtens zu hoch :)

    Eine Alternative ist noch Google und die Suche in Groups. Da gibts fast immer Antworten man muss nur lange genug suchen.

    Schnabbel
     
  8. schnabbel

    schnabbel New Member

    comments/';

    $handle=opendir($dir);
    while ($file = readdir($handle)) {
    $filetime = filemtime("$dir".$file);
    $files["$file"] = "$filetime";

    }

    arsort($files);

    for (reset($files); $k = key($files); next($files))

    {



    echo"<center>
    <table border="0" cellpadding="1" cellspacing="0" bgcolor="white"width=" 99%">
    <tr>
    <td>

    <table valign="bottom" top="2" cellpadding="2" cellspacing="0" width="100%" >
    <tr>
    <td bgcolor="#000033" cellspacing="0" valign="bottom">
    <tt>Eintrag Nr.: </tt><tt> $number :: $uhr ::</tt></td></tr>
    <tr>
    <td bgcolor="#003366" cellspacing="0" valign="bottom">
    <tt>Name:</tt><b>$name</b><tt>e-Mail:</tt><a href= mailto:$email>$email</a></td>
    </tr>
    <tr>
    <td valign="top" bgcolor="#006699">
    <font face="arial" size="">
    <b>Nachricht:</b><br>$text<br><br>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table><br>
    </center>";

    }

    Hoffe mir kann jemand helfen

    Schnabbel
     
  9. schnabbel

    schnabbel New Member

    Kann mir jemand sagen wo sich im folgendem Script ein Fehler eingeschlichen hat? Eigentlich sollte es externe Textfiles ($i) auflisten. Beginnend mit der höchsten Zahl ($counterstand). Mit der kleinsten Zahl beginnend funzt alles wunderbar aber das Script ist für ein Gästebuch und da sollte schon der letzte Eintrag oben stehen.
    Danke schonmal!
    schnabbel

    <?php
    $filecount = "comments/zahl.txt";
    list($counterstand) = file($filecount);

    if($zahl == ""){

    $zahl = "11";
    $i=$counterstand;
    }

    for($i=$i; $i < $zahl; $i--)
    {

    if(file_exists("comments/$i.txt")){
    include("comments/$i.txt");

    echo "<center>
    <table border="0" cellpadding="1" cellspacing="0" bgcolor="white"width=" 99%">
    <tr>
    <td>

    <table valign="bottom" top="2" cellpadding="2" cellspacing="0" width="100%" >
    <tr>
    <td bgcolor="#000033" cellspacing="0" valign="bottom">
    <tt>Eintrag Nr.: </tt><tt>$i :: $uhr ::</tt></td></tr>
    <tr>
    <td bgcolor="#003366" cellspacing="0" valign="bottom">
    <tt>Name:</tt><b>$name</b><tt>e-Mail:</tt><a href= mailto:$email>$email</a></td>
    </tr>
    <tr>
    <td valign="top" bgcolor="#006699">
    <font face="arial" size="">
    <b>Nachricht:</b><br>$text<br><br>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table><br>
    </center>";

    }
    }

    echo "<br>";
    $i3=$i-1;
    if($i > "$i3") {

    if($i>20){
    $i3=$i-10;
    $i4=$i-20;
    echo "<center><a href="$PHP_SELF?zahl=$i3&i=$i4"><< zurück</a> ||</center>";
    }
    if($counterstand>$i){
    $i2=$i+20;
    $i=$i+10;
    echo " <center><a href="$PHP_SELF?zahl=$i2&i=$i">weiter >></a></center>";
    }
    exit;
    }

    ?>
     
  10. createch2

    createch2 New Member

    Ich habs nur mal kurz überflogen:

    Kann es sein das die for-Schleife vor deinen i$-Zählern aufhört und du $i weiterbenutzt? Und warum kommentierst du die Gänsefüsschen aus? lass die doch gleich weg...
    Und woher bekommt dein $counterstand einen wert?
     
  11. schnabbel

    schnabbel New Member

    Das mit den Gänsefüsschen ist mir klar. War unnötig.
    Der Wert für $counterstand steht in der Datei "zahl.txt". Diese wiederum wird von einem anderen Script gesteuert.
    Und das mit der Schleife ist so:
    Beginne ich mit $i=1 und sage in der letzten Anweisung der Schleife $i++ funktioniert alles wunderbar. Alle Einträge werden aufgelistet (1.txt,2.txt,3.txt usw). Ich hätte es halt gerne rückwärts (...3.txt,2.txt,1.txt). Eben beginnend mit der höchsten Zahl.
     
  12. createch2

    createch2 New Member

    for($i=$i; $i < $zahl; $i--)

    liegts an dem "minusminus" ? hast du das mal einzeln ausprobiert? glaub das geht so nur beim erhöhen (++). Wenn nicht, gib dein "--" vorher in eine Variable.

    for($i=0; $i < $zahl; $i++)
    $xyz=$counterstand-$i;
    echo "$xyz.txt";

    sinngemäß zumindest.
     
  13. schnabbel

    schnabbel New Member

    Das "minusminus" war's wohl:
    for($i=$i; $i < $zahl; $i=$i-1)...

    Danke für Deine Hilfe!
    Gruß Schnabbel
     
  14. createch2

    createch2 New Member

    na fein, freut mich. vielleicht brauche ich ja auch mal hilfe. immerhin ist dieses forum hier eines der besten was ich kenne. zwar nicht in php-sachen, aber von der hilfbereitschaft und dem niveau.

    wenn ich auf php4-forum.de schaue, traut man sich kaum was zu posten, weil jede 2.antwort "Bist du zu doof, benutz die suchfunktion" ist.
     
  15. schnabbel

    schnabbel New Member

    Genau aus diesem Grund habe ich hier gefragt. Die anderen Foren sind mir
    1. zu unübersichtlich
    2. zu unpersönlich und
    3. sind mir die Antworten meißtens zu hoch :)

    Eine Alternative ist noch Google und die Suche in Groups. Da gibts fast immer Antworten man muss nur lange genug suchen.

    Schnabbel
     
  16. schnabbel

    schnabbel New Member

    comments/';

    $handle=opendir($dir);
    while ($file = readdir($handle)) {
    $filetime = filemtime("$dir".$file);
    $files["$file"] = "$filetime";

    }

    arsort($files);

    for (reset($files); $k = key($files); next($files))

    {



    echo"<center>
    <table border="0" cellpadding="1" cellspacing="0" bgcolor="white"width=" 99%">
    <tr>
    <td>

    <table valign="bottom" top="2" cellpadding="2" cellspacing="0" width="100%" >
    <tr>
    <td bgcolor="#000033" cellspacing="0" valign="bottom">
    <tt>Eintrag Nr.: </tt><tt> $number :: $uhr ::</tt></td></tr>
    <tr>
    <td bgcolor="#003366" cellspacing="0" valign="bottom">
    <tt>Name:</tt><b>$name</b><tt>e-Mail:</tt><a href= mailto:$email>$email</a></td>
    </tr>
    <tr>
    <td valign="top" bgcolor="#006699">
    <font face="arial" size="">
    <b>Nachricht:</b><br>$text<br><br>
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table><br>
    </center>";

    }

    Hoffe mir kann jemand helfen

    Schnabbel
     
  17. createch2

    createch2 New Member

    hast du mal ein beispiel von so nem textfile, vielleicht nur ein ausschnitt mit der variablen? Ich glaub nicht dass die Variablen als solche erkannt werden. Solls ein Gästebuch werden? Vielleicht kommst du mit ner reinen Datenbanklösung besser hin, als alles in textfiles abzulegen...
     
  18. schnabbel

    schnabbel New Member

    In den Textfiles stehen einfach nur die einzelnen Variablen:
    <?php
    $counterstand="";
    $uhr="16. July, 2002 10:50";
    $text="blablabla";
    $email="blablabla";
    $name="blablabla";
    ?>
    Eben diese Variablen die später dann in den Tabellen stehen sollen. Irgendwie muß das doch gehen. Als die Files noch 1 2 3.txt hießen und mit der for-Schleife aufgerufen wurden gings doch auch.
     
  19. createch2

    createch2 New Member

    Versuch mal mit Zeichenkettenfunktionen zu arbeiten:

    textfile in eine variable einlesen, und erstmal ausgeben. wenn du dann feststellst, dass die dollarzeichen als text ausgegeben werden, musst du auf die variable eine zeichenkettenfunk anwenden.

    php4-forum.de --> Befehle --> zeichenketten

    ich hab nur im moment keine zeit, was rauszusuchen...

    oder du lässt das textfile in ein array fliessen, das semikolon als trennstelle und führst es dann den einzelnen variablen zu.

    Aber wenn ich das hier so sehe würde ich 100pro auf eine Datenbank setzen und nicht auf textfiles. Weil du wirst dich bei jedem auslesen der daten tierisch krumm machen...
     

Diese Seite empfehlen