CSS-Datei online bearbeiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • CSS-Datei online bearbeiten

    Hi Leute,

    ich will für ein Projekt die CSS-Datei online bearbeiten können. Der Code, den ich habe, löscht mir aber die Datei nach dem bearbeiten. ich komm im Moment da irgendwie nicht mehr weiter.

    edit.php

    Quellcode

    1. <?php
    2. /*
    3. Darauf achten, dass die Datei Schreibrechte besitzt.
    4. */
    5. $datei = './default.css';
    6. /*
    7. Neuer Inhalt speichern
    8. */
    9. if (isset($_POST['speichern'])) {
    10. $fp = fopen($datei, 'w');
    11. /*
    12. Doppelte Zeilenumbrüche entfernen
    13. */
    14. $css_neu = str_replace("\n", "", $_POST['css_neu']); // -> Evtl. Obacht: Win/Lin/... \n \r\n ...
    15. $css_neu = stripslashes($css_neu); // Anpassen
    16. #$css_neu = strip_tags($css_neu); // Anpassen
    17. fputs($fp, $css_neu, strlen($css_neu));
    18. fclose($fp);
    19. }
    20. /*
    21. Datei in Array einlesen
    22. */
    23. $css = file($datei);
    24. /*
    25. FORMULAR
    26. */
    27. echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
    28. echo '<textarea name="textarea" style="width:98%; font-family : Verdana, Arial; color : #000000; font-size:11px;" rows="20" wrap="physical" name="css_neu">';
    29. echo implode('',$css);
    30. echo '</textarea>';
    31. echo '<br>';
    32. echo '<input type="submit" name="speichern" value="Datei jetzt speichern"> <input type="reset" name="reset" value="Änderungen verwerfen">';
    33. echo '</form>';
    34. ?>
    Alles anzeigen


    Woran könnte das liegen?
  • Yepp, das war der Fehler :wacko: Jetzt muss ich nur noch eine Funktion einbauen, um ein Verzeichnis auszulesen und eine zu bearbeitende Datei an das Script zu übergeben. Allerdings muss ich da erst noch suchen, wie ich das am besten mache. Für Tipps bin ich immer offen :)

    Ich habe also im Verzeichnis "css" 2 Dateien, eine "default.css" und eine "default1.css". Praktisch wäre es demnach, sie mittels eines Drop-Down-Menüs oder eines weiteren Textareas in das Haupt-Textarea zu übergeben zum weiteren bearbeiten ?(

    Salve tron
  • Ja danke für den Tipp. Bin noch etwas Beginner. Der Code oben hat mir nen Fehler produziert.

    Ich hab das jetzt so gemacht, aber da macht er mir mehrere Selectboxen nebeneinander her ?(

    Quellcode

    1. <?php
    2. $folder = opendir( "./css/" );
    3. while ( ( $entry = readdir( $folder ) ) !== FALSE )
    4. {
    5. if ( $entry != "." && $entry != ".." )
    6. {
    7. if (substr($entry,-4,4)=='.css')
    8. {
    9. $filename = basename( $entry, '.css' );
    10. echo '<select>';
    11. echo '<option>'.$filename .'</option>';
    12. echo '</select>';
    13. }
    14. }
    15. }
    16. ?>
    Alles anzeigen


    Wie bekomme ich nun die Einträge in eine einzige Selectbox?

    tron
  • Hi mad,

    danke für den Tipp :thumbup:

    Wieder was dazugelernt :)

    Hier jetzt der Code, der funktioniert. Vielleicht braucht ja jemand mal sowas als Codeschnipsel.

    Quellcode

    1. <?php
    2. $folder = opendir( "./css/" );
    3. echo '<select>';
    4. while ( ( $entry = readdir( $folder ) ) !== FALSE )
    5. {
    6. if ( $entry != "." && $entry != ".." )
    7. {
    8. if (substr($entry,-4,4)=='.css')
    9. {
    10. $filename = basename( $entry, '.css' );
    11. echo '<option>'.$filename .'.css</option>';
    12. }
    13. }
    14. }
    15. echo '</select>';
    16. ?>
    Alles anzeigen


    So und jetzt kann ich mich daran machen, die Einträge aus der Selectbox per Formular in das Textarea-Feld zu übergeben um dieses dann online bearbeiten zu können. Ich komme meinem Ziel Schritt für Schritt näher.

    tron
  • Hm, also irgendwas wird da noch nicht richtig übergeben:

    Quellcode

    1. <?php
    2. echo '<form action="" method="POST">';
    3. // Zuerst den Ordner auswählen
    4. $folder = opendir( "./css/" );
    5. // Dann das ganze in eine Select-Box packen
    6. echo 'Template auswählen:&nbsp;<select name="style">';
    7. while ( ( $entry = readdir( $folder ) ) !== FALSE )
    8. {
    9. if ( $entry != "." && $entry != ".." )
    10. {
    11. // Und hier nur Dateien mit einer bestimmten Endung auswählen
    12. if (substr($entry,-4,4)=='.css')
    13. {
    14. $filename = basename( $entry, '.css' );
    15. echo '<option>'.$filename.'.css</option>';
    16. }
    17. }
    18. }
    19. echo '</select>';
    20. echo '<input type="submit" name="style" value="Bearbeiten"></input>';
    21. echo '</form>';
    22. $inhalt = $_POST["style"];
    23. $edit = $inhalt;
    24. ...
    25. // Der Rest vom Script mit dem Textarea
    26. ?>
    Alles anzeigen


    Hat jemand ne Ahnung, warum er mir die Daten nicht in das Textarea lädt???

    tron
  • Ich bin ja jetzt nicht gerade so gut wie die meisten andren hier, aber ich nehme an, du willst die Daten aus deinem Formular an eine weitere Datei schicken, die diese dann verarbeitet, also in deinem Fall den Inhalt der selektierten CSS-Datei zum bearbeiten anzeigt, oder?

    In dem Fall würd ich diese bei action="" eintragen

    also zB
    <form action="?show=csseditor&mode=edit" method="POST">

    Wenn s die gleiche Datei is, dann nimm am besten $_SERVER['PHP_SELF']

    Korrigiert mich bitte, wenn ich was Falsches schreib!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von venum-lk ()

  • Naja, wenn nichts eingetragen ist, wird es an die gleiche Datei gesendet.
    Zeig uns doch mal den Rest vom Code, weil so sehen wir nicht, was du da falsch machst. Also bitte den kompletten Code posten.
    Sicherlich liegt es daran, dass du den Inhalt nicht wirklich übergibst.

    btw.: was soll das hier:

    Quellcode

    1. $inhalt = $_POST["style"];
    2. $edit = $inhalt;

    das kannst du doch gleich so machen:

    Quellcode

    1. $edit = $_POST["style"];

    oder soll edit ne kopie von inhalt sein?
  • Hi mad,

    ok, hier ist der ganze Code:

    Quellcode

    1. <?php
    2. echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">';
    3. $folder = opendir( "./css/" );
    4. echo 'Template auswählen:&nbsp;<select name="style" id="template">';
    5. while ( ( $entry = readdir( $folder ) ) !== FALSE )
    6. {
    7. if ( $entry != "." && $entry != ".." )
    8. {
    9. if (substr($entry,-4,4)=='.css')
    10. {
    11. $filename = basename( $entry, '.css' );
    12. echo '<option value="template">'.$filename.'.css</option>';
    13. }
    14. }
    15. }
    16. echo '</select>';
    17. echo '<input type="submit" name="submit" value="Auswählen"></input>';
    18. echo '</form>';
    19. $datei = $_POST["style"];
    20. if (isset($_POST['speichern'])) {
    21. $fp = fopen($datei, 'w');
    22. $css_neu = str_replace("\n", "", $_POST['css_neu']); // -> Evtl. Obacht: Win/Lin/... \n \r\n ...
    23. $css_neu = stripslashes($css_neu); // Anpassen
    24. #$css_neu = strip_tags($css_neu); // Anpassen
    25. fputs($fp, $css_neu, strlen($css_neu));
    26. fclose($fp);
    27. }
    28. $css = file($datei);
    29. echo '<form action="'.$_SERVER['PHP_SELF'].'" method="post">';
    30. echo '<textarea style="width:98%; font-family : Verdana, Arial; color : #000000; font-size:11px;" rows="20" wrap="physical" name="css_neu">';
    31. echo implode('',$css);
    32. echo '</textarea>';
    33. echo '<br>';
    34. echo '<input type="submit" name="speichern" value="Datei jetzt speichern"> <input type="reset" name="reset" value="Änderungen verwerfen">';
    35. echo '</form>';
    36. ?>
    Alles anzeigen


    Ich komme da irgendwie nicht wirklich weiter.

    tron
  • Hmm, an sich ist da nicht wirklich ein Fehler zu sehen. Zumindest kein methodischer. Einzig und allein kann ich mir vorstellen, dass es an implode() liegt.
    Hast du dir mal ausgeben lassen, was da drin ist? mit prinr_r z.B. ?

    Weiterhin kannst du mal den geparsten Code, also den, den du im Browser anschauen kannst, posten? manchmal (meist) findet man dort auch Hinweise...

    cya
  • Hi mad,

    ich habe den implode-befehl mal rausgenommen und nur:
    echo $css;
    gemacht. Es kommt die folgende Fehlermeldung:

    Warning: file(template) [function.file]: failed to open stream: No such file or directory in C:\apache\xampp\htdocs\a\editieren.php on line 29

    Und Line 29 ist:

    $css = file($datei);

    Anscheinend kann er die css-Datei doch nicht richtig übergeben?

    Hier ist der geparste code:

    Quellcode

    1. <form action="/a/editieren.php" method="POST">
    2. Template auswählen:&nbsp;<select name="style" id="style">
    3. <option value="template">black</option>
    4. <option value="template">default</option>
    5. <option value="template">mfh12</option>
    6. <option value="template">news</option>
    7. </select>
    8. <input type="submit" name="submit" value="Auswählen"></input>
    9. </form>
    10. <br />
    11. <b>Warning</b>: file(template) [<a href='function.file'>function.file</a>]:
    12. failed to open stream: No such file or directory in <b>C:\apache\xampp\htdocs\a\editieren.php</b> on line <b>29</b>
    13. <br />
    14. <form action="/a/xfh13/editieren.php" method="post">
    15. <textarea style="width:98%; font-family : Verdana, Arial; color : #000000; font-size:11px;" rows="20" wrap="physical" name="css_neu">
    16. </textarea>
    17. <br />
    18. <input type="submit" name="speichern" value="Datei jetzt speichern"> <input type="reset" name="reset" value="Änderungen verwerfen">
    19. </form>
    Alles anzeigen


    tron
  • OK, der Fehler ist folgender:
    Du versuchst mit file() eine Datei einzulesen. Jede deiner Select-Optionen hat aber den Wert "Template", der auch übergeben wird. Nun versucht file() also "Template" einzulesen. Da es diese Datei aber nicht gibt, kann er sie nicht einlesen. Daher diese Fehlermeldung.

    Du musst also deine Select-Optionen überarbeiten. Das heißt du musst da die richtigen Werte eintragen. Oder werden die auch generiert?

    cya
  • Ganz meine Meinung @ mad

    Die Fehlermeldung besagt ja, dass in Zeile 29 der Fehler auftaucht.. Da lässt er sich ja mit "$css = file($datei);" die Variable aus den POST-Daten des Selectfeldes generieren.
    Da aber wie schon gesagt, immer als Value "template" dort steht, findet er keine Datei, die so heißt.
    Ich würde auch das Selectfeld nochmal durchgehen und in Zeile 12 das

    Quellcode

    1. echo <'option value="template">'.$filename.'.css</option>';


    mit diesem hier ersetzen

    Quellcode

    1. echo '<option value="'.$filename.'.css">'.$filename.'.css</option>';



    Beatz & Greetz