Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment mettre à jour un ou plusieurs champs en ignorant les champs vides dans la base de données mysql ?

Tout d'abord, n'oubliez pas d'échapper toutes les chaînes qui vous parviennent via POST, GET ou REQUEST (renseignez-vous sur les attaques par injection SQL si vous ne savez pas pourquoi).

Quelque chose comme ceci pourrait fonctionner :

$semaphore = false;
$query = "UPDATE contacts SET ";
$fields = array('tel','fax','email');
foreach ($fields as $field) {
   if (isset($_POST[$field]) and !empty($_POST[$field]) {
     $var = mysql_real_escape_string($_POST[$field]);
     $query .= uppercase($field) . " = '$var'";
     $semaphore = true;
   }
}

if ($semaphore) {
   $query .= " WHERE Cust_Name = '$cst'";
   mysql_query($query);
}

NB :Ne faites jamais simplement une boucle dans votre tableau $_POST pour créer une instruction SQL. Un adversaire peut ajouter des champs POST supplémentaires et éventuellement causer des méfaits. Une boucle dans un tableau d'entrée utilisateur peut également conduire à un vecteur d'injection :les noms de champ doivent être ajoutés à l'instruction, ce qui signifie qu'il s'agit d'un vecteur potentiel. Les techniques de prévention d'injection standard (paramètres d'instructions préparées, fonctions de citation fournies par le pilote) ne fonctionneront pas pour les identificateurs. Au lieu de cela, utilisez une liste blanche de champs à définir et bouclez sur la liste blanche ou passez le tableau d'entrée dans la liste blanche.