Bonjour à tous,
Voilà mon problème :
J'ai un script que j'utilise depuis longtemps pour insérer des films dans une base de donnée. Les informations sur le films sont :
Titre
Genre
Réalisateur
Année
Synopsis
Affiche
Il y a systématiquement des apostrophes ( ' ) dans le synopsis du film, du coup, j'utilisais la fonction EREG_REPLACE pour les remplacer par ( \' ) pour éviter de planter la requête SQL.
Pendant des mois cela fonctionnait parfaitement. Mais depuis quelques semaines, lorsque je tente d'ajouter un film, cela plante, m'indiquant que la requête d'insertion n'a pas pu être effectuée.
En tentant de comprendre le pourquoi du comment, j'ai remarqué que le apostrophes du champ synopsis de ma requête n'étaient pas simplement backslashés, elles étaient doublement backslashées. Du coup, un backslash en annulant un autre, c'est comme si il n'y avait rien.
J'ai alors constaté que les apostrophes contenues dans le TEXTAREA 'synopsis' du formulaire d'insertion étaient déjà backslashées, avant même que la fonction EREG_REPLACE n'entre en action. Ce qui explique le double backslashage (est-ce que je suis clair ?)
Ma question est donc : "Y a-t-il une explication à ce changement ?"
comment se fait-il que les apostrophes sont automatiquement backslashées alors qu'auparavant il fallait le faire.
Y a-t-il eu un changement des propriétés des formulaires, des champs TEXTAREA ou d'une autre fonction qui expliquerait cela ?
J'espère m'être fait comprendre comme il faut. Voici un bout de code pour illustrer.
D'avance un grand merci pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 // Récupération des données $titre = $_POST['titre']; $realisateur = $_POST['realisateur']; $genre = $_POST['genre']; $annee = $_POST['annee']; $synopsis = $_POST['synopsis']; $affiche = $_POST['affiche']; echo $synopsis."<br>"; // en affichant la variable je me suis rendu compte que les apostrophes étaient déjà backslashées // Remplacer les apostrophes pour éviter les erreurs $synopsis1 = addslashes($synopsis); $synopsis2 = ereg_replace("'", "\'", $synopsis); echo $synopsis1."<br>"; // avec ADDSLASHES je me retrouvait avec un triple backslash avant l'apostrophe echo $synopsis2."<br>";// avec EREG_REPLACE double backslash // requête d'insertion des données dans la bdd $requete = "INSERT INTO films (titre, realisateur, genre, annee, synopsis, affiche) VALUES ('".$titre."', '".$realisateur."', '".$genre."', ".$annee.", '".$synopsis."', '".$affiche."')"; echo $requete; // là je constatait les diverses variantes en fonction de la fonction utilisée (addslashes ou ereg_replace) // exécution de la requête mysql_query($requete) or die ("impossible d'exécuter la requête films");
Meilleures salutations
Thufir Hawat
Partager