Mysql
 sql >> Database >  >> RDS >> Mysql

Come generare dinamicamente l'istruzione MYSQL UPDATE basata su variabili definite da HTML FORM

Supponendo che tutti i nomi dei campi nella tabella siano gli stessi dei nomi dei moduli immessi, questo è semplice. Puoi usare questo:

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

Per essere più sicuro dovresti creare una whitelist di parametri accettati, ovvero le colonne nella tua tabella come questa:

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

In questo modo la tua query può contenere solo parametri da te impostati e se qualcuno riesce a iniettare extra (ad esempio modificando i nomi degli input del tuo modulo) non verrà passato al tuo database.

Ti consiglio anche di smettere di usare Mysql_* , è obsoleto . Dovresti guardare MySQLi o DOP in alternativa.