Page 1 sur 1

Enregistrement dans bdd mysql

Posté : 24 févr. 2009, 10:14
par Arkonara
Bonjour a tous, voila j'ai un petit problème.
J'ai un formulaire d'insertion dans ma base, ce formulaire concerne une table de ma base mais seulement certains champs. mon script d'insertion est bien lu par mon programme mais aucunes insertions n'est effectuée dans ma base. Voici mon script SQL INSERT
<?php
	require_once('../connexion.php');
	if ($db)
	{
		//allocation des variables
		$numFiche="";
		$LienFiche="";
		$dateicdt=$_POST['AnotherDate'];
		$heuricdt=$_POST['heure_icdt'];
		$desicdt=$_POST['descrip_icdt'];
		$desresol="";
		$dateresol="";
		$heuresol="";
		$inter="";
		$observ=$_POST['observation'];
		$motifreouv="";
		$teamtrack="";
		$remarqueresp="";
		$majeur=$_POST['choix'];
		$matereiel=$_POST['lstmateriel'];
		$secteur=$_POST['lstSecteur'];
		$staticdt="ouv";
		$statuprod=$_POST['lstStatutProd'];
		$declarant=$_POST['lstdeclarant'];
			$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';";
			$numemployer=mysql_query($query);
		$prestataire=$_POST['lstPrestataire'];
		
		
		$query ="INSERT INTO incidents VALUES( '$numFiche', '$LienFiche', '$dateicdt', '$heuricdt', '$desicdt', '$desresol', '$dateresol', '$heuresol', '$inter', '$observ', '$motifreouv', '$teamtrack', '$remarqueresp', '$majeur', '$matereiel', '$secteur', '$staticdt', '$statuprod', '$numemployer', '$prestataire')"; 
		$result= mysql_query($query);
		echo'L\'incident souhaiter a bien été renseigner !!';
	}
	else
	{
		'Problème a la connexion';
	}
?>
ps: pour davantage de renseignement n'hesiter pas a me poser des questions

Posté : 24 févr. 2009, 15:17
par stopher
Hi ,

Dis moi , ou se trouve le nom de tes colonnes ?

dans ta requête qui doit normalement être comme ceci :

INSERT INTO "nom de table" ("colonne 1", "colonne 2", ...)
VALUES ("valeur 1", "valeur 2", ...)


Ch.

Posté : 24 févr. 2009, 15:21
par Arkonara
elles ne sont pas obligatoire, dans le cas ou tu met les veleurs dans le bon ordre

Posté : 24 févr. 2009, 15:36
par stopher
Ok , je ne le conseil pas cependant tu as raison ...

Maintenant , as tu testé ta requête tel qu'elle est construite ...

Soit en ligne de commande , soit via phpmyadmin par exemple ..

tu fais un echo de $query puis tu copies et tu colles pour tester ... tu seras fixé sur la validité de ta requete ..

Ou simplement ajouter une vérification de la bonne execution de la requete via par exemple :
mysql_query($query) or die( mysql_error() );
Peut être une colonne oublié ? , un mauvais type ?

Posté : 24 févr. 2009, 15:43
par Arkonara
J'ai pensé ajouter cela oui
mysql_query($query) or die( mysql_error() );
J'ai aussi ajouter le nom de mes colonne pour plus de sureté

l'erreur afficher par le mysql_error() est la suivante :
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 ''num_fiche', 'lien-fiche', 'date_icdt', 'heure_icdt', 'descrip_icdt', 'descrip_r' at line 1

En clair j'ai une erreure de syntaxe, mais je ne vois toujours pas où !! :?

Posté : 24 févr. 2009, 15:45
par stopher
fais un echo de $query et donne nous ta requête construite par ton script

Posté : 24 févr. 2009, 15:50
par Arkonara
voici ce que comtient mon query

