Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да генерирате динамично MYSQL UPDATE оператор въз основа на дефинирани променливи от HTML FORM

Ако приемем, че всички имена на полета в таблицата са същите като имената на въведените от вас формуляри, това е направо. Можете да използвате това:

$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 като алтернативи.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django syncdb работи в SQLite, не успява в MySQL

  2. MySQL премахва всички бели интервали от цялата колона

  3. Проблем с вмъкване в базата данни... (Лошо кодиране на знаци) PHP/MYSQL

  4. datetime-local стойността не се появява във входния маркер

  5. Най-добрата структура за релационна база данни със статии и тагове