Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So generieren Sie dynamisch eine MYSQL-UPDATE-Anweisung basierend auf definierten Variablen aus HTML FORM

Unter der Annahme, dass alle Feldnamen in der Tabelle mit den Namen Ihrer Formulareingaben übereinstimmen, ist dies einfach. Sie können dies verwenden:

$query = "UPDATE product SET";
$comma = " ";
foreach($_POST as $key => $val) {
    if( ! empty($val)) {
        $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
        $comma = ", ";
    }
}
$sql = mysql_query($query);

Um sicherer zu sein, sollten Sie eine Whitelist akzeptierter Parameter erstellen, d. h. die Spalten in Ihrer Tabelle wie folgt:

$query = "UPDATE product SET";
$comma = " ";
$whitelist = array(
    'title',
    'rating',
    'season',
    'brand_id',
    'cateogry',
    // ...etc
);
foreach($_POST as $key => $val) {
    if( ! empty($val) && in_array($key, $whitelist)) {
        $query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
        $comma = ", ";
    }
}
$sql = mysql_query($query);

Auf diese Weise kann Ihre Abfrage nur von Ihnen festgelegte Parameter enthalten, und wenn es jemandem gelingt, Extras einzufügen (z. B. durch Ändern der Namen Ihrer Formulareingaben), wird dies nicht an Ihre Datenbank weitergeleitet.

Ich würde Ihnen auch empfehlen, die Verwendung von Mysql_* einzustellen , es ist veraltet . Sie sollten sich MySQLi ansehen oder PDO als Alternativen.