Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como gerar dinamicamente a instrução MYSQL UPDATE com base em variáveis ​​definidas do HTML FORM


Supondo que todos os nomes de campo na tabela sejam os mesmos que os nomes de suas entradas de formulário, isso é direto. Você pode usar isso:
$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);

Para ficar mais seguro, você deve criar uma lista de permissões de parâmetros aceitos, ou seja, as colunas da sua tabela assim:
$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);

Dessa forma, sua consulta pode conter apenas os parâmetros que você definir, e se alguém conseguir injetar extras (alterando os nomes de suas entradas de formulário, por exemplo), ele não será passado para seu banco de dados.

Eu também recomendo que você pare de usar o Mysql_* , está obsoleto . Você deve olhar para MySQLi ou PDO como alternativas.