Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] str_replace und trim()

Einklappen

Neue Werbung 2019

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

  • [Erledigt] str_replace und trim()

    Hallo.

    Kann mir BITTE auch jemand helfen!!!Komme nicht weiter....
    Mein Problem ist, dass ich ein Affenformular nach Vorgaben schreiben muss(wg. Studium) und str_replace und trim() einfügen muss.
    Das Skript funktioniert(wenn man das so nennen kann), aber es vertauscht die Eingabe-Werte und schreibt auch immer noch Zeilenumbrüche in die Eintraege.txt.

    Also hier mal der Code:
    PHP-Code:
    <?php
    $beitraege 
    = array();
    beitrag_schreiben();
    beitraege_einlesen();


    function 
    beitraege_anhaengen($beitraege)
    {
    print 
    "beitraege_anhaengen";
    {
    $datei=fopen("beitraege.txt","a");
    $text_ohne_nl str_replace("\n","",$_REQUEST['text']);
      if (!
    $dh)
        {
          print 
    "Kann Datei nicht erstellen!";
        }
     if (!empty(
    $_REQUEST['text']))
    {
    fputs ($dh,$_REQUEST['text']);
    }
    else
    {
    fputs($dh,"ohne Text");
    }
    }
    }


    function 
    beitrag_schreiben($datei "beitraege.txt")
    {
    print 
    "beitrag_schreiben";
    {    
     
    $dh fopen($datei"a");
        if (!
    $dh)
        {
          print 
    "Kann Datei nicht erstellen!\n";
        }
     if (!empty(
    $_REQUEST['Betreff']))
    {
    fputs ($dh,$_REQUEST['Betreff']."\n");
    }
    else
    {
    fputs($dh,"kein Betreff\n");
    }
    {
    if (!empty(
    $_REQUEST['text']))
    {
    fputs ($dh,$_REQUEST['text']."\n");
    }
    else
    {
    fputs($dh,"kein Text\n");
    }   
       if (!empty(
    $_REQUEST['autor']))
          {
            
    fputs ($dh$_REQUEST['autor']."\n");
          }
          else
          {
            
    fputs ($dh"unbekannt\n");
          }
          
    fclose ($dh);
        }
      }
    }


          

    function 
    beitraege_einlesen($datei "beitraege.txt")
    {

      global 
    $beitraege;
      
    $dh fopen($datei"r");
      if(!
    $dh)
    {
        print 
    "Kann Datei \"$datei\" nicht &ouml;ffnen!\n";
      }
      else
      {
        for (
    $i 0; !feof($dh);$i++)
        {
          
    $zeile fgets($dh);
          if (
    $zeile != "")      
    {
            
    $beitraege[$i]['Betreff'] = $zeile;
            
    $beitraege[$i]['text'] = fgets($dh);
            
    $beitraege[$i]['autor'] = $zeile
          }
        }
        
    fclose($dh);
      }
    }
    function 
    beitrag_ausgeben($beitrag)

    {


        print 
    "Betreff: ".$beitrag['Betreff']."\n";
        print 
    "<br>";    
        
        print 
    "Eintrag: ".$beitrag['text']."\n";
        print 
    "<br>";
        print 
    "Autor: ".$beitrag['autor']."\n";
    }


    function 
    formular_ausgeben()
    {
    ?>
          <form method="POST" action="<?php print $_SERVER['PHP_SELF'?>">
            <b><p><strong>Betreff</strong>: </b><input type="text" name="Betreff">
            </p>
            <b>Text: </b><textarea name="text" cols="50" rows="10"><?php echo $_POST['text'];?></textarea>
            <br />
            <b>Autor: </b><input type="text" name="autor">
            <br /> 
           <input type="submit" value="absenden">
          </form>


  • #2
    Hallo!

    Code:
    $text_ohne_nl = str_replace("\n","",$_REQUEST['text']);
    Verwende hierfür ebenfalls trim()
    Code:
    $text_ohne_nl = trim($_REQUEST['text']);
    trim() entfernet standardmäßig auch \n\r -> Zeilenumbrüche.
    Möchtest du z.b. aber den Tabulator zulassen, kannst du die zu entfernenden Zeichen über den 2. Parameter definieren:
    PHP: trim - Manual


    Dein 2. Problem verstehe ich nicht ganz. Wo wird etwas "vertauscht"?!

    Kommentar


    • #3
      In der Funktion beitraege_anhaengen stimmt schon mal etwas nicht.

      Die Variable heißt $datei und du versuchst etwas in $dh zu schreiben =/ =/
      "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

      Kommentar


      • #4
        PHP-Code:
        $text_ohne_nl str_replace("\n","",$_REQUEST['text']); 
        und
        PHP-Code:
        $text_ohne_nl trim($_REQUEST['text']); 
        bewirken aber nicht das Gleiche. trim() entfernt nur Whitespace am Anfang und am Ende, str_replace() entfernt hier alle LF-Sequenzen, ob das gewollt ist, weiß ich nicht. Wenn doch, dann könnte ich mir vorstellen, dass dein Problem die unter Windows berüchtigten CRLF oder die noch schlimmeren CR-Sequenzen unter Mac sind, die hier natürlich nicht (oder im Windows-Beispiel nur halb) berücksichtigt werden. Um die zu entfernen bietet sich preg_replace() aber besser an als str_replace():
        PHP-Code:
        $text_ohne_nl preg_replace('/(?:\r\n?|\n)/''',$_REQUEST['text']); 
        Was du mit „vertauschen“ meinst, verstehe ich auch nicht und es wird sich hier wohl sicherlich kaum jemand deinen gesamten Code durchlesen. Bitte werde etwas spezifischer.
        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

        Kommentar


        • #5
          Zitat von Manko10 Beitrag anzeigen
          PHP-Code:
          $text_ohne_nl str_replace("\n","",$_REQUEST['text']); 
          und
          PHP-Code:
          $text_ohne_nl trim($_REQUEST['text']); 
          bewirken aber nicht das Gleiche. trim() entfernt nur Whitespace am Anfang und am Ende, str_replace() entfernt hier alle LF-Sequenzen, ob das gewollt ist, weiß ich nicht.
          Ich habe es so verstanden, dass es um abschließende Zeilenumbrüche geht.
          Aber wahrscheinlich hast du recht - sollen wohl im gesamten String entfernt werden -> zeilenweise einlesen?!

          Wenn (wg. Studiumsvorgabe) str_replace genutzt werden MUSS wäre auch
          PHP-Code:
          $text_ohne_nl =str_replace(array("\r","\n"),"",$_REQUEST['text']); 
          eine Alternative.
          Vielleicht gibts extra Punkte für die Plattformunabhängigkeit

          Kommentar


          • #6
            vielen dank schon mal an alle für die hilfe!!!
            das 2. problem ist, dass ich in der funktion beitrag schreiben jeweils in betreff,text und autor unterteile, wenn ich es aber teste steht der text für betreff z.b in text oder text in betreff...oder im Feld autor steht dann "kein betreff".
            also denke ich entweder stimmt was mit dieser funktion nicht oder in der funktion beitraege auslesen...(deshalb hab ich mal alles gepostet..)
            ich hoffe sehr das jemand eine Idee hat, ich komme namlich mit meinen (wenigen) Kenntnissen nicht drauf.

            Kommentar


            • #7
              Wenn schon mit str_replace(), dann wenigstens so:
              PHP-Code:
              $text_ohne_nl str_replace(array("\r","\n"), ''$_REQUEST['text']); 
              Sonst sind die Extra-Punkte für Plattformunabhängigkeit gleich wieder weg wegen fehlender Eleganz.

              Beitrag editiert:
              […] @we123 ich denke, da wird dir hier niemand helfen, ehe du nicht wenigstens deinen Quellcode vernünftig eingerückt hast.
              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

              Kommentar


              • #8
                Also so ganz verstanden hab ich dein Problem noch immer nicht, bzw. fehlt mir auch die Zeit deinen Quelltext genau zu entschlüsseln, aber es könnte gut sein, dass der Fehler nur durch die unnötig eingefügten Leerzeilen verursacht wird. So erhälst du z.B beim zeilenweisen Einlesen einen Leerstring für Betreff weil dieser ja eigentlich in der nächsten Zeile steht - du erwartest dort aber bereits den Text usw.

                Kommentar


                • #9
                  hier nochmal der Code, wenigstens etwas besser eingerückt)

                  PHP-Code:
                  <?php
                  $beitraege 
                  = array();
                  beitrag_schreiben();
                  beitraege_einlesen();


                  function 
                  beitraege_anhaengen($beitraege)
                  {
                     
                  $datei=fopen("beitraege.txt","a");
                     
                  $text_ohne_nl str_replace("\n","",$_REQUEST['text']);
                  {
                         if (!
                  $datei)
                        {
                              print 
                  "Kann Datei nicht erstellen!";
                        }
                        if (!empty(
                  $_REQUEST['text']))
                        {
                             
                  fputs ($datei,$_REQUEST['text']);
                        }
                        else
                        {
                             
                  fputs ($datei,"ohne Text");
                        }
                     }
                  }


                  function 
                  beitrag_schreiben($datei "beitraege.txt")
                  {    
                     
                  $dh fopen($datei"a");
                         if (!
                  $dh)
                         {
                              print 
                  "Kann Datei nicht erstellen!\n";
                         }
                         if (!empty(
                  $_REQUEST['Betreff']))
                         {
                              
                  fputs ($dh,$_REQUEST['Betreff']."\n");
                         }
                         else
                         {
                              
                  fputs($dh,"kein Betreff\n");
                         }
                         {
                               if (!empty(
                  $_REQUEST['text']))
                              {
                                     
                  fputs ($dh,$_REQUEST['text']."\n");
                              }
                              else
                              {
                                     
                  fputs($dh,"kein Text\n");
                              }   
                                           if (!empty(
                  $_REQUEST['autor']))
                                           {
                                                   
                  fputs ($dh$_REQUEST['autor']."\n");
                                           }
                                           else
                                           {
                                                   
                  fputs ($dh"unbekannt\n");
                                           }
                                                   
                  fclose ($dh);
                                           }
                           }
                  }


                        

                  function 
                  beitraege_einlesen($datei "beitraege.txt")
                  {
                     global 
                  $beitraege;
                     
                  $dh fopen($datei"r");
                           
                       if(!
                  $dh)
                       {
                           print 
                  "Kann Datei \"$datei\" nicht &ouml;ffnen!\n";
                       }
                       else
                       { 
                           for (
                  $i 0; !feof($dh);$i++)
                       {
                           
                  $zeile fgets($dh);

                                   if (
                  $zeile != "")     
                                   {
                                          
                  $beitraege[$i]['Betreff'] = $zeile;
                                          
                  $beitraege[$i]['text'] = fgets($dh);
                                          
                  $beitraege[$i]['autor'] = $zeile
                                   }
                            }
                       
                  fclose($dh);
                    }
                  }

                  function 
                  beitrag_ausgeben($beitrag)
                  {
                        print 
                  "Betreff: ".$beitrag['Betreff']."\n";
                        print 
                  "<br>";    
                        print 
                  "Eintrag: ".$beitrag['text']."\n";
                        print 
                  "<br>";
                        print 
                  "Autor: ".$beitrag['autor']."\n";
                  }


                  function 
                  formular_ausgeben()
                  {
                  ?>
                          <form method="POST" action="<?php print $_SERVER['PHP_SELF'?>">
                          <b><p><strong>Betreff</strong>: </b><input type="text" name="Betreff">
                          </p>
                          <b>Text: </b><textarea name="text" cols="50" rows="10">
                          <?php echo $_POST['text'];?></textarea>
                          <br />
                          <b>Autor: </b><input type="text" name="autor">
                          <br /> 
                          <input type="submit" value="absenden">
                          </form>
                  <?php
                  }
                  ?>

                  Kommentar


                  • #10
                    Du hast in der Funktion ein geschweiftes Klammernpaar zu viel, das ziemlich überflüssig ist. Auch die Einrückungen der if/else-Blöcke verstehe ich nicht. Warum istif (!empty($_REQUEST['text'])) eingerückt, wenn es auf gleicher Ebene wie if (!empty($_REQUEST['Betreff'])), warum ist if (!empty($_REQUEST['autor'])) noch weiter eingerückt? Das ergibt keinen Sinn.

                    Dein eigentliches Problem verstehe ich aber immer noch nicht. Scheint eher ein Problem mit deinem HTML-Formular zu sein.
                    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                    Kommentar


                    • #11
                      @aeris--stimmt, das könnte sein, ich denke, das liegt dann wohl an:

                      PHP-Code:
                      if ($zeile != "")      
                      {
                              
                      $beitraege[$i]['Betreff'] = $zeile;
                              
                      $beitraege[$i]['text'] = fgets($dh);
                              
                      $beitraege[$i]['autor'] = $zeile
                            } 
                      oder?

                      Kommentar


                      • #12
                        Schau dir doch bitte vorher einmal an, ob überhaupt die Textdatei richtig geschrieben wird.
                        Im Übrigen kannst du die Datei auch ganz einfach mit file() in ein Array einlesen.
                        Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                        Kommentar


                        • #13
                          also textdatei wird richtig geschrieben.
                          mit file() anstelle von fgets einlesen oder wie?

                          Kommentar


                          • #14
                            PHP-Code:
                            function beitraege_anhaengen($beitraege)
                            {
                               
                            $datei=fopen("beitraege.txt","a");
                               
                            $text_ohne_nl str_replace("\n","",$_REQUEST['text']);
                            {
                                   if (!
                            $datei)
                                  {
                                        print 
                            "Kann Datei nicht erstellen!";
                                  }
                                  if (!empty(
                            $_REQUEST['text']))
                                  {
                                       
                            fputs ($datei,$_REQUEST['text']);
                                  }
                                  else
                                  {
                                       
                            fputs ($datei,"ohne Text");
                                  }
                               }

                            Wozu dient der Übergabewert $betraege? Soweit ich sehe verwendest du ihn nicht...
                            Außerdem ersetze hier bitte
                            Code:
                            $text_ohne_nl = str_replace("\n","",$_REQUEST['text']);
                            durch
                            Code:
                            $text_ohne_nl = str_replace(array("\n", "\r"),'',$_REQUEST['text']);
                            um die Zeilenumbrüche richtig zu entfernen und schreibe diese Variable dann auch wirklich in die Daten, NICHT $_REQUEST['text']!

                            Wozu verwendest du diese Funktion genau?
                            Und wozu die nächste? Beide schreiben, sofern du den default-Wert nicht überschreibst, in die gleiche Datei - einmal mehr, einmal weniger Informationen:

                            PHP-Code:
                            function beitrag_schreiben($datei "beitraege.txt")
                            {    
                               
                            $dh fopen($datei"a");
                                   if (!
                            $dh)
                                   {
                                        print 
                            "Kann Datei nicht erstellen!\n";
                                   }
                                   if (!empty(
                            $_REQUEST['Betreff']))
                                   {
                                        
                            fputs ($dh,$_REQUEST['Betreff']."\n");
                                   }
                                   else
                                   {
                                        
                            fputs($dh,"kein Betreff\n");
                                   }
                                   {
                                         if (!empty(
                            $_REQUEST['text']))
                                        {
                                               
                            fputs ($dh,$_REQUEST['text']."\n");
                                        }
                                        else
                                        {
                                               
                            fputs($dh,"kein Text\n");
                                        }   
                                                     if (!empty(
                            $_REQUEST['autor']))
                                                     {
                                                             
                            fputs ($dh$_REQUEST['autor']."\n");
                                                     }
                                                     else
                                                     {
                                                             
                            fputs ($dh"unbekannt\n");
                                                     }
                                                             
                            fclose ($dh);
                                                     }
                                     }

                            du schreibst hier jeweils 3 Zeilen pro Eintrag in die Datei, d.h. auch beim Auslesen besteht ein Eintrag für dich aus 3 Zeilen, nicht aus einer!

                            PHP-Code:
                            function beitraege_einlesen($datei "beitraege.txt")
                            {
                               global 
                            $beitraege;
                               
                            $dh fopen($datei"r");
                                     
                                 if(!
                            $dh)
                                 {
                                     print 
                            "Kann Datei \"$datei\" nicht &ouml;ffnen!\n";
                                 }
                                 else
                                 { 
                                     for (
                            $i 0; !feof($dh);$i++)
                                 {
                                     
                            $zeile fgets($dh);

                                             if (
                            $zeile != "")     
                                             {
                                                    
                            $beitraege[$i]['Betreff'] = $zeile;
                                                    
                            $beitraege[$i]['text'] = fgets($dh);
                                                    
                            $beitraege[$i]['autor'] = $zeile
                                             }
                                      }
                                 
                            fclose($dh);
                              }

                            In Betreff und Autor schreibst du hier jeweils das Gleiche rein.
                            Was genau Text auslesen/bewirken soll ist mir nicht ganz klar...


                            Sollte ich dein Vorhaben richtig verstanden haben, müsste dir mit diesem Ansatz geholfen sein:

                            Code:
                            $count = 0;
                            $hlp = 0;
                            
                            $index = array('Betreff', 'text', 'autor');
                            for ($i = 0; !feof($dh);$i++)
                            {
                                 $zeile = fgets($dh);
                            
                                 $beitraege[$count][ $index[$hlp] ] = $zeile;
                            
                                 $hlp++;
                                 
                                if($hlp == 3 )
                               {
                                    $hlp = 0;
                                   $count++;
                               } 
                            }

                            Kommentar


                            • #15
                              Auch wenn du mal einzelne Felder freilässt?
                              Und ja, mit file() einlesen und deinen Code mal etwas weiter links halten, sprich: keine unnötigen Verschachtelungen.
                              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                              Kommentar

                              Lädt...
                              X