[php] preg probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Hallo,

Ik ben hier bezig met een script die queries voor mysql uitvoert. Nu wil ik dat en clause of een update veilig wordt uitgevoerd ook al is er een addslashes vergeten.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function ExecSQL($sql) {
    global $error_list;

    // Hier gaat het om:
    $sql = preg_replace("/=(.*?)\'(.*?)\'/si",
                   "'= \''.addslashes('\\2').'\''", $sql);

    $result = @mysql_query($sql);
    if($result) {
        return $result;
    } else {
        $error_list[] = mysql_error()."\n$sql\n";
        return false;
    }
}


De preg moet van

SELECT * FROM pagina WHERE naam = 'foto's'

SELECT * FROM pagina WHERE naam = 'foto\'s'

maken.

Deze functie doet dat niet. Weet iemand hoe het wel moet?

[ Voor 11% gewijzigd door Slagroom op 07-06-2003 13:59 ]


Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Om functies te gebruiken in je replacement string moet je de /e modifier gebruiken. Of nog beter, een oplossing met preg_replace_callback bouwen.

Overigens zal deze regex sowieso nooit wat doen, ook niet met /e, want je haalt alles tussen de eerste en de tweede ' door addslashes. Dus bij "'foto's'" haal je alleen "foto" door addslashes.

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Met die /e zag ik net ook staan bij php.net

Hoe krijg ik het dan zo dat hij wel werkt?

Acties:
  • 0 Henk 'm!

  • Onno
  • Registratie: Juni 1999
  • Niet online
Niet.

SELECT * FROM pagina WHERE naam = 'a' and b=''

Wat staat hier? Misschien wordt wel

SELECT * FROM pagina WHERE naam = 'a\' and b=\''

bedoeld. Dat verschil kun je niet zien; je input moet dus gewoon goed zijn.

[ Voor 13% gewijzigd door Onno op 07-06-2003 14:55 ]


Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Hmmm, ook wel logisch eigenlijk. Nou ja, 't was het proberen waard...

Acties:
  • 0 Henk 'm!

Verwijderd

if($result) {
return $result;
}

hmmz.. zou je niet beter if(mysql_num_rows()) doen? want er is toch altijd een $result ;)

Acties:
  • 0 Henk 'm!

  • Slagroom
  • Registratie: Juni 2001
  • Laatst online: 05-10-2024
Verwijderd schreef op 07 June 2003 @ 18:56:
if($result) {
return $result;
}

hmmz.. zou je niet beter if(mysql_num_rows()) doen? want er is toch altijd een $result ;)
Klopt, maar als de return een false is heeft er zich een fout voor gedaan. Deze wordt dan in $error_list gezet.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 07 juni 2003 @ 18:56:
hmmz.. zou je niet beter if(mysql_num_rows()) doen? want er is toch altijd een $result ;)
Een update geeft geen mysql-result-resource-id terug, enkel true of false...
Pagina: 1