phpbar.de logo

Mailinglisten-Archive

[php] Regex Problem

[php] Regex Problem

Roland Braband r.braband at web.de
Die Mar 9 22:47:21 CET 2004


Hi,

ich weiss das es derer  Fragen sicherlich viele gibt aber ich komme nicht
drum herum weil es mich wurmt das ich das nicht hinkriege!

Problemstellung:
Ich habe Flatfiles in denen komplette SQL-Statements stehen.
Diese Statements möchte ich überprüfen, ob z.B.:
# Menüeintrag ins backendmenü hinzufügen
INSERT INTO {table_prefix}backendmenu VALUES ('', 4, 0, 20, 'nav_dedilog',
'main.php?area=plugin&dedi_plugin=dedilog/inc.log.php', 'single',
'$perm->have_perm(\'dedilog\')');
=====================================
Dieses Statement richtig gesetzt ist, also ob die inneraddslashes zwischen
den ,'' gesetzt sind und gegebenenfalls das Statement ändern.
=====================================
Dazu habe ich alles fertig vom lesen der Flatfiles bis zum auswerten und
ausführen in einzelnen Statements. Nur mein Regex der die inneraddslashes
überprüft hackt manchmal :(
Hier ein die betreffenden Codezeilen:
=====================================
// funktion die massenhaft statements list und ausführt
function bulk_sql($query) {
        if ($query == '') return;
        $qenc = $this->encode_sql($query); // einfache funktion die
templatevariablen ersetzt, wie zB: {table_prefix}
        $qarr = $this->_splitsqlfile($qenc); // funktion die ein array mit
allen statements zurückliefert
        if(is_array($qarr)) foreach ($qarr as $num => $qrow) {
            // todo: if (! preg_match('@DROP[[:space:]]+(IF
EXISTS[[:space:]]+)?DATABASE @i ', $sql_query)) // check for drop db
            // todo: check function _inneraddslashes for errors
            $qval =
@preg_replace_callback('/\,+\s\'{1,1}(.*?)\'{1,1}\,+/sim', array(&$this,
'_inneraddslashes'), $qrow); // das eigentliche addslashes
            $error[$num] = $this->_db->query(trim($qval)); // sql ausführen
            if (!$error[$num]) $return[$num] = $qval; // errorbehandlung
        }
        return $return;
}

function _inneraddslashes($matches) {
        return preg_replace(',/' . $matches[1] . '/,',
addslashes($matches[1]), $matches[0]);
}
===================================
Nur funktionieren tut das ganze nicht richtig, weiss jemand Rat?

Danke im voraus,

Roland Braband




php::bar PHP Wiki   -   Listenarchive