umwandlung beim schreiben in datenbank

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

  • umwandlung beim schreiben in datenbank

    Hallo, seit langem mal wieder on Board.

    Möchte jetzt seit längerem mal wieder was basteln und stehe mal wieder vor der Frage, worauf ich achten muß wenn ich, vom User eingegebene Texte, in die Datenbank schreibe. Es soll sicher sein (HTML, JS etc. rausziehen), Umlaute und Sonderzeichen ersetzt werden ... und wie ist das mit den Slashes? Wenn magic_quotes_gpc = On braucht man sich da ja um nichts kümmern, oder?
    Welche Funktionen am besten beim Speichern und welche beim Auslesen? So dass man den Text möglicherweise in einem HTML-Textfeld auch nochmal korrigieren kann ...

    Danke für eure Antworten.
    Pooky

  • #2
    Re: umwandlung beim schreiben in datenbank

    benutze mal die forensuche - gerade zu dem lästigen "magic_quotes schützt meine datenbank- weil genau dafür is' das da"-newbee-aberglauben haben wir uns schon des öfteren in epischer breite ausgelassen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ok, nach umfangreicher Suche habe ich versucht es so zu machen, wie von Abraxas irgendwo beschrieben. Dabei ist das rausgekommen:

      Mit dieser Funktion werden die Strings formatiert, die wieder in die Edit-Felder geschrieben werden (als value) wenn es Fehler bei der Eingabe gab, so dass man dann korrigieren kann:
      PHP-Code:
      function edit_format($text) {
       if (
      get_magic_quotes_gpc()) $text stripslashes($text);
       return 
      htmlentities(trim($text));

      Diese Funktion wird auf die Variablen angewandt, wenn es keine Fehler gab und die Daten in der Datenbank gespeichert werden:
      PHP-Code:
      function save_format($text) {
       
      $text mysql_escape_string(trim($text));
       return 
      $text;

      Diese Funktion wird auf die Strings aus der Datenbank angewendet, bevor sie auf einer HTML-Seite ausgegeben werden:
      PHP-Code:
      function ausgabe_format($text) {
       if (
      get_magic_quotes_runtime()) $text stripslashes($text);
       
      $text nl2br(htmlentities($text));
       return 
      $text;

      Das ganze soll unabhängig von allem magic_quotes-Gedöns laufen ... klappt aber irgendwie nicht, da der ausgegebene Text dann doch noch Slashes vor den Quotes hat ... guckt euch das bitte einmal an und helft mir auf die Sprünge, ich steh grad vor ner Mauer

      Noch eine andere Sache: Kann mir jemand verraten, warum folgendes nicht funktioniert (BBCode):
      PHP-Code:
      $sarr "/\{b}(.*)\{\/b}/siU";
      $rarr "<b>\\1</b>";
      $sarr "/\{i}(.*)\{\/i}/siU";
      $rarr "<i>\\1</i>";
      $sarr "/\{u}(.*)\{\/u}/siU";
      $rarr "<u>\\1</u>";
      $text preg_replace($sarr$rarr$text); 
      ... steht hinterher als Text da ... (man beachte: { = [ im Code)

      Vielen Dank,
      Pooky
      Zuletzt geändert von pooky; 09.03.2004, 17:11.

      Kommentar


      • #4
        Original geschrieben von pooky
        Diese Funktion wird auf die Variablen angewandt, wenn es keine Fehler gab und die Daten in der Datenbank gespeichert werden:
        PHP-Code:
        function save_format($text) {
         
        $text mysql_escape_string(trim($text));
         return 
        $text;

        in diese funktion gehört die überprüfung
        if (get_magic_quotes_runtime()) $text = stripslashes($text);
        rein - damit die überflüssigen slashes erst gar nicht in der Db landen.
        Diese Funktion wird auf die Strings aus der Datenbank angewendet, bevor sie auf einer HTML-Seite ausgegeben werden: [...]
        hier ist diese überprüfung jetzt aber überflüssig, da die daten, die von der DB kommen, ja gar keine überflüssigen slashes mehr beinhalten sollten.
        (falls wider erwarten doch, dann wäre magic_quotes_runtime die zu überprüfende konfigurationseinstellung.)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Wieder einige Threads gewälzt und zu der Erkenntnis gekommen, dass alles funktioniert egal ob MQ_runtime oder MQ_gpc an oder aus, wenn ich es so mache:
          PHP-Code:
          function save_format($text) {
           if (
          get_magic_quotes_gpc()) $text stripslashes($text); //da Daten bei mir aus $_POST kommen
           
          if (get_magic_quotes_runtime()) $text stripslashes($text);
           
          $text mysql_escape_string(trim($text));
           return 
          $text;
          }
          function 
          ausgabe_format($text) {
           if (
          get_magic_quotes_runtime()) $text stripslashes($text);
           ...

          Ist daran jetzt noch irgendetwas auszusetzen? :-) Klappt jetzt zumindest mit allen möglichen MQ-On-Off-Kombinationen ...

          Kommentar


          • #6
            Original geschrieben von pooky
            Ist daran jetzt noch irgendetwas auszusetzen? :-)
            ja - und zwar der get_magic_quotes_runtime-teil in deiner speicher-funktion.

            magic_quotes_runtime wirkt sich nur auf daten aus, die aus externen datenquellen wie z.b. von deiner DB kommen - wenn das also aktiviert ist, und du an dieser stelle stripslashes verwendest, werden dir jetzt die einfachen backslashes, die gar nicht zur maskierung gedacht waren, sondern vom user als wirkliche backslashes im text gedacht waren, rausgelöscht.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Danke, habe es jetzt endlich geblickt

              Eine andere Frage noch: weiß jemand wie es kommt, dass trotz nl2br() auf die Ausgabe hinter jedem <br /> im Quelltext ein Zeilenumbruch ist?
              Bei Ausgabe meiner Query zum schreiben in die Datenbank steht auch \r\n und nicht bloß \n ... kann man das irgendwo umstellen?

              Kommentar


              • #8
                Original geschrieben von pooky
                weiß jemand wie es kommt, dass trotz nl2br() auf die Ausgabe hinter jedem <br /> im Quelltext ein Zeilenumbruch ist?
                nl2br() ersetzt die zeilenumbrüche nicht, sondern es fügt lediglich <br /> hinzu.

                Bei Ausgabe meiner Query zum schreiben in die Datenbank steht auch \r\n und nicht bloß \n ... kann man das irgendwo umstellen?
                ob beim übertragen von formulardaten die zeilenumbrüche als \n, \r\n oder auch \r übergeben werden, hängt vom verwendeten system ab.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Ok, danke. Wenn man nur den Funktionsnamen betrachtet, könnte man halt leicht vermuten, dass ersetzt wird.

                  Kommentar

                  Lädt...
                  X