Enregistrement défaillant

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 défaillant

par Arkonara » 03 mars 2009, 12:30

Loooooooooooooooooool rooooo le blaireau que je fait
scuse moi, jvais corriger tout sa de suite.

C'est bon, sa marche nikel, mon incident est bien enregistrer dans ma base
jte remercis vraiment
tu m'enleve une belle epingle du pied
si jamais jepeux t'être utile ( même si sa métonnerais ^^ ) hésite pas

jvais mappuyer sur skon vien de faire pour faire un formulaire de modification maintenant, en tout cas merci.

par yaug » 03 mars 2009, 12:28

Normal..
Car tu as copié collé en dur ce que je t'ai mis.
Du coup tu tente d'insérer 'Ressource id #4' :D

Pense à remettre tes variables comme valeur dans le insert.

par Arkonara » 03 mars 2009, 12:25

ha c'est la premiere fois que je vois ce type de quote dans mysql
dans mes autre formulaires d'enregistrement j'utilise des quotes "normale" et cela fonctionne pourtant, enfin bref.....

Voici un ti récapitulatif de mon ccode qui as deja pas mal changer depuis tout a lheure
<?php
	require_once('../connexion.php');
	if ($db)
	{
		
		if(isset($_POST['enregistrer']))
		{
			//allocation des variables
			//$numFiche="";
			$LienFiche="";
			$dateicdt=$_POST['AnotherDate'];
				$date = preg_replace('/^(.{2})\/(.{2})\/(.{4})$/','$3-$2-$1', $dateicdt);
			$heuricdt=$_POST['heure_icdt'];
			$desicdt=$_POST['descrip_icdt'];
			$desresol="";
			$dateresol="";
			$heuresol="";
			$inter="";
			$observ=$_POST['observation'];
			$motifreouv="";
			$teamtrack="";
			$remarqueresp="";
			$majeur=$_POST['choix'];
			$impactsocietaire=$_POST['choix2'];
			$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);*/
				
				//Execution de ta requete, cela te renvoi une ressource 
				$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';";  
				$rsc = mysql_query($query);   
				//Transformation de la ressource en résultat, tu pourras alors l'exploiter 
				$result = mysql_fetch_assoc($rsc);  
				//Exploitation du résultat 
				$numemployer = $result['NumEmploye'];
			$prestataire=$_POST['lstPrestataire'];
				
			 
			/*$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', 'ImpactSocietaire','CodeMateriel','CodeSecteur','CodeStatutIncident','CodeStatutProd','NumEmploye','CodePrestataire') VALUES('$numFiche','$LienFiche','$dateicdt','$heuricdt','$desicdt','$desresol','$dateresol','$heuresol','$inter','$observ','$motifreouv','$teamtrack','$remarqueresp','$majeur','$impactsocietaire', '$matereiel','$secteur','$staticdt','$statuprod','$numemployer','$prestataire')";
			echo $query;
			$result= mysql_query($query) or die(mysql_error());*/
			$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`, `ImpactSocietaire`,`CodeMateriel`,`CodeSecteur`,`CodeStatutIncident`,`CodeStatutProd`,`NumEmploye`,`CodePrestataire`) VALUES('','','03/03/2009','','Gofioprj oîthj rtzj$prj hpo','','','','','','','','','2','', '4','0003','OUV','PDE','Resource id #4','EXTXE')";
			/*$query ="INSERT INTO incidents SET 
			'lien_fiche' = '$LienFiche', 
			'date_icdt' = '$date', 
			'heure_icdt' = '$heuricdt', 
			'descrip_icdt' = '$desicdt', 
			'descrip_resol' = '$desresol', 
			'date_resol' = '$dateresol', 
			'heure_resol' = '$heuresol', 
			'Intervenant' = '$inter', 
			'observation' = '$observ', 
			'motif_r_icdt' = '$motifreouv', 
			'num_teamtrack' = '$teamtrack', 
			'remarque_resp' = '$remarqueresp', 
			'icdt_majeur' = '$majeur', 
			'ImpactSocietaire' = '$impactsocietaire', 
			'CodeMateriel' = '$matereiel', 
			'CodeSecteur' = '$secteur', 
			'CodeStatutIncident' = '$staticdt', 
			'CodeStatutProd' = '$statuprod', 
			'NumEmploye' = '$numemployer', 
			'CodePrestataire' = '$prestataire' 
			)"; */
			$result= mysql_query($query) or die(mysql_error()); 
			echo'L\'incident souhaiter a bien été renseigner !!';
		}
		else
		{
			echo 'Aucune donnée transmise au formulaire';
		}
	}
	else
	{
		'Problème à la connexion';
	}
?>
Il m'affiche une erreur comme quoi j'ai une contrainte de clef etrangere pas bonne

Code : Tout sélectionner

Cannot add or update a child row: a foreign key constraint fails (`incidents_editiques/incidents`, CONSTRAINT `fk_Employer` FOREIGN KEY (`NumEmploye`) REFERENCES `employer` (`NumEmploye`))

par yaug » 03 mars 2009, 12:18

bon.
C'est bien ce que je pensais.

Lors de ton insertion, les noms des champs ne doivent pas être entouré par une simple quote mais par une anti quote => `
C'est le caractère de protection de mysql.

Tu auras donc quelque chose dans le genre :

Code : Tout sélectionner

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`, `ImpactSocietaire`,`CodeMateriel`,`CodeSecteur`,`CodeStatutIncident`,`CodeStatutProd`,`NumEmploye`,`CodePrestataire`) VALUES('','','03/03/2009','','Gofioprj oîthj rtzj$prj hpo','','','','','','','','','2','', '4','0003','OUV','PDE','Resource id #4','EXTXE')
ATTTENTION !!!!
jusqu'à maintenant tu faisais ton insertion sur le champ "lien-fiche" et non sur le champ "lien_fiche".

J'ai testé sur mon serveur, cela fonctionne. :wink:

par Arkonara » 03 mars 2009, 12:06

il m'a juste enlever mon numFiche de mon message mais l'erreur reste la même pour les autres champs

aussi je dois t'informer que j'ai ajouter
$date = preg_replace('/^(.{2})\/(.{2})\/(.{4})$/','$3-$2-$1', $dateicdt);
afin de mettre ma date au même format que ma base le prevoit

par yaug » 03 mars 2009, 12:03

hum.
Enlève l'insertion de 'num_fiche' pour voir.
Étant donné que ce champ est auto incrémenté, tu n'as pas besoin de le mettre.

par Arkonara » 03 mars 2009, 12:01

Ok jte remerci, oui tkt ton explication etait tres clair.

j'ai donc apporter les modification que tu ma données et le message dd'erreur est

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' = '2009-03-03', ' at line 2

je ne comprend pas pourquoi il beugue sur ces valeures la et pas les autres

par yaug » 03 mars 2009, 11:57

Alors...
Pour le moment tu fais ceci :
$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';";
$numemployer=mysql_query($query); 
Mais cela n'est pas correcte.
mysql_query() exécute une requête et renvoi une ressource (un objet qui sera utilisé par le gestionnaire interne pour renvoyer le résultat).
C'est cette ressource que tu dois transformer pour pouvoir l'utiliser.
Pour le moment... tu utilise directement la ressource... ce qui te donne dans ton insertion : "'Resource id #4'"

C'est une erreur classique lorsque l'on débute.
Si tu as du mal, n'hésite pas à regarder les exemples sur php.net.
Notamment cette page

Voici ce qu'il faut faire pour obtenir ce que tu veux.
//Execution de ta requete, cela te renvoi une ressource
$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';"; 
$rsc = mysql_query($query);  

//Transformation de la ressource en résultat, tu pourras alors l'exploiter
$result = mysql_fetch_assoc($rsc); 

//Exploitation du résultat
$numemployer = $result['NumEmploye']

J'espère avoir été clair dans mon explication.

par Arkonara » 03 mars 2009, 11:48

Je ne comprend pas cette partie la
$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';"; 
$rsc = mysql_query($query);  
$result = mysql_fetch_assoc($rsc); 
$numemployer = $result['NumEmploye'] 

par yaug » 03 mars 2009, 11:22

Bon écoute.
pour le moment.. je ne vois pas.
Cela doit pourtant être évident.

Essaye de faire ton insertion comme ceci plutot :
$query ="INSERT INTO incidents SET
'num_fiche' = '$numFiche',
'lien-fiche' = '$LienFiche',
'date_icdt' = '$dateicdt',
'heure_icdt' = '$heuricdt',
'descrip_icdt' = '$desicdt',
'descrip_resol' = '$desresol',
'date_resol' = '$dateresol',
'heure_resol' = '$heuresol',
'Intervenant' = '$inter',
'observation' = '$observ',
'motif_r_icdt' = '$motifreouv',
'num_teamtrack' = '$teamtrack',
'remarque_resp' = '$remarqueresp',
'icdt_majeur' = '$majeur',
'ImpactSocietaire' = '$impactsocietaire',
'CodeMateriel' = '$matereiel',
'CodeSecteur' = '$secteur',
'CodeStatutIncident' = '$staticdt',
'CodeStatutProd' = '$statuprod',
'NumEmploye' = '$numemployer',
'CodePrestataire' = '$prestataire'
)";
$result= mysql_query($query) or die(mysql_error()); 
et au passage.. tu fais :
$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';";
$numemployer=mysql_query($query); 
Tu utilise directement la requete.. et non son résultat.
Fais plutot ceci :
$query="SELECT NumEmploye FROM employer WHERE Nom='".$declarant."';";
$rsc = mysql_query($query); 
$result = mysql_fetch_assoc($rsc);
$numemployer = $result['NumEmploye']

par Arkonara » 03 mars 2009, 11:11

Structure de ma table

Code : Tout sélectionner

-- -- Structure de la table `incidents` -- CREATE TABLE `incidents` ( `num_fiche` int(11) NOT NULL auto_increment, `lien_fiche` varchar(7) default NULL, `date_icdt` date NOT NULL, `heure_icdt` varchar(7) NOT NULL, `descrip_icdt` varchar(500) NOT NULL, `descrip_resol` varchar(500) default NULL, `date_resol` date default NULL, `heure_resol` varchar(7) default NULL, `Intervenant` varchar(50) NOT NULL, `observation` varchar(500) default NULL, `motif_r_icdt` varchar(500) default NULL, `num_teamtrack` varchar(4) default NULL, `remarque_resp` varchar(500) default NULL, `icdt_majeur` tinyint(1) NOT NULL, `ImpactSocietaire` tinyint(1) NOT NULL, `CodeMateriel` int(11) NOT NULL, `CodeSecteur` varchar(4) NOT NULL, `CodeStatutIncident` varchar(3) NOT NULL, `CodeStatutProd` varchar(3) NOT NULL, `NumEmploye` varchar(6) NOT NULL, `CodePrestataire` varchar(5) NOT NULL, PRIMARY KEY (`num_fiche`), KEY `fk_Employer` (`NumEmploye`), KEY `fk_Prestataire` (`CodePrestataire`), KEY `fk_Secteur` (`CodeSecteur`), KEY `fk_StatutIncident` (`CodeStatutIncident`), KEY `fk_StatutProd` (`CodeStatutProd`), KEY `fk_Materiel` (`CodeMateriel`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; -- -- Contenu de la table `incidents` -- INSERT INTO `incidents` VALUES (1, NULL, '2009-02-05', '09 h 30', 'plus de papiers', 'ajout de papiers', '2009-02-05', '10 h 00', 'XEROX', NULL, NULL, NULL, NULL, 0, 0, 1, '0001', 'FER', 'PNO', '00001x', 'INTMA'); INSERT INTO `incidents` VALUES (2, '1', '2009-02-18', '10 h 30', 'Machine en panne', 'Rebrancher la machine', '2009-02-18', '11 h 00', 'CROLET', 'La machine était débranchée', NULL, NULL, 'C''est limite quand même !!', 0, 0, 6, '0003', 'FER', 'PDE', '09042k', 'INTMA'); INSERT INTO `incidents` VALUES (3, NULL, '2009-02-18', '11 h 15', 'Blablablabla blablablablabla bla blabla blablablablablablablablabla blablabla bla blablablablabla bla ', 'Blablablavbla bla bla bla blablablablabla blabla blablablablabla bla', '2009-02-18', '11 h 45', 'TOTO', 'Blabla bla blablablablabla blablabla blablablablablablabla blablabla blablablabla bla', NULL, NULL, 'Blablablabla blablablabla blablabla blabla blablablablablablablablablablablablablablablabla bla bla bla blablabla ', 1, 0, 29, '0006', 'FER', 'PBL', '00011x', 'EXTOC'); INSERT INTO `incidents` VALUES (4, NULL, '2009-01-27', '10 h 30', 'Aaaaaaaaaa aaaaaa aaaa', 'Aaaaaaaa aaaaaaaaaa aaaaaa', '2009-01-28', '10 h 30', 'Aaaaaaaa', 'Aaaaaaaaaaa aaaaaaaaa', NULL, NULL, NULL, 1, 1, 29, '0006', 'FER', 'PBL', '10697m', 'INTMA'); INSERT INTO `incidents` VALUES (5, NULL, '2008-12-07', '10 h 30', 'Aaaaaaa aaaaaaa aaaaa', 'Aaaaaaaaaaaa aaaaaaaaaaaa ', '2008-12-07', '11 h 00', 'Aaaaaaaa', NULL, NULL, NULL, NULL, 1, 0, 8, '0005', 'FER', 'PBL', '00001x', 'EXTAL'); INSERT INTO `incidents` VALUES (6, NULL, '2009-01-01', '10 h 30', 'Zkjbz boblnpmnp bmnù', 'Zkjbguiohb iueb iub', '2009-01-01', '11 h 00', 'Aaaaaaaaaa', 'Aiubvou objr pojyohkrk', NULL, NULL, NULL, 0, 0, 8, '0002', 'FER', 'PNO', '00009s', 'INTMA');

et voici le resultat du echo $query;

Code : Tout sélectionner

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', 'ImpactSocietaire','CodeMateriel','CodeSecteur','CodeStatutIncident','CodeStatutProd','NumEmploye','CodePrestataire') VALUES('','','03/03/2009','','Gofioprj oîthj rtzj$prj hpo','','','','','','','','','2','', '4','0003','OUV','PDE','Resource id #4','EXTXE')

par yaug » 03 mars 2009, 11:07

Peut tu donner le schéma de la table et faire un echo $query avant de l'éxécuter ?
Merci

par Arkonara » 03 mars 2009, 11:03

Je viens d'ajouter une boucle afin de savoir si je transmettai bien les données

<?php
	require_once('../connexion.php');
	if ($db)
	{
		
		if(isset($_POST['enregistrer']))
		{
			//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'];
			$impactsocietaire=$_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 ('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', 'ImpactSocietaire','CodeMateriel','CodeSecteur','CodeStatutIncident','CodeStatutProd','NumEmploye','CodePrestataire') VALUES('$numFiche','$LienFiche','$dateicdt','$heuricdt','$desicdt','$desresol','$dateresol','$heuresol','$inter','$observ','$motifreouv','$teamtrack','$remarqueresp','$majeur','$impactsocietaire', '$matereiel','$secteur','$staticdt','$statuprod','$numemployer','$prestataire')";
			$result= mysql_query($query) or die(mysql_error());
			echo'L\'incident souhaiter a bien été renseigner !!';
		}
		else
		{
			echo 'Aucune donnée transmise au formulaire';
		}
	}
	else
	{
		'Problème à la connexion';
	}
?>

le resultat est le suivant

Code : Tout sélectionner

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_resol'' at line 1

par yaug » 03 mars 2009, 10:52

hum...
Déjà, as tu essayé de voir où se situait le problème ?
As tu fais quelques echo bien placés pour voir les résultats obtenus, voir si tu rentrais bien dans le if ?

Autant commencer par du déboguage simple :wink:
Cela permet souvent de trouver son problème tout seul.

Enregistrement défaillant

par Arkonara » 03 mars 2009, 09:21

Bonjour à tous,
Mon problème est le suivant :
J'ai un formulaire d'enregistrement qui permet a l'utilisateur de mon application de saisir des données, mais lorsque l'utilisateur appui sur le bouton ( submit ) enregistrer, l'enregistrement dans ma base ne s'effectue pas.

Voici mon code qui est censer me permettre l'enregistrement:
<?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'];
		$impactsocietaire=$_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 ('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', 'ImpactSocietaire','CodeMateriel','CodeSecteur','CodeStatutIncident','CodeStatutProd','NumEmploye','CodePrestataire') VALUES('$numFiche','$LienFiche','$dateicdt','$heuricdt','$desicdt','$desresol','$dateresol','$heuresol','$inter','$observ','$motifreouv','$teamtrack','$remarqueresp','$majeur','$impactsocietaire', '$matereiel','$secteur','$staticdt','$statuprod','$numemployer','$prestataire')";
		$result= mysql_query($query) or die(mysql_error());
		echo'L\'incident souhaiter a bien été renseigner !!';
	}
	else
	{
		'Problème à la connexion';
	}
?>
PS: En espérant que vous serez me venir en aide
Cordialement