Om vi antar att alla fältnamn i tabellen är desamma som namnen på dina formulärinmatningar är detta enkelt. Du kan använda detta:
$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);
För att vara säkrare bör du skapa en vitlista med accepterade parametrar, dvs kolumnerna i din tabell så här:
$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);
På så sätt kan din fråga bara innehålla parametrar som du ställer in, och om någon lyckas injicera extrafunktioner (genom att till exempel ändra namnen på dina formulärinmatningar) kommer den inte att skickas till din databas.
Jag skulle också rekommendera att du slutar använda Mysql_* , den är fasad . Du bör titta på MySQLi eller PDO som alternativ.