SQL - Erreur insertion donnée

Répondre
dunbar
le 23/06/2006 à 21:43
dunbar
Bonjour,

J'ai créer un formulaire, et il introduite les données dans une base (tout fonctionne nickel).
Seul problème est que j'ai un champ dans mon formumaire "Adresse" et si je rentre une adre du genre rue d'Atr une adresse avec un ' j'ai une erreur à l'enregistrement dans ma base j'ai mis un type VACHAR ou TEXT et j'ai toujours la même erreur.

D'avance merci pour votre aide
dunbar
le 23/06/2006 à 23:12
dunbar
Oui sorry:
Erreur SQL !INSERT INTO prestation VALUES('001','dunbar','rue d'atrive, ','aucune','000000','','','','','','','','','','','','','','','','','','','','','','','','','') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'atrive, ','aucune','000000','','','','','','','','','','','','','','','','','','' at line 1


Voila et merci d'avance.

MAJ
Mon formulaire comporte 5 colonnes et 6 lignes
chacune des ligne est identique (donc j'ai 6 x "nom" 6 x adresse etc)
toutes les celules portent une ID différente quelle serais la meilleurs méthode de creer une table pour cela ?
PS: le 6 ligne ne doivent pas être remplie obligatoirement par l'utilisateur,mais les 5 celules oui.
dunbar
le 23/06/2006 à 23:21
dunbar
Oui sorry:
Erreur SQL !INSERT INTO prestation VALUES('001','dunbar','rue d'atrive, ','aucune','000000','','','','','','','','','','','','','','','','','','','','','','','','','') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'atrive, ','aucune','000000','','','','','','','','','','','','','','','','','','' at line 1

Une détail ci j'introduit rue d'atrive j'ai l'erreur; par contre ci j'introduit rue d atrive donc (sans l'apostrophe)j'ai pas l'erreur.
LA GLOBULE
le 23/06/2006 à 23:23
LA GLOBULE
A priori, tu as 5 champs, or tu fais un insert qui utilise 30 champs ?
Il y'en a 25 de trop !

Ensuite, le problème se situe la => rue d'atrive.
Le ' interfere avec tes ' qui servent à délimiter les champs de ton insert.

Pour eviter cela, il faut utiliser la fonction mysql_escape_string().

Exemple :
$sql = "INSERT INTO table VALUES ('".mysql_escape_string($chaine)."')";
dunbar
le 23/06/2006 à 23:31
dunbar
Merci, oui effectivement j'ai 5 champs et 6 ligne dans mon formulaire qui reprenne à chaque fois les 5 champs
Ma question je peus avoir 5 champs dans un formulaire qui aurais la même ID:
Voici mon code d'insertion des données dans ma bases
$sql = "INSERT INTO prestation VALUES('$T3','$T9','$T15','$T21','$T27','$T4','$T10','$T16','$T22','$T28','$T5','$T11','$T17','$T23','$T29','$T6','$T12','$T18','$T24','$T30','$T7','$T13','$T19','$T25','$T31','$T8','$T14','$T20','$T26','$T32')";

J'ai fait le cons ? auriez-vous une idée ?

Merci
LupusMic
le 24/06/2006 à 10:38
LupusMic
Avant d'enregistrer les données dans la base, il faut les traiter. En filtrant et sécurisant les données.

Lit les forums et cours de ce site, tu trouveras des éléments de réponse.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
dunbar
le 24/06/2006 à 11:07
dunbar
Bonjour,
Oui effectivement mais ma question étais, Une ligne de 5 champs ,6 sur un formulaire quelle serais la meilleur méthode d'introduire cela dans une base ?
LA GLOBULE
le 24/06/2006 à 11:54
LA GLOBULE
Ben on s'en fou du nombre de lignes...
Tu as 5 champs, met que 5 trucs dans ton INSERT.

Et comme je te l'ai dit, utilise la fonction mysql_escape_string autour de tes variables.
dunbar
le 24/06/2006 à 12:20
dunbar
Bonjour,
Bon j'ai suivie vos conseilles, (merci)
voici mes codes :
celui du formaulaire:
<table border="0" id="table4" width="1276">
<tr>
<td width="100" align="center"><font size="2">Réf Client</font></td>
<td width="121" align="center"><font size="2">Nom Client</font></td>
<td align="center" width="318"><font size="2">Adresse Client</font></td>
<td align="center" width="535"><font size="2">Remarques</font></td>
<td align="center">
<p align="left"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Téléphone</font></p>
</td>
</tr>
</table>
<table border="0" width="1239" height="5" id="table5">
<tr>
<td width="99"><input type="text" name="ref" size="13"></td>
<td width="122"><input type="text" name="nom" size="16"></td>
<td width="318"><input type="text" name="adr_client" size="44"></td>
<td><input type="text" name="rem_client" size="90"></td>
<td width="161">
<p align="center"><input type="text" name="tel_client" size="10"></p>
</td>
</tr>
<tr>
<td width="99"><input type="text" name="ref" size="13"></td>
<td width="122"><input type="text" name="nom" size="16"></td>
<td width="318"><input type="text" name="adr_client" size="44"></td>
<td><input type="text" name="rem_client" size="90"></td>
<td width="161">
<p align="center"><input type="text" name="tel_client" size="10"></p>
</td>
</tr>
<tr>
<td width="99"><input type="text" name="ref" size="13"></td>
<td width="122"><input type="text" name="nom" size="16"></td>
<td width="318"><input type="text" name="adr_client" size="44"></td>
<td><input type="text" name="rem_client" size="90"></td>
<td width="161">
<p align="center"><input type="text" name="tel_client" size="10"></p>
</td>
</tr>
<tr>
<td width="99"><input type="text" name="ref" size="13"></td>
<td width="122"><input type="text" name="nom" size="16"></td>
<td width="318"><input type="text" name="adr_client" size="44"></td>
<td><input type="text" name="rem_client" size="90"></td>
<td width="161">
<p align="center"><input type="text" name="tel_client" size="10"></p>
</td>
</tr>
<tr>
<td width="99"><input type="text" name="ref" size="13"></td>
<td width="122"><input type="text" name="nom" size="16"></td>
<td width="318"><input type="text" name="adr_client" size="44"></td>
<td><input type="text" name="rem_client" size="90"></td>
<td width="161">
<p align="center"><input type="text" name="tel_client" size="10"></p>
</td>
</tr>
<tr>
<td width="99"><input type="text" name="ref" size="13"></td>
<td width="122"><input type="text" name="nom" size="16"></td>
<td width="318"><input type="text" name="adr_client" size="44"></td>
<td><input type="text" name="rem_client" size="90"></td>
<td width="161">
<p align="center"><input type="text" name="tel_client" size="10"></p>
</td>
</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"><input type="submit" value="Envoyer" name="B1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="reset" value="Rétablir" name="B2"></p>
</form>

Une partie !!
et voici mon fichier validation.php

<?PHP

$db = mysql_connect('localhost', '?????', '?????');
mysql_select_db('vd-cablxxxxxx',$db);

$sql = "INSERT INTO webmaster VALUES('$id_client','$ref','$nom','$adr_client','$rem_client','$tel_client')";

mysql_query($sql)
or die('Erreur SQL !'.$sql.'
'.mysql_error());

echo 'merci beaucoup, vos infos ont été enregistrées.';
mysql_close();

?>


1-problème ci je remplie tout mon formulaire (6 lignes) seule la dernière ligne se retrouve dans ma base. (je signal que j'ai fait comme vous avez dit à la place de 30 intro, il m'en reste 5)

voici ma table

CREATE TABLE `prestations` (
`id_client` INT(5) NOT NULL AUTO_INCREMENT,
`ref` varchar(10) collate latin1_german1_ci NOT NULL,
`nom` varchar(30) collate latin1_german1_ci NOT NULL,
`adr_client` varchar(30) collate latin1_german1_ci NOT NULL,
`rem_client` varchar(255) collate latin1_german1_ci NOT NULL,
`tel_client` varchar(15) collate latin1_german1_ci NOT NULL,
PRIMARY KEY (id_client)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;


D'avance merci
Répondre
LoadingChargement en cours