Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_replace aus MySQL Tabelle. Wie insert?

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

  • preg_replace aus MySQL Tabelle. Wie insert?

    Hallo,

    ich bin zwar schon einige Zeit dabei aber Familie, Beruf schränkt alles stark ein, sodass ich um Nachsicht bitte. Ich werde erst in nächster Zeit auf mysqli oder gar PDO umstellen.

    Es geht um folgendes. Ich möchte die Daten für preg_replace aus einer MySQL Tabelle laden. Das klappt auch super. Nur der insert will nicht.

    Ich habe mir vor lager Zeit mal Hilfsfunktionen für MySQL erstellt,

    PHP-Code:
    <?php
    function mysql_selectarray($what$table$where)
            {
                    
    $i=0;
                    
    $return = array();
                    
    $sql "SELECT $what FROM ".MYSQL_DB_PRAEFIX."$table $where";
                    
    $result mysql_query($sql);
                            while(
    $row mysql_fetch_assoc($result)) {
                                    foreach (
    $row as $key => $value)
                                    {
                                            
    $return[$i][$key] = $value;
                                    }
                                    
    $i++;
                            }
                    return 
    $return;
            }

    function 
    mysql_insert($table$spalten$values)
            {
                    
    $sql "INSERT INTO ".MYSQL_DB_PRAEFIX."$table ($spalten) VALUES ($values)";
                    
    mysql_query($sql);
            }
    ?>
    die Funktion mit der ich den preg_replace ausführe sieht wie folgt aus:

    PHP-Code:
    <?php

    function pregreplace($where ''$text '')
    {
        if (
    $where)
        {
            
    $where "WHERE type = '".$where."' AND aktiv = '1'";
        }
        else
        {
            
    $where "WHERE aktiv = '1'";    
        }

        
    $replace_data mysql_selectarray("*""replaces""$where");

        foreach (
    $replace_data as $wert)
            {
                
    $text preg_replace($wert['pattern'], $wert['replace'], $text);    
            }
        return 
    $text;
    }

    ?>
    Das aufrufen der Funktion lappt Perfekt,

    PHP-Code:
    <?php
    echo pregreplace("0""[b]Fetttext[/b[");
    ?>
    Soweit so gut. In der MySQL Tabelle steht in der Spalte pattern => #\[b\](.*)\[/b\]#isU <= und in der Spalte replace => <b>$1</b> <= der Type (1 für bbcode ) ist in meinem Fall nicht von Bedeutung. Auch aktiv tut nichts zu Sache. Ich habe ein Problem mit dem insert.

    Führe ich den insert aus

    PHP-Code:
    <?php

           
    // Hier bekomme ich logischer Weise einen error weil die ' fehlen.
           
    mysql_insert("replaces""#\[b\](.*)\[/b\]#isU""<b>$1</b>");

           
    // Hiermit klappt es, jedoch MySQL Injection
           
    mysql_insert("replaces""'#\[b\](.*)\[/b\]#isU'""'<b>$1</b>'");

           
    // Hier klappt der insert, MySQL Injection wird zwar verhindert aber beim select. Sind die Daten auch falsch in der Tabelle also der preg_replace findet dann nichts mehr.
           
    mysql_insert("replaces"mysql_real_escape_string("#\[b\](.*)\[/b\]#isU"), mysql_real_escape_string("<b>$1</b>"));

    ?>
    Was mache ich da falsch? Wie macht phpmyadmin das anders? Denn wenn ich es da eintrage klappt es ja wunderbar.

    Das sollte am Ende natürlich in einer Funktion enden.

    Also in etwa so
    PHP-Code:
    <?php
    function insert_bbcode($search$replace)
    {
            
    mysql_insert("replaces""$search""$replace");
    }
    ?>
    Ich hoffe ihr könnt mir da Licht ins dunkle führen.

    Noch eine kleine Anmerkung. Ich habe bisher Klassen immer meiden können und "verstehe" die auch irgendwie nicht so ganz. Aber z.b. die function insert_bbcode(), wie würde die in einer Klasse aussehen? Wäre jemand so nett und würde mir das mal als Klasse hier schreiben? Wäre echt super, das ich die einfach mal irgendwie verstehe.

    Ich danke euch vielmals.


  • #2
    Stelle erst mal auf Mysqli oder PDO um, dann reden wir über dein Problem.. Es hat keinen Nutzen sich mit Altlasten abzuquälen.

    Kommentar


    • #3
      Ok, das habe ich.

      https://nopaste.xyz/?f8474dcc64d8015...soKKf0FQLVWn4=

      Kommentar


      • #4
        In jeder Funktion hast du ein Connect, das ist äußert ungeschickt. Man hat in einem Script sehr häufig mehr als eine DB-Abfrage.
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          mysqli_real_escape_string braucht die Verbindungskennung, die hast du aber an dieser Stelle noch nicht, da du die Verbindung zur DB erst danach erstellst.
          Daher auch uhas Anmerkung.

          Kommentar

          Lädt...
          X