Giả sử rằng tất cả các tên trường trong bảng giống với tên của các đầu vào biểu mẫu của bạn, điều này sẽ được chuyển thẳng. Bạn có thể sử dụng cái này:
$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);
Để an toàn hơn, bạn nên tạo một danh sách trắng gồm các tham số được chấp nhận, tức là các cột trong bảng của bạn như sau:
$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);
Bằng cách đó, truy vấn của bạn chỉ có thể chứa các tham số bạn đã đặt và nếu ai đó quản lý để thêm các phần bổ sung (ví dụ:bằng cách thay đổi tên của các đầu vào biểu mẫu của bạn) thì nó sẽ không được chuyển đến cơ sở dữ liệu của bạn.
Tôi cũng khuyên bạn nên ngừng sử dụng Mysql_ * , không được dùng nữa . Bạn nên xem MySQLi hoặc PDO như các lựa chọn thay thế.