Enregistrement dans bdd mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Enregistrement dans bdd mysql

par Ryle » 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)

par leclaude » 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

par Arkonara » 24 févr. 2009, 16:25

merci pour la petite explication

par stopher » 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.

par Arkonara » 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]

par stopher » 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

par Arkonara » 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 '' ?

par stopher » 24 févr. 2009, 15:45

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

par Arkonara » 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ù !! :?

par stopher » 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 ?

par Arkonara » 24 févr. 2009, 15:21

elles ne sont pas obligatoire, dans le cas ou tu met les veleurs dans le bon ordre

par stopher » 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.

Enregistrement dans bdd mysql

par Arkonara » 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