Enregistrement dans bdd mysql

Eléphant du PHP | 70 Messages

24 févr. 2009, 10:14

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

ViPHP
ViPHP | 1136 Messages

24 févr. 2009, 15:17

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.

Eléphant du PHP | 70 Messages

24 févr. 2009, 15:21

elles ne sont pas obligatoire, dans le cas ou tu met les veleurs dans le bon ordre
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

ViPHP
ViPHP | 1136 Messages

24 févr. 2009, 15:36

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 ?

Eléphant du PHP | 70 Messages

24 févr. 2009, 15:43

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ù !! :?
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

ViPHP
ViPHP | 1136 Messages

24 févr. 2009, 15:45

fais un echo de $query et donne nous ta requête construite par ton script

Eléphant du PHP | 70 Messages

24 févr. 2009, 15:50

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 '' ?
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

ViPHP
ViPHP | 1136 Messages

24 févr. 2009, 16:02

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

Eléphant du PHP | 70 Messages

24 févr. 2009, 16:09

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]
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

ViPHP
ViPHP | 1136 Messages

24 févr. 2009, 16:23

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.

Eléphant du PHP | 70 Messages

24 févr. 2009, 16:25

merci pour la petite explication
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

Petit nouveau ! | 5 Messages

02 mars 2009, 14:51

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mars 2009, 16:38

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)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...