Text

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

  • Text

    Hallo zusammen,

    ich habe ein Problem und zwar bastel ich gerade zu Übungszwecken ein bisschen mit einer Datenbank und einer Ausgabe in einem PHP - Dokument.

    Jetzt bin ich eben auf folgendes Problem gestoßen. Ich habe einen längeren Text, den ich aber nach eine bestimmten Anzahl von Zeichen automatisch kürzen möchte. Funktioniert mit folgender Abfrage eigentlich wunderbar:

    PHP-Code:
    if(strlen($text['text_main'])>2500)
    {
     
    $text['text_main']=substr($text['text_main'],0,1800) . " ... 
    <a href=text1.php?text_id=" 
    $text['text_id'] . ">weiter</a>";

    Nur leider zählt er mir die Zeilenumbrüche innerhalb des Textes nicht mit, d.h. wenn ich ein Gedicht habe, komme ich nie auf 2500 Zeichen und er kürz es nicht, weil er (scheinbar) immer wieder von vorn anfängt zu zählen.

    Könnt Ihr mir helfen? Hab schon im Net recherchiert, habe leider nichts entsprechendes gefunden.

    Vielen Dank,
    Lexis.
    Zuletzt geändert von Lexis; 24.08.2006, 17:27.

  • #2
    Eigentlich sollte es funktionieren, wenn dein gesamtes Gedicht wirklich
    in dem String $text['text_main'] steht. Kann es vielleicht sein, dass du
    as Gedicht zeilenweise einließt ?

    Ließt du den Text aus der DB ein (mit der du experimentierst) oder aus
    einer Datei (und willst ihn dann in die DB schreiben)?

    MFG
    BLG
    Zuletzt geändert von BLG; 24.08.2006, 15:35.

    Kommentar


    • #3
      brich doch bitte deinen code um.

      Kommentar


      • #4
        @Tobias ... entschuldige, schon geändert!

        @BLG... also ich kopiere den Text aus einem Word - Doc in eine Datenbank und lese es aus der DB aus. Es kann gut sein, dass ich es zeilenweise auslese... woran merke ich das? Bzw. wie kann ich es ändern?

        Sorry, wenn ich mich zu blöd anstelle...

        Kommentar


        • #5
          nee, ist sicher nicht zeilenweise.

          mach doch mal testausgaben.

          was steht in $text['text_main'] drin und was gibt das entsprechende strlen() zurück?

          Kommentar


          • #6
            Also, ich habe es jetzt so gemacht... dass es wie folgt funktioniert:

            PHP-Code:
            if(strlen($text['text_main'])>2500)
            {
             
            $text['text_main']=substr($text['text_main'],0,1800) . " ... 
            <a href=text1.php?text_id=" 
            $text['text_id'] . ">weiter</a>";

            Die Ausgabe im Dokument sieht dann wie folgt aus:

            PHP-Code:

            echo nl2br($text['text_main']) 
            So lässt es sich dann auch durch die einzelnen Seiten blättern, denn ich habe nun einige Seiten erstellt, bei denen ich die Parameter für die Startposition und die Länge entsprechend verändert habe.

            Nur leider erkennt er das Ende nicht, da die $text['text_main'])immer über 2500 Zeichen ist?! Und wenn dann der Resttext auf Seite 20 z.b. nicht über 2500 Zeichen ist, würde er ja dann den Gesamttext ausgeben?!

            Ich hab keine Ahnung.

            Kommentar


            • #7
              probier es mal aus.

              außerdem steht in $text['text_main'] doch bei jedem seitenaufruf zunächst der komplette text drin. folglich sind auch auf seite 20 mehr als 2500 Zeichen vorhanden.
              Zuletzt geändert von TobiaZ; 29.08.2006, 11:40.

              Kommentar


              • #8
                Ja, das mach ich ja... schon seit Tagen brüte ich darüber.

                Es gibt bei ihm kein Ende, auch wenn der Text zu Ende ist, erzeugt er den Link auf die nächste Seite, auf der dann nix steht.

                Deswegen, dachte ich vielleicht, dass ich bei jeder einzelnen Seite die bereits ausgegebenen Zeichen von der Variable abziehe, doch dann komm ich irgendwann nicht mehr über 2500 und er gibt mir den ganzen Text komplett aus ... auf Seite 20 beispielsweise.

                Kommentar


                • #9
                  auch wenn der Text zu Ende ist, erzeugt er den Link auf die nächste Seite, auf der dann nix steht.
                  das war aber nicht das,was du beschrieben hast.

                  du hast erstmal ein generelles problem. ich dachte eigentlich ich hätte was von start und endposition gelesen. die hast du aber nicht. zumindest nicht im aktuellen code.

                  hast jetzt mehrere möglichkeiten:
                  1) du nimmst den restlichen code ab der neuen startpostition und prüfst, wie lang der ist. (länger als X zeichen -> "weiter"-Link)
                  2) wie bei unseren diversen blättern funktionen. (gesamtlänge / zeichen pro seite = seiten anzahl.

                  doch dann komm ich irgendwann nicht mehr über 2500 und er gibt mir den ganzen Text komplett aus ... auf Seite 20 beispielsweise.
                  Selbst wenn dem so wäre, was ich gerade nicht nachvollziehen kann, warum prüfst du dann nicht? (wenn startposition > 0 substring von startposition bis 1800 Zeichen weiter)

                  Kommentar


                  • #10
                    Ich hatte die Parameter "Start" und "Länge" wie folgt festgelegt:

                    So sieht Seite 1 aus:

                    PHP-Code:
                    if(strlen($text['text_main'])>2500)
                    {
                     
                    $text['text_main']=substr($text['text_main'],0,1800) . " ... 
                    <a href=text1.php?text_id=" 
                    $text['text_id'] . ">weiter</a>";

                    demzufolge Seite 2:

                    PHP-Code:
                    if(strlen($text['text_main'])>2500)
                    {
                     
                    $text['text_main']=substr($text['text_main'],1800,1800) . " ... 
                    <a href=text2.php?text_id=" 
                    $text['text_id'] . ">weiter</a>";

                    Das heißt im Dokument "Seite2" sollte ich dann den Restlänge ermitteln. Aber wie mach ich das? Ich hab es ja schon mit dem Subtrahieren versucht, aber das funktioniert nicht ganz, dadurch dass er den Wert versucht zu subtrahieren.

                    Kommentar


                    • #11
                      lol, nicht dein ernst, du willst also 20 oder mehr PHP-Seiten anlegen???

                      Kommentar


                      • #12
                        Ja, leider... ich habs zumindest versucht.

                        Bin ehrlich gesagt, nicht weit gekommen... ich hab zwar viel im Net recherchiert, doch im weiß nicht wie ich eine einfach Blätterfunktion auf die Ausgabe schreibe.

                        Alles was ich bisher übers Blättern gefunden habe, waren Sachen die bei Suchergebnissen funktionien.... habs versucht zu ändern, doch irgendwie stell ich mich zu blöd an.

                        Kommentar


                        • #13
                          Nein, das kannst du 1:1 übertragen.

                          bei den Suchergebnissen hast du der anzahl Einträge pro seite.
                          Hier hast du die Anzahl zeichen pro seite.

                          bei den Suchergebnissen beschränkst du das ganze mit LIMIT.
                          Hier beschränkst du mit substr().

                          Das wars schon.

                          Kommentar


                          • #14
                            PHP-Code:
                            <?php
                            $text 
                            'Ein sehr langer Text ...';
                            $seite = isset($_GET['seite']) ? $_GET['seite'] : 0;
                            $zeichen_pro_seite 4;

                            echo 
                            substr($text$seite $zeichen_pro_seite$zeichen_pro_seite);
                            echo 
                            '<a href="?seite='.($seite+1).'">weiter</a>';
                            ?>

                            Kommentar


                            • #15
                              Danke onemorenerd + TobiaZ,

                              ich habe jetzt meinen Code so weit angepasst:

                              PHP-Code:
                                  <?
                                      $text_id = (int)$_GET['text_id'];
                                      $text_SQL="SELECT * FROM text WHERE text_id=" . $text_id;
                                      $text_result=mysql_query($text_SQL);
                                      echo mysql_error();
                                      $text=mysql_fetch_array($text_result);
                                      $seite = isset($_GET['seite']) ? $_GET['seite'] : 0;
                                      $zeichen_pro_seite = 1800;
                                      $text = substr($text['text_main'], $seite * $zeichen_pro_seite, $zeichen_pro_seite);
                                      ?>


                              Die Ausgabe:

                              PHP-Code:
                               <p><? echo nl2br($text);
                                      echo '<a href="?seite='.($seite+1).'">...weiter</a>'; ?></p>
                              Die erste Seite funktioniert ohne Problem. Auch erscheint der Link "weiter"

                              Doch wenn ich auf weiter klicke, kommt auf der nächsten Seite kein Text. Wie kann ich da die nächsten 1800 Zeichen anzeigen?

                              Kommentar

                              Lädt...
                              X