INSERT INTO incidents ( 'num_fiche', 'lien-fiche', 'date_icdt', 'heure_icdt', 'descrip_icdt', 'descrip_resol', 'date_resol', 'heure_resol', 'Intervenant', 'observation', 'motif_r_icdt', 'num_teamtrack', 'remarque_resp', 'icdt_majeur', 'CodeMateriel', 'CodeSecteur', 'CodeStatutIncident', 'CodeStatutProd', 'NumEmploye', 'CodePrestataire' ) VALUES( '', '', '24/02/2009', '', 'Lkjhr orh iueh ioe ehert', '', '', '', '', '', '', '', '', '2', '8', '0004', 'OUV', 'PDE', 'Resource id #4', 'EXTSR')

et tout sa c'est bon pourtant,
enfin peu tetre faudrait'il 'NULL' a la place de '' ?

Posté : 24 févr. 2009, 16:02
par stopher
Bon ,

Pour ta requete , il me semble que pour mes champs text il te faut les quoter !

De plus , je te conseille tres fortement d'échapper un minimum ce que tu entres dans ta base ( chose qui n'est pas fait ici )

Essaye avec ce genre de syntaxe :
$requete = "INSERT INTO votretable (texte) VALUES ('".mysql_real_escape_string($texte)."')";
Apres , je ne peux que te conseiller de te rapprocher de PDO pour gérer tes requêtes

Bref , je pense que ton probléme vient du fait de ne pas quoter les valeurs de tes champs dont le type est text ou varchar

Posté : 24 févr. 2009, 16:09
par Arkonara
Jviens de lire la doc sur php.net. Mais
Quel est cette syntaxe? je ne connais pas du tout
Serais tu en mesure de m'explquer un pti peu stp histoire que je comprenne
".mysql_real_escape_string($texte)."[/php]

Posté : 24 févr. 2009, 16:23
par stopher
mysql_real_escape_string , comme l'explique la doc , permet d'échapper ( rendre inefficace ) toutes commande sql inséré dans les données "insérées" ( variable , POST ect .. ).

Si les données provenant de l'extérieur ( formulaires , trie , ect ) ne sont pas échappés/filtrés correctement , un utilisateur qui ne veut pas du bien au site , peut injecter du code sql dans ces données ( via les formulaires par exemple ) , d'ou le nom des injections SQL .

Des injections peuvent avoir plusieurs but ( passer outre une identification , supprimer des données de la base , faire tomber le serveur en l'inondant de requêtes , simplement prendre le contrôle de la base , recupérer des infos ect ect ect ... )

D'ou l'importance de bien filtrer et échapper les données qui proviennent de l'extérieur

Voilà , en espérant avoir été assez clair .. sinon, tu regardes sur google des infos sur les injections SQL , qui regorge d'informations et d'exemples ..

Ch.

Posté : 24 févr. 2009, 16:25
par Arkonara
merci pour la petite explication

Posté : 02 mars 2009, 14:51
par leclaude
INSERT INTO incidents ( 'num_fiche', 'lien-fiche', 'date_icdt', etc....

Bonjour,

regarde si cela ne vient pas tout simplement du nom de ta colonne 'lien-fiche'.
A mon avis il vaudrait mieux 'lien_fiche'

Salut
a bientôt

Posté : 02 mars 2009, 16:38
par Ryle
Attention à ta syntaxe si tu spécifies le noms des colonnes... les apostrophes servent à délimiter des chaines en SQL, pas les noms des colonnes. Il ne faut pas écrire :

Code : Tout sélectionner

INSERT INTO incidents ( 'num_fiche', 'lien-fiche', 'date_icdt', ... ) VALUES ('', '', '24/02/2009' ...)
mais

Code : Tout sélectionner

INSERT INTO incidents ( num_fiche, lien-fiche, date_icdt, ... ) VALUES ('', '', '24/02/2009' ...)
Attention également au format de tes champ. Si le champ date_icdt est de type date, il faut respecter le format de celui-ci (par défaut sous MySQL : AAAA-MM-JJ)