Toujours ces satanés apostrophes

lionel0769 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
lionel0769 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,




Je m' occupe d'un forum ou des choses ont été développé et j'essaye de corriger certains bug et je bug sur celui des apostrophes pourtant j'ai lu plusieurs sujets mais j'ai du mal à suivre et en tout cas ça n'a rien donné

la portion de code incriminé:
function save_bac($bac, $user_id){
 global $db, $table_prefix;
 $lastupdate = date('Y-m-d G:i', time());
 if($bac->id){
  $sql = "UPDATE ".$table_prefix . "visiobac_bac
   SET biotope_id='".$bac->biotope->id."', volume='$bac->volume',filtration='".$bac->filtration."', eclairage='".$bac->eclairage."', sable='".$bac->sable."', description='".$bac->description."', url='".$bac->url."', longueur='$bac->longueur', largeur='$bac->largeur', hauteur='$bac->hauteur', marque='".$bac->marque."', lastupdate='$lastupdate'
   WHERE id=$bac->id";
 } else {
  $sql = "INSERT INTO ".$table_prefix ."visiobac_bac
  (user_id, biotope_id, volume, filtration, eclairage, sable, description, url, longueur, largeur, hauteur, marque, lastupdate) 
  VALUES ('$user_id','".$bac->biotope->id."','$bac->volume','".$bac->filtration."', '".$bac->eclairage."', '".$bac->sable."', '".$bac->description."', '".$bac->url."', '$bac->longueur', '$bac->largeur', '$bac->hauteur', '".$bac->marque."', '$lastupdate')";
 }
 $db->sql_query($sql);
} 


et lorsque $bac->description contient un apostrophe ça plante
Merci pour votre aide

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

1 - ... tu utilises l'ancienne extension mysql ... elle est considérée comme obsolète.
Je t'invite à lire ceci :
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
Puis à passer à mysqli ou ( je préfère....) la PDO.

Avec les nouvelles extensions mysql existe les requêtes préparées qui permettent, entre autres choses, de ne plus avoir à s'inquiéter des apostrophes....

2 - Dans le cas où tu ne voudrais pas passer à une nouvelle extension mysql (tu aurais tord... mais bon...) ... il existe la fonction addslashes
:http://php.net/manual/fr/function.addslashes.php





Cordialement, 
Jordane                                                                 
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

En complément de la réponse de jordane45, préfère l'utilisation de la fonction dédiée mysql_real_escape_string() à la place de addslashes() pour échapper les caractères spéciaux sql.

Dans l'idéal si tu passes à PDO ou Mysqli, l'équivalent est :
- les requêtes préparées ou quote() pour PDO
- mysqli_real_escape_string() pour Mysqli

Bonne journée
0
lionel0769 Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Pourtant dans mon config.php , j'ai $dbms = 'mysqli';

je suppose qu'il y a beaucoup de code à changer?
0