Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bestimmte Textstelle editieren

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Bestimmte Textstelle editieren

    Hallo,

    dieses kleine scriptchen zeigt mir nun als Ausgabe eine bestimmte textstelle (aus einer externen php-Datei) mit Hilfe von Regex an.

    die verkürzte ausgabe ist in einer textbox zu sehen und man kann sie auch bearbeiten.

    wenn ich sie dort bearbeite, löscht es ersteinmal den kompletten inhalt und schreibt natürlich das rein, was ich in die box reingeschrieben hatte.

    ich möchte aber nicht, dass alles gelöscht wird, sondern nur ein bestimmter bereich verändert wird. dieser bestimmte bereich wird mir jedoch schon direkt in der textbox angezeigt.

    Hier ein besseres Beispiel was passiert:

    PHP-Code:

    Hans
    Peter

    /*%platzhalter%*/
    Klaut   // Von hier
    Anna   // Bis hier
    /*%platzhalter2%*/
    Hund
    Katze
    Maus 
    also, alles was zwischen /*%platzhalter%*/ und /*%platzhalter2%*/ steht wird via preg_replace rausgeschnitten und in eine textbox eingefügt um nur diesen bestimmten bereich anzuzeigen (wird ja auch gemacht).
    der rest bleibt unsichtbar

    wenn ich die datei nun über die textbox bearbeite, löscht es jedoch alles was in der externen PHP-datei geschrieben ist, und ersetzt es durch das was ich rein geschrieben hatte. z.b. "Haus"

    das ergebnis:

    PHP-Code:
    //Früher stand in der php datei das hier:

    Hans
    Peter

    /*%platzhalter%*/
    Klaut   // Von hier
    Anna   // Bis hier
    /*%platzhalter2%*/
    Hund
    Katze
    Maus

    //wenn ich in die textbox "haus" rein schreibe, löscht es das ganze und schreibt "haus "rein.

    //was ich eigentlich wollte:


    Hans
    Peter

    /*%platzhalter%*/
    Haus  //an diese stelle soll es hin
    /*%platzhalter2%*/
    Hund
    Katze
    Maus 
    Der code:

    PHP-Code:
    $datei "/http/htdocs/Webseite/php/menue.php";

    if (isset(
    $_POST['abspeichern'])) {
      if (
    is_writable($datei)) {

      if (!
    $handle fopen($datei"w+")) {

     echo 
    '<center>';
     print 
    "Fehler: Die Datei Namens <b> $datei </b> konnte nicht ge&ouml;ffnet werden!";
     echo 
    '</center>';

      exit;
      }

      if (!
    fwrite($handle$_POST['inhalt'])) {

     echo 
    '<center>';
     print 
    "Fehler: Schreiben in die Datei Namens <b> $datei </b> ist nicht m&ouml;glich!";
     echo 
    '</center>';


             exit;
          }
       echo 
    '<center>';
       print 
    "Die Datei <b> $datei </b> wurde Erfolgreich gespeichert!";
       echo 
    '</center>';

      
    fclose($handle);
      }

      else {

      echo 
    '<center>';
      print 
    "Die Datei <b> $datei </b> ist nicht schreibbar! ";
      echo 
    '</center>';

     }
    }
      else {
      
    $datei_content file_get_contents($datei);
      
    $text01 =preg_replace('/.*%001%(.*)%wer%.*/s''\1'$datei_content);
      
    $text02 =preg_replace('/.*%002%(.*)%rtz%.*/s''\1'$datei_content);

    }

    echo 
    '<center><form action="'.$_SERVER['SCRIPT_NAME'].'" method="POST"> <textarea name="inhalt" cols="15" rows="1">'.(substr($text01,8, -15)).'</textarea>
    <input type="submit" name="abspeichern" value="Speichern" /></center>'

    freue mich auf eure hilfe!!


  • #2
    ist die Sache des Browser, also bei mir kann man eine Textarea einfach bearbeiten so wie du es willst. Welchen Browser benutzt du?
    Fatal Error: Windows wird gestartet

    Wie administriert man ein Netzwerk: Beispiel

    Kommentar


    • #3
      Zitat von Unlikus Beitrag anzeigen
      ist die Sache des Browser, also bei mir kann man eine Textarea einfach bearbeiten so wie du es willst. Welchen Browser benutzt du?
      ich kann sie auch einfach bearbeiten

      jedoch: bei mir gibt es einen langen string. z.B.

      PHP-Code:
      Um es vorweg zu nehmendies ist eine wissenschaftliche Abhandlung der Universitätwie heisst sie noch mal...vor fünf Minuten wusste ich‘s noch...
      Sollten Sie beim Lesen dieses Beitrages Übelkeit oder Unwohlsein verspürendann gehen Sie bitte zu Ihrem Kühlschrank 
      Das wird via preg_replace verkürzt und nur ein bestimmter bereich angezeigt -> z.B.
      PHP-Code:
      Sollten Sie beim Lesen dieses Beitrages Übelkeit 
      wenn ich es nun bearbeite, wird ALLES komplett was in der PHP-Datei drinne steht, gelöscht und durch das ersetzt, was ich geschrieben hatte.

      dass möchte ich aber nicht, ich möchte ansprechen, dass eine bestimmte textstelle bearbeitet wird. diese bestimmte textstelle wird mir jedoch schon direkt angezeigt in der textarea, aber wenn ich diese bearbeite denkt das PHP er ist schon am anfang der Datei, obwohl in wirklichkeit noch text darüber steht.

      Kommentar


      • #4
        Guck dir mal den Parameter w+ bei fopen an was der macht

        Kommentar


        • #5
          Du musst bei deinem Regex den Suchmuster-Parameter so anpassen, dass die Werte vor und nach den Platzhaltern in ein Subpattern geschrieben werden. Danach musst du beim Replace-Parameter auch die Subpatterns ausgeben. Dann klappt es.
          .

          Kommentar


          • #6
            Zitat von Kiboman Beitrag anzeigen
            Guck dir mal den Parameter w+ bei fopen an was der macht
            Es liest und schreibt die Datei. der Dateizeiger befindet sich am Anfang.

            Alles in Ordnung (?) ich möchte ja die datei lesen und beschreiben können

            Kommentar


            • #7
              Zitat von kremser Beitrag anzeigen
              dass die Werte vor, zwischen und nach den Platzhaltern in ein Subpattern geschrieben werden.
              Danke für die Antwort!

              Genau das such ich ja, wie werden sie den beschrieben? werde im internet nicht fündig (zumindest von meinen suchanfragen her)

              schau mal:

              PHP-Code:
               $datei_content file_get_contents($datei);
                
              $text01 =preg_replace('/.*%001%(.*)%wer%.*/s''\1'$datei_content); 
              zwischen %001% und %wer% steht mein text drinne der nun in der variable $text01 steht. eigentlich müsste das php doch jetzt denken, in der externen php datei steht nur noch "Haus" drinne oder? immerhin habe ich doch auch gezeigt wo genau das besagte wort liegt. oh man... verwirrt mich alles sehr

              Kommentar


              • #8
                Wie soll das so auch funktionieren? Du gibst ein Teil einer Datei in einer Textarea aus und überschreibst dann mit dem bearbeitenten Inhalt der Textarea genau diese Datei.
                Du musst beim Speichern natürlich noch den Inhalt auslesen/hinzufügen den du nicht mit in der Textarea stehen hast.

                PHP-Code:
                if (isset($_POST['abspeichern'])) {
                   
                $datei_content file_get_contents($datei);
                   
                $text01 =preg_replace('/(.*%001%)(.*)(%wer%.*)/s''\1'$datei_content);
                   
                $new $text01[1].$_POST['inhalt'].$text01[3];
                   
                   
                file_put_contents($datei$new);

                Kommentar


                • #9
                  Zitat von 199708897 Beitrag anzeigen
                  Es liest und schreibt die Datei. der Dateizeiger befindet sich am Anfang.

                  Alles in Ordnung (?) ich möchte ja die datei lesen und beschreiben können
                  w+
                  Zum Schreiben und Lesen geöffnet; platziere Dateizeiger auf Dateianfang und kürze die Datei auf eine Länge von 0. Existiert die Datei nicht, versuche, diese zu erzeugen.
                  Ist es gewollt das die Datei geleert wird?

                  Kommentar


                  • #10
                    Zitat von Kiboman Beitrag anzeigen
                    w+

                    Ist es gewollt das die Datei geleert wird?
                    nein ist nicht gewollt

                    PHP-Code:
                    • a Öffnet die angegebene Datei nur zum Schreiben und positioniert den Dateizeiger auf das Ende der DateiSollte die angegebene Datei nicht existierenso wird versucht sie anzulegen.

                    • a+ - Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf das Ende der DateiSollte die angegebene Datei nicht existierenso wird versucht sie anzulegen.

                    • r Öffnet die angegebene Datei zum Lesen und positioniert den Dateizeiger auf den Anfang der Datei.

                    • r+ - Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf den Anfang der Datei.

                    • w Öffnet die angegebene Datei zum Schreiben und positioniert den Dateizeiger auf den Anfang der Datei. Die Länge der Datei wird auf 0 Byte gesetztSollte die angegebene Datei nicht existierenso wird versucht sie anzulegen.

                    • w+ - Öffnet die angegebene Datei zum Lesen und Schreiben und positioniert den Dateizeiger auf den Anfang der DateiSollte die angegebene Datei nicht existierenso wird versucht sie anzulegen
                    r+ war es dennoch schreibt es mir den text auf den anfang der datei :/

                    Kommentar


                    • #11
                      Zitat von erc Beitrag anzeigen
                      Wie soll das so auch funktionieren? Du gibst ein Teil einer Datei in einer Textarea aus und überschreibst dann mit dem bearbeitenten Inhalt der Textarea genau diese Datei.
                      Du musst beim Speichern natürlich noch den Inhalt auslesen/hinzufügen den du nicht mit in der Textarea stehen hast.

                      PHP-Code:
                      if (isset($_POST['abspeichern'])) {
                         
                      $datei_content file_get_contents($datei);
                         
                      $text01 =preg_replace('/(.*%001%)(.*)(%wer%.*)/s''\1'$datei_content);
                         
                      $new $text01[1].$_POST['inhalt'].$text01[3];
                         
                         
                      file_put_contents($datei$new);


                      der code funktioniert in meinem fall zwar nicht, aber ich hab wenigstens verstanden was jetzt zu tun ist

                      danke!!

                      Kommentar

                      Lädt...
                      X