Ankündigung

Einklappen
Keine Ankündigung bisher.

Textlängenbegrenzung funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Textlängenbegrenzung funktioniert nicht

    Hallo Leutchen,
    ich bin noch ein blutiger PHP-Anfänger und brauche mal etwas Hilfe.
    Bei meinem (selbstzusammenkopierten) Gästebuch funzt die Textlängen-begrenzung für den textarea-Bereich nicht.
    Die Anzeige und Begrenzung mit javascript geht, aber wenn man das deaktiviert, kann man die ganze Bibel reinschreiben.

    guckst du hier

    ich versuche das mit folgendem code zu begrenzen:
    Code:
    $grenzwert = 20;
    
    if (strlen($text) > $grenzwert) $text = 
     substr($text,0,$grenzwert);
    der müsste nach meinem schlauen Buch auch richtig sein.
    es geht aber nicht.

    möchte mir jemand helfen?
    dann poste ich das ganze script....

    die suchfunktion im forum hat mich noch nicht weitergebracht. oder ich bin zu doof
    google brachte mir auch nix, ausser das es der richtige ansatz ist.

    gruss moto

  • #2
    wo definierst du was in $text ist?

    Kommentar


    • #3
      moment bitte...

      Kommentar


      • #4
        PHP-Code:
        <?php
        require("gbook/config.php");
        require(
        "gbook/functions.php");
         
        $mainurl checkmainurl($starturl);
        if (isset(
        $_GET['action']) && $_GET['action'] == "submit") {
          echo 
        templateschreiben("gbook/htmlayout/formular.tpl", array("URL" => $mainurl));
        }

        else {
          if(isset(
        $_POST["eintrag"])) {
            if (!(
        $name=$_POST["name"])) $name="";
            if (!(
        $text=$_POST["text"])) $text="";
            if (!(
        $email=$_POST["email"])) $email="";
            if (!(
        $wohnort=$_POST["wohnort"])) $wohnort="";
            if (!(
        $homepage=$_POST["homepage"])) $homepage="";
            
        $ausgabe "";
            if(
        $name_pflicht && empty($name)) $ausgabe .= "<li>"._name."</li>";
            if(
        $text_pflicht && empty($text)) $ausgabe .= "<li>"._inhalt."</li>";
            if(
        $email_pflicht && empty($email)) {
              
        $ausgabe .= "<li>"._email."</li>";
            }
            else {
              
        $email strip_tags(trim($email));
              if(!
        pruefe_mail($email) && !empty($email)) $ausgabe .= "<li>"._falschemail."</li>";
            }
            if(
        $homepage_pflicht && empty($homepage)) {
              
        $ausgabe .= "<li>"._homepage."</li>";
            }
            else {
              
        $homepage strip_tags(trim($homepage));
              if (
        substr($homepage,0,3) == "www"$homepage "http://"$homepage;
              if(!
        pruefe_hp($homepage) && !empty($homepage)) $ausgabe .= "<li>"._falschehp."</li>";
            }

            if(
        $captcha && !($controller->isValid(htmlentities($_POST['number'])))) $ausgabe .= "<li>"._fehlercaptcha."</li>";
            
        $name strip_tags($name);
            
        $name trim($name);
            if(!
        pruefe_forbiddenwords($text$forbiddenwords)) $ausgabe .= "<li>"._unerlaubtezeichen."</li>";
            if(!
        $html$text strip_tags($text);
            
        $text trim($text);

            
        $spamfunctionwert=pruefe_antispam($antispamtime$antispamtime2);
            if(
        $spamfunctionwert == 1$ausgabe "<li>"._spam."</li>";
            if(
        $spamfunctionwert == 2$ausgabe "<li>"._spam2."</li>";
            if(
        pruefe_antispamliste(getenv("REMOTE_ADDR"), $spamliste)) $ausgabe "<li>"._spamliste."</li>";
            
        $text stripslashes(nl2br($text));
            
        $text str_replace("<br />""<br> "$text);
            
        $commentleer "";
            if (
        $freischaltung$frei="1";
            if(empty(
        $ausgabe)) {
              if(
        $enmail) @mail($mail,"Neuer Gästebucheintrag",
              
        "<html><body>Du hast einen neuen Gästebucheintrag:<br><br>
              <b>Datum: </b>"
        .date("d.m.Y"time())."<br>
              <b>Uhrzeit: </b>"
        .date("H.i"time())."<br>
              <b>Name: </b>"
        .$name."<br>
              <b>Email: </b>"
        .$email."<br>
              <b>Homepage: </b>"
        .$homepage."<br>
              <b>Wohnort: </b>"
        .$wohnort."<br>
              <b>Text: </b>"
        .$text."</body></html>",
              
        "From: \"Gästebuch\" <$mail>\nX-Mailer: PHP/" phpversion()."\nMime-Version: 1.0\nContent-Type: text/html; charset=\"ISO-8859-1\"");
              if(
        $endankemail && !empty($email)) @mail($email,"Vielen Dank für Deinen Gästebucheintrag",
              
        "<html><body>Hallo ".$name."<br><br>
              Vielen Dank für Deinen Eintrag in mein Gästebuch!<br>
              <br><br>
              Dein Eintrag:<br><br>"
        .$text."</body></html>",
              
        "From: \"Gästebuch\" <$mail>\nX-Mailer: PHP/" phpversion()."\nMime-Version: 1.0\nContent-Type: text/html; charset=\"ISO-8859-1\"");
              if(
        $bbcode$text bbcode($text);
              if(
        $enbadword$text pruefe_badwords($text$badwords);
              
        datenschreiben(array(time(), getenv("REMOTE_ADDR"), stripslashes($name), $email$wohnort$homepage$text$commentleer$frei));
              if(
        $thanks) {
                 
        $ausgabe .= "<center>"._danke."</center><br>";
                 
        $ausgabe .= "<br><center><a href=\"".$starturl."\">"._zurueck."</a></center>";
                 echo 
        templateschreiben("gbook/htmlayout/danke.tpl", array("MESSAGE" => $ausgabe));
              }

              else {
                 echo 
        "<meta http-equiv=\"refresh\" content=\"0; URL=".$starturl."\">";
                 exit;
              }
           }
           else {
              
        $ausgabe2 "<b>"._fehler."</b><br>\n<ul>";
              
        $ausgabe2 .= $ausgabe;
              
        $ausgabe2 .= "</ul>";
              
        $ausgabe2 .= "<br><center><a href=\"javascript:history.back(1)\">"._zurueck."</a></center>";
              echo 
        templateschreiben("gbook/htmlayout/danke.tpl", array("MESSAGE" => $ausgabe2));
            }
          }
          else {
            
        $data array_reverse(datenlesen());
            
        $table "";
            
        $i=0;
            
        $eintr_anzahl count($data);
            if (isset(
        $_GET['start'])) {
              
        $start $_GET['start'];
            }
            else {
               
        $start 0;
            }

            foreach(
        $data as $wert) {
               if(
        $i >= $start) {
                 
        $wert explode("::"$wert);
                 
        $c2 0;
                 foreach(
        $wert as $zwwert1) {
                   
        $zwwert2[$c2] = base64_decode($zwwert1);
                   
        $c2++;
                 }
                 
        $wert $zwwert2;
                 unset(
        $zwwert1);
                 unset(
        $zwwert2);
                 
        $wert[3] = trim($wert[3]);
                 if(!empty(
        $wert[3])) $wert[3] = "<a href=\"mailto:".$wert[3]."\"><img src=\"gbook/pix/mail.gif\" title=\"e-mail\" alt=\"Email\" border=\"0\" hspace=\"2\"></a>";

                 
        $wert[5] = trim($wert[5]);
                 if(!empty(
        $wert[5])) $wert[5] = "<a href=\"".$wert[5]."\" target=\"_blank\"><img src=\"gbook/pix/hp.gif\" title=\"homepage\" alt=\"Homepage\" border=\"0\" hspace=\"2\"></a>";
                 if(empty(
        $wert[3]) && empty($wert[4]) && empty($wert[5])) $wert[4] = _nodata;
                 if(!empty(
        $wert[7])) $wert[7] = _kommentar.$wert[7];
                 if(empty(
        $wert[7])) $wert[7] = "";

                 if(
        $enumbruch$wert[6] = umbrucheinfuegen($wert[6], $umbruch);

                 if(
        $ensmilies$wert[6] = smilies($wert[6], $smilies);

                 if(empty(
        $wert[8])) $wert[8] = "";

                   if (
        $wert[8] <> "1"){
                   
        $table .= templateschreiben("gbook/htmlayout/tabelle.tpl", array(
                   
        "NAME" =>  $wert[2],
                   
        "EMAIL" => $wert[3],
                   
        "WOHNORT" => $wert[4],
                   
        "HP" => $wert[5],
                   
        "CONTENT" => $wert[6],
                   
        "COMMENT" => $wert[7],
                   
        "DATE" => date("d.m.Y"$wert[0]),
                   
        "TIME" => date("H:i"$wert[0]),
                   
        "NUMBER" => ($eintr_anzahl-$i)));
                  }

                  if(
        $i == $eintr_proseite+$start-1) break;
                }
                
        $i++;
             }

             
        $mnum $eintr_anzahl;
             
        $sites "";
             
        $i=-$eintr_proseite;
             
        $seitenzahl 1;
             while(
        $mnum>0) {
               
        $mnum $mnum $eintr_proseite;
               
        $i $i $eintr_proseite;
               
        $sites .= "<a href=\"".$mainurl."start=$i\">$seitenzahl</a> ";
               
        $seitenzahl++;
             }

             if (
        $startform == TRUE){
               
        $oben templateschreiben("gbook/htmlayout/formular.tpl", array("URL" => $mainurl));
            }

             else{
               
        $oben "<a href=\"".$mainurl."action=submit\"><b>".$linktext."</b></a>";
             }
             
        $menu templateschreiben("gbook/htmlayout/menu.tpl", array("ANZAHL" => $eintr_anzahl"SEITENLINKS" => $sites));
             echo 
        templateschreiben("gbook/htmlayout/index.tpl", array("EINTRAEGE" => $table"MENU" => $menu"LINKODERFORM" => $oben));
          }
             echo 
        "<center></center>";
        }
        echo 
        templateschreiben("gbook/htmlayout/footer.tpl", array());
        ?>

        Kommentar


        • #5
          Ich hoffe du erwartest nicht das ich mich da durch kämpfe.

          Mach einfach mal nach deinem "$grenzwert = 20;" ein

          PHP-Code:
          print $text
          und poste das ergebnis.

          Kommentar


          • #6
            wo soll dann ein ergebnis zu sehen sein?
            ich denke ich hab was grundlegendes falsch gemacht.

            Kommentar


            • #7
              @xx
              na und, spams kann man rausschmeißen.
              ich werds dann halt noch optimieren.

              Kommentar


              • #8
                Der Text aus der Textarea wird dir als ein string übergeben.
                Ohne deinen quellcode angesehen zu haben:

                Wahrscheinlich willst du die Zeichenlänge von einzelnen Wörtern begrenzen.
                PHP-Code:
                $lengthstrlen($_POST['text']); 
                liefert dir damit aber die Länge des kompletten Textarea- Bereiches.
                Um einzelne Wörter abzuprüfen, kannst du z.b. mit explode arbeiten.

                Etwa so:

                PHP-Code:
                $justoneword explode(" ",$_POST['text']);
                foreach(
                $justoneword as $value) {
                    if(
                strlen($value)>20 {
                         
                //....
                    
                }

                Sofern das dein Problem betrifft, bin mir jetzt wirklich nicht sicher, was du machen möchtest.

                Gruß

                Kommentar


                • #9
                  Vielen Dank für die Hilfe,
                  was ich genau machen möchte ist die Gesamt-Zeichenanzahl der textarea begrenzen.

                  Ich möchte verhindern, dass jemand 1 Million Zeichen als Eintrag sendet.
                  Die einzelnen Wörter sind relativ egal. Die 20 hab ich nur zum testen genommen.
                  Ich würde dann auf 500 Zeichen begrenzen, oder so...

                  ich versuchs nochmal, und melde mich dann.

                  Da ich mir das Gästebuch zusammenkopiert habe ist mir wohl noch nicht alles
                  so ganz verständlich. Ich bin ja schon froh, dass es soweit funktioniert und ich einiges anpassen und ändern konnte.
                  Ausser meine Navigation hab ich vorher noch nicht viel mit PHP hinbekommen.

                  Aber durch deinen Tipp habe ich schonmal den richtigen Ansatz. hoffe ich

                  Vielen Dank nochmal!!!

                  Kommentar


                  • #10
                    Dein Ansatz ist dann schon vollkommen richtig, will mich da jetzt allerdings nicht durchwühlen.
                    Aber zum Ausprobieren:

                    PHP-Code:
                    <html>
                    <head>
                    </head>
                    <body>
                    <form action="#" method="post">
                      <textarea name="text"></textarea>
                      <input type="submit" name="submit" value="abschicken">
                    </form>
                    <?php
                    if($_POST['submit']) {
                        
                    $limit 3;
                        (
                    strlen($_POST['text']) <= $limit) ? $text=$_POST['text'] : $text=substr($_POST['text'],0,$limit);
                         echo 
                    $text;
                    }
                    ?>
                    </body>
                    </html>
                    Und, ganz wichtig:
                    Textlänge erst einmal client seitig begrenzen, wer dann keine Javascript anhat, dem mußt du eben eine Lösung aufzwängen.
                    Wirklich kürzen würde ich aber nur in der Darstellung. Man kann überlange Texte ja deswegen dennoch erstmal speichern, sofern das die DB- Einstellungen zulassen.
                    Einfach Abschneiden ist nicht so der "Hit".

                    Gruß

                    Kommentar


                    • #11
                      ja danke, ich verstehe, erstmal habe ich ein javascript um das zu begrenzen und auch um dem Besucher das anzuzeigen.

                      die Gästebucheinträge werden ja in einer Textdatei gespeichert, komplett ohne Datenbank. Hat denn ein Server grundsätzlich einen Schutz gegen sowas?
                      Also, gegen 1 Million Zeichen als eine Nachricht? Würde das überhaupt den Server lahmlegen? Also muss ich mir überhaupt darum Gedanken machen?

                      Sorry, aber ich dazu noch keine Antwort ergoogeln können und hab auch (noch) keine Ahnung davon.

                      gruss MOTO

                      Kommentar


                      • #12
                        Einfach Abschneiden ist nicht so der "Hit".
                        Naja, das sehe ich je nach Kontext anders. Ein Kommentar ist ein Kommentar, da muss man nicht Romane zulassen.
                        Also, gegen 1 Million Zeichen als eine Nachricht? Also muss ich mir überhaupt darum Gedanken machen?
                        Eine Möglichkeit wäre schon mal ein TEXT/BLOB-Typ zu benutzen (65.535 Bytes = Zeichen).

                        Ich würde trotzdem zusätzlich serverseitig begrenzen, weil
                        1. Das MByte ja nicht sinnlos an die DB übergeben werden muss (kostet ja auch Zeit und Performance)
                        2. Du auch auf überlange Werte reagieren kannst (z.B. Rückmeldung im Form - steckt ja nicht immer Absicht dahinter)
                        3. Du natürlich eine genauere Längenangabe definieren kannst

                        Es gibt auch noch die Serverdirektive post_max_size, die Du Dir ansehen kannst. Ist aber wohl nur für grössere Daten und gut geplante Formulare sinnvoll.

                        Kommentar


                        • #13
                          Einfach Abschneiden ist nicht so der "Hit".
                          Naja, das sehe ich je nach Kontext anders. Ein Kommentar ist ein Kommentar, da muss man nicht Romane zulassen.
                          Selbstverständlich hast du Recht. Wollte da auch gezielt darauf hinweisen, das
                          I: unbedingt auch clientseitig geprüft werden muß
                          II: handelt es sich um ein Gästebuch, da werden i.A. keine 100 Seiten verfaßt, daher die plakative Formulierung

                          Zudem könnte man sich bei so etwas ja auch von vornherein behelfen, indem man mithilfe von CSS die Visibility des div layers erst mit aktiviertem JS von hidden zu visible umstellt.
                          Damit wird dann auch schon während der Eingabe geprüft und ermöglicht meiner Meinung nach eher eine sinnvolle Gästebuch- Darstellung.


                          Gruß

                          edit:

                          Dabei aber nicht auf die clientseitige Prüfung verlassen. Wenn du nach meinem Vorschlag das GB erstellst, unbedingt trotzdem die Länge des Textes abprüfen.

                          Kommentar


                          • #14
                            Worauf ich hinaus will - ich habe bei Dir rausgelesen:
                            -Speichere in der DB alles,
                            -zeige nur nen Teil an.

                            Wenn Teil 3 fehlt…
                            -biete eine Möglichkeit, alles anzuzeigen

                            …kommt es zu einem blöden Effekt - User trägt Roman ein, sieht, der wurde abgeschnitten, trägt den Rest als zweiten Beitrag nach. In der DB hast Du den kompletten 2. Teil dann als redundate Daten.

                            Kommentar


                            • #15
                              Hatte ich so ähnlich gemeint.
                              Allerdings ein wenig anders: Nämlich das in der Darstellung jedes Eintrags z.B. nur 4 Zeilen erscheinen.
                              Dann aber auch ein deutliches mehr lesen oder weiter lesen erscheint.

                              So das es zu dem hier:
                              …kommt es zu einem blöden Effekt - User trägt Roman ein, sieht, der wurde abgeschnitten, trägt den Rest als zweiten Beitrag nach. In der DB hast Du den kompletten 2. Teil dann als redundate Daten.
                              gar nicht erst kommen kann, da jeder merkt, das der Artikel in der Darstellung zunächst begrenzt wird.

                              Eigentlich wollte ich mir diese Ausführlichkeit ersparen
                              Und jetzt das 3fache geschrieben... ^^

                              Hoffe, es ist jetzt klar, wie ich das meinte.
                              Muß jetzt arbeiten, einen schönen Tag, die Herren.


                              Gruß

                              Kommentar

                              Lädt...
                              X