[Funktion] Trägt veränderten code nicht in die DB ein...

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

  • [Funktion] Trägt veränderten code nicht in die DB ein...

    HI!

    Ich habe folgende Funktion, um in einem Tutorial gepostetes php (mit [ p h p ] und so..) schön zu bearbeiten.

    Wenn ich mir das bearbeitete ausgebe, funzt es auch super, richtig schön bunte Syntax und so.

    Speichere ich es dann in die DB, zeigt er mir einen Fehler an.
    Ich wende vor dem Speichern noch mysql_escape_string() an, aber es nützt nichts.

    HIer mal die Funktion + Aufruf

    [PHP]function phpstring($code) {

    #$code = str_replace("\\\"","\"",$code);
    #$code = str_replace(">", ">", $code);
    #$code = str_replace("&lt;", "<", $code);
    #$code = str_replace("&amp;", "&", $code);
    #$code = str_replace('$', '\$', $code);
    #$code = str_replace('\n', '\\\\n', $code);
    #$code = str_replace('\r', '\\\\r', $code);
    #$code = str_replace('\t', '\\\\t', $code);
    #$code = str_replace("<br>", "", $code);
    #$code = str_replace("<br />", "", $code);
    $code = stripslashes($code);
    if(!strpos($code,"<?") && substr($code,0,2)!="<?") $code="<?php\n".trim($code)."\n?>";
    $code = trim($code);
    ob_start();
    $oldlevel=error_reporting(0);
    highlight_string($code);
    error_reporting($oldlevel);
    $buffer = ob_get_contents();
    ob_end_clean();
    #$buffer = str_replace("<br />", "",$buffer);

    #$buffer = str_replace("&quot;", "\"", $buffer);
    #echo nl2br(htmlspecialchars($buffer))."<hr>";
    return "<table border=\"0\" cellspacing=\"1\" width=\"99%\" bgcolor=\"#b7ceff\" align=\"center\">
    <tr><td width=\"100%\" bgcolor=\"#FFFFFF\"><b>HTML code:</b><hr noshade color=\"#b7ceff\" size=\"1\"><div class=\"phpstring\">".$buffer."</div></td>
    </tr></table>";
    }

    //Aufruf
    $code=preg_replace("/\
    PHP-Code:
    (.*)\[\/php\]/esiU","phpstring('\\1')",$code); 
    Also wie gesagt, an der Funktion liegt es nicht. Er sagt "fehler", wenn ein ' im code vorkommt. Dieses kann er irgendwie nicht in die db eintragen.

    Mein Eintrag:

    PHP-Code:
    addslashes($code);
    $query =
    "
      INSERT INTO www_workshops
      (titel,autor,w_text,datum,diffi,art)
      VALUES
      ('
    {$_POST['w_titel']}','$userlog','$code','$zeit','{$_POST['w_diffi']}','{$_POST['w_art']}')
    "
    ;
    $input mysql_query($query);

    if (!
    $input) {
      echo 
    "Fehler: <BR>"mysql_error() ."<BR>Query:<BR>"$query ."<BR>"; die();
      }  else {
          echo 
    mysql_affected_rows() . " Datensatz eingefügt. <BR>";
      } 
    Hoffe es kann jemand helfen! MfG Oli
    Zuletzt geändert von OliOli; 28.05.2003, 23:22.

  • #2
    was hast du für komisches Zeug in deiner 1. Datei drin?
    tata
    moqui

    [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

    Kommentar


    • #3
      Hä? WIe meinste das jetzt?
      In welcher Datei, und warum komisches Zeug?

      Kommentar


      • #4
        PHP-Code:
        $code = stripslashes($code);
         if(!strpos($code,"<?") && substr($code,0,2)!="<?") $code="<?phpn".trim($code)."n?>";
         $code = trim($code);
        wenn das mal nicht komisch ist....

        bzw...wenn ich mirs genau ankuck, kann ich der Funktion nicht folgen

        EDIT:

        vergiss es...ich war mal wieder zu langsam....

        habs gepeilt...

        C++ lernen und nebenher noch Forumlen tut net so ganz...

        muss man immer auf 2 verschiedene Syntax aufpassen...

        Zuletzt geändert von Moqui; 28.05.2003, 20:41.
        tata
        moqui

        [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

        Kommentar


        • #5
          Ähm... Also ich hab die Funktion auch nich selber geschrieben.

          Ich denke mal, dass es was damit zu tun hat, ob der User code mit <?php am Anfang gepostet hat oder nicht.

          Kommentar


          • #6
            ja...ist ja ok....

            mich hat das highlighting verwirrt und ich lern grad im moment noch C++ und kompilier blöd durch die gegend und versuch noch Leuten bei PHP zu helfen...

            bissle stark verwirrend
            tata
            moqui

            [COLOR=red]Ich will keine unaufgeforderten Mails über PHP Fragen. Es gibt ein Forum hier! Und ich bin nicht Scripter für jeden, der mir ne Mail schreibt![/COLOR]

            Kommentar


            • #7
              Weiß sonst vielleich jemand Rat?

              Kommentar


              • #8
                füg das mal in deine fkt ein:

                PHP-Code:
                $code str_replace(" ' ","& # 3 9;",$code); // ohne die leerzeichen  !! 
                btw: str_replace() kannst du auch mit arrays verwenden
                str_replace($array_such,$array_ersetze,$text)
                Kissolino.com

                Kommentar


                • #9
                  Jo, danke! NUr noch eines:

                  Wenn ich den Code jetzt aus der DB hole und anzeigen lasse, wandelt er die & natürlich wegen dem script in &amp; um.

                  Naja, ich hab die Zeile rausgenommen.
                  Aber komischerweise macht ers immernoch. Keine Ahnung warum..

                  Kommentar


                  • #10
                    poste nochmal den aktuellen code
                    Kissolino.com

                    Kommentar


                    • #11
                      ALso der eingegebene Code wird mit folgender Funktion verarbeitet:

                      PHP-Code:
                       function phpstring($code) {

                       #$code = str_replace("\\\"","\"",$code);
                       #$code = str_replace("&gt;", ">", $code);
                       #$code = str_replace("&lt;", "<", $code);
                       #$code = str_replace('$', '\$', $code);
                       #$code = str_replace('\n', '\\\\n', $code);
                       #$code = str_replace('\r', '\\\\r', $code);
                       #$code = str_replace('\t', '\\\\t', $code);
                       #$code = str_replace("<br>", "", $code);
                       #$code = str_replace("<br />", "", $code);
                       #$code = str_replace("\'", "'", $code);
                       $code = str_replace("'","\'",$code);
                       $code = str_replace("&amp;#39;","'",$code);
                       $code = stripslashes($code);
                       if(!strpos($code,"<?") && substr($code,0,2)!="<?") $code="<?php\n".trim($code)."\n?>";
                       $code = trim($code);
                       ob_start();
                       $oldlevel=error_reporting(0);

                       highlight_string($code);
                       error_reporting($oldlevel);
                       $buffer = ob_get_contents();
                       ob_end_clean();
                       #$buffer = str_replace("<br />", "",$buffer);

                       #$buffer = str_replace("&quot;", "\"", $buffer);
                       return "<table border=\"0\" cellspacing=\"1\" width=\"90%\" bgcolor=\"#b7ceff\" align=\"center\"><tr><td width=\"100%\" bgcolor=\"#FFFFFF\">PHP code:</b><hr noshade color=\"#b7ceff\" size=\"1\"><div class=\"phpstring\">".$buffer."</div></td></tr></table>";
                      }
                      Danach mach cih nur noch einmal mysql_escape_string($code); dann targ ich ihn ein. mein Prob ist nur, dass alle ' die in &#39; umgewandelt werden sollen, in &amp;#39; umgewandelt werden.
                      Es wird also für die & komischerweise nochmal ein Sonderzeichen gefunden...

                      Kommentar


                      • #12
                        hier liegt der hund begraben:

                        highlight_string($code);

                        da musst du nach diesem befehl auf möglichst schlaue weise
                        die unerwünschten "& amp;" finden und austauschen.
                        Kissolino.com

                        Kommentar


                        • #13
                          Hab ich mir auch schon so gedacht und einfach ersetzt, dasd dumme ist nur, dass bei highlight_code() sehr viel mit font gemacht wird. Ich hatte zwei-dreimal in der Ausgabe vom & amp; das & rot oder so und den Rest blau. Dann ersetzt er es natürlich nicht, da im QT ja steht:

                          <font color="red">&</font><font color="blue">amp;</font>

                          Kommentar


                          • #14
                            deswegen hab ich ja geschrieben "möglichst schlau"

                            schau mal bei den regulären ausdrücken, mit preg_replace()
                            sollte was zu machen sein, es sind ja nur wenige kombinationen,
                            die du suchst.

                            allerdings frage ich mich gerade, ob highlight_string() nicht allein
                            die Lösung ist (also ohne das ganze str_replace-gesummsel)?
                            Kissolino.com

                            Kommentar


                            • #15
                              Ähm... Ich wüßte auch nich, wie ich das machen könnte..

                              Gibt es einen Befehl, um aus einem string alles html rauszufiltern?
                              bei php.net hab ich nichts gefunden....

                              Wandelt highlight_code das denn um oder warum liegt der Fehler da?

                              Kommentar

                              Lädt...
                              X