sql >> Database >  >> RDS >> Mysql

Dynamisch MYSQL UPDATE-instructie genereren op basis van gedefinieerde variabelen uit HTML FORM

Ervan uitgaande dat alle veldnamen in de tabel hetzelfde zijn als de namen van uw formulierinvoer, is dit eenvoudig. U kunt dit gebruiken:

$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);

Om veiliger te zijn, moet u een witte lijst met geaccepteerde parameters maken, d.w.z. de kolommen in uw tabel als volgt:

$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);

Op die manier kan uw zoekopdracht alleen parameters bevatten die u instelt, en als het iemand lukt om extra's te injecteren (door bijvoorbeeld de namen van uw formulierinvoer te wijzigen), wordt deze niet doorgegeven aan uw database.

Ik raad je ook aan om te stoppen met het gebruik van Mysql_* , het is verouderd . Je zou moeten kijken naar MySQLi of BOB als alternatieven.




  1. Is er een manier om meer dan één query per string uit te voeren in MySQL-Python?

  2. MySql:Ordenen op en Groep Door te combineren, niet het laatste record geven

  3. pip install mysqlclient retourneert fatale fout C1083:Kan bestand niet openen:'mysql.h':Geen dergelijk bestand of map

  4. Meerdere records invoegen in orakel