Salut,
Je vois que tu débutes de chez début (rassure-toi, on a tous fait ça)…
- htmlspecialchars
http://fr.php.net/manual/fr/function.htmlspecialchars.php
Le fatal paragraphe, c’est ça :
Certains caractères ont des significations spéciales en HTML, et doivent être remplacés par des entités HTML pour conserver leurs significations.
Or tes saisies de formulaires ne sont pas des textes en HTML, dont certains caractères pourraient avoir une signification spéciale (en HTML). S’il y a une apostrophe quelque part, c’est une apostrophe, rien de plus.
Donc c’est une erreur d’utiliser cette fonction (pour faire ce que tu désires).
-
tes variables
Comme il y en a une quinzaine, il est évident qu’il convient d’utiliser des tableaux et de les parcourir au moyen d’une boucle. La manière de faire dépend évidemment de ton cas de figure.
Dans $POST tu disposes à la fois de noms (raison, adresse…) et des valeurs correspondantes. S’il n’y a que des données à insérer dans une seule table de la base et que les noms dans $POST sont bien aussi les noms de champs de la base, tu peux parcourir $POST (qui est un tableau) pour fabriquer à la fois la liste des noms (= liste des champs de la requête insert) et la liste des valeurs, correctement formatées.
Un truc de ce genre :$champs = ‘(’;
$valeurs = ‘(’;
foreach ($_POST as $nom => $valeur) {
$champs .= $nom . ', ';
$valeurs .= ‘"’ . $valeur . '", ';
}
echo $champs . “\n”;
echo $valeurs. “\n”;
$champs = substr($champs, 0, strlen($champs) - 2) . ‘)’;
$valeurs = substr($valeurs, 0, strlen($valeurs) - 2) . ‘)’;
echo $champs . “\n”;
echo $valeurs . “\n”;$sql = 'INSERT INTO donnees ’ . $champs . ’ VALUES ’ . $valeurs;
echo $sql . “\n”;
…
Note : je t’ai mis des “echo” pour que tu puisses voir le résultat (rien de mieux pour comprendre). Tu peux bien sûr les supprimer.
Note : comme je l’ai déjà dit, il faut éventuellement adapter tout ça à ta situation particulière. C’est juste pour donner un aperçu…
Explication à propos des apostrophes qui ne passent pas : en fait, les valeurs de type texte fournies à insert doivent être entre guillemets, entre autres pour cette raison.
Mais alors se pose le problème des guillemets simples (’ ‘) et des guillemets doubles (" “). Il faut évidemment choisir des guillemets double, précisément à cause des apostrophes, interprétés comme guillemets simples, ce qui fiche le souk… D’où les choses un peu bizarres à première vue comme '”’ . $valeur . '", ’ qui encadrent bien $valeur par des guillemets doubles (et une virgule et un espace au bout)…
(je ne suis pas sûr de ne pas avoir commis d’erreur dans le code proposé… Ça arrive…)
Edit : j’ai écrit $POST dans le texte, parce que le tiret fait des italiques dans le forum (c’est pas malin !).