Ако приемем, че всички имена на полета в таблицата са същите като имената на въведените от вас формуляри, това е направо. Можете да използвате това:
$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);
За да сте по-сигурни, трябва да създадете бял списък с приети параметри, т.е. колоните във вашата таблица, както следва:
$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);
По този начин вашата заявка може да съдържа само зададени от вас параметри и ако някой успее да инжектира екстри (например чрез промяна на имената на въведените от вас формуляри), тя няма да бъде предадена на вашата база данни.
Също така бих ви препоръчал да спрете да използвате Mysql_* , той е оттеглен . Трябва да погледнете MySQLi или PDO като алтернативи.