BOn, explications sur la concaténation et règles SQL.
Quand on insère une chaine de caractères dans tu PHP, on l'encadre avec des guillemets :
$variable = "chaine de caractères";
Si on veut ajouter un élément variables PHP dans la chaine de caractère, il est préférable de faire une concaténation en séparant proprement la chaine du PHP:
$variable = "Chaine contenant un ". $element_variable ." qui peut être modifié";
En SQL, quand on affecte une valeur à une colonne, il faut distinguer les champs numériques des autres types de champs. Les champs non numériques doivent être protégés par des apostrophes. Je vais revenir plus loin sur les apostrophes/guillemets.
Maintenant, on mixe un peu tout ça : on crée une requête qui va contenir des variables PHP. La requête doit être traitée par PHP comme une chaine de caractères :
$sql = "UPDATE matable SET champ_num = 123, champ_txt = 'valeur'";
Maintenant, on va insérer des valeurs variables PHP à la place des valeurs en dur :
$sql = "UPDATE matable SET champ_num = ". $val_123 .", champ_txt = '". $valeur_txt ."'";
J'utilise personnellement des guillemets en PHP et des apostrophes en SQL : on peut inverser, ça n'a pas une importance capitale: en revanche, il est indispensable d'éviter les conflits. Je pourrais utiliser des apostrophes partout, mais dans ce cas, certaines apostrophes sont du PHP, d'autres font partie de la chaine de caractères, je dois donc échapper celles de la chaine:
$sql = 'UPDATE matable SET champ_num = '. $val_123 .', champ_txt = \''. $valeur_txt .'\'';
Est-ce que c'est plus clair comme ça ? Adapte ton code maintenant.