Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment générer dynamiquement une instruction MYSQL UPDATE basée sur des variables définies à partir de HTML FORM

En supposant que tous les noms de champs de la table sont les mêmes que les noms de vos entrées de formulaire, c'est simple. Vous pouvez utiliser ceci :

$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);

Pour plus de sécurité, vous devez créer une liste blanche des paramètres acceptés, c'est-à-dire les colonnes de votre tableau comme ceci :

$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);

De cette façon, votre requête ne peut contenir que des paramètres que vous avez définis, et si quelqu'un parvient à injecter des extras (en changeant les noms de vos entrées de formulaire par exemple), il ne sera pas transmis à votre base de données.

Je vous recommande également d'arrêter d'utiliser Mysql_* , il est obsolète . Vous devriez regarder MySQLi ou AOP comme alternatives.