begin process at 2012 05 31 00:26:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

insertion données formulaire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

insertion données formulaire

dimanche 16 août 2009 à 15:51:18 | insertion données formulaire

adomaths

Bonjour,

Je débute en PHP/MySQL et je m'arrache les cheveux depuis 24h, là j'ai vraiment besoin d'un coup de pouce SVP.
Dans mon script j'ai trois requêtes pour insérer des données issues d'un formulaire dans trois tables (qui sont reliées au passage, avec InnoDB).
problème : il n'y a que la première table (la seule sans clé étrangère) qui est remplie. Les deux autres requêtes ne marchent pas pourtant je ne pense pas avoir fait de faute dans la syntaxe :
$id_client="\N";
$id_comm="\N";
$id_cours="\N";
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$classe=$_POST['classe'];
$adresse=$_POST['adresse'];
$cp=$_POST['cp'];
$ville=$_POST['ville'];
$email=$_POST['email'];
$date_cours=$_POST['date_cours'];
$deb_cours=$_POST['deb_cours'];
$fin_cours=$_POST['fin_cours'];
$date=date("l d F Y H:i:s ");
//requête SQL
$idcom=connex('adomaths','param');
$requete1="INSERT INTO client VALUES('$id_client','$nom','$prenom','$classe','$adresse','$cp',
'$ville','$email')";
$result1=mysql_query($requete1,$idcom);
$requete2="INSERT INTO commande VALUES('$id_comm','$id_client','$date')";
$result2=mysql_query($requete2,$idcom);
$requete3="INSERT INTO cours VALUES('$id_cours','$id_comm','$date_cours','$deb_cours','$fin_cours')";
$result3=mysql_query($requete3,$idcom);
mysql_close($idcom);

Tout éclairage est le bienvenu, merci pour votre aide :)

lundi 17 août 2009 à 21:20:00 | Re : insertion données formulaire

Bemale

J'ai une question quand à la provenance de $id_client,$id_comm et $id_cours.

Quelle est la structure de ta base (clés primaires), parce que les clés étrangères sur commande et cours sont visibles.
Sont elles en auto-incremente, sinon comment fais tu pour gérer leur unicité ?

lundi 17 août 2009 à 22:34:04 | Re : insertion données formulaire

adomaths

Salut, tout d'abord merci d'avoir répondu à mon message. J'ai fait un débuggage et il en ressort effectivement que le problème serait plus lié à la structure de la base.
La base en question est composée de trois tables : client, commande et cours, qui ont chacune pour clé primaire respectivement id_client, id_comm et id_cours. Chacune de ces clés est en auto-increment.
A mon avis le problème doit être lié à deux erreurs de débutant :
- le MLD peut être à revoir ;
- je ne sais pas comment utiliser les clés étrangères avec MySQL.
J'espère avoir apporté les éclairages dont tu avais besoin.

lundi 17 août 2009 à 23:48:32 | Re : insertion données formulaire

Bemale

Si les clés sont en auto increment, il vaut mieux laisser MySQL faire sa sauce avec les clés et on obtient

$requete1="INSERT INTO client (nom,prenom,classe,adresse,cp,ville,email) VALUES('$nom','$prenom','$classe','$adresse','$cp',
'$ville','$email')";
$result1=mysql_query($requete1,$idcom);
//On récupére le id_client inséré dans la table
$id_client=mysql_insert_id($idcom);

$requete2="INSERT INTO commande (id_client,$date) VALUES('$id_client','$date')";
$result2=mysql_query($requete2,$idcom);
//On récupére le id_comm inséré dans la table
$id_comm=mysql_insert_id($idcom);

$requete3="INSERT INTO cours (id_comm',date_cours,deb_cours,fin_cours) VALUES('$id_comm','$date_cours','$deb_cours','$fin_cours')";
$result3=mysql_query($requete3,$idcom);
//On récupére le id_cours inséré dans la table
$id_cours=mysql_insert_id($idcom);

J'ai utilisé ce type d'insert : INSERT INTO tbl_name (col1,col2) VALUES(15,2); afin que mysql sache ou ranger les données la 1°valeur dans le 1° champ, etc...

Pour être plus propre pour les chaines de caractères que tu reçois il faut les echapper, tu peux utiliser mysql_real_escape_string($_POST['nom'])
cette fonction va mettre les caractères d'échappement devant les simple cote par ex D'ABOVILLE en brut donnerait dans une requête non échappée INSERT INTO nom (nom) VALUES ('D'ABOVILLE') et là plantage.
Bon j'espère ne pas avoir été trop long, mais surtout de t'avoir été d'une petite aide.
PS : effectivement si le but de ces trois table est "un client fait une commande de x cours", sachant que le cours est unique le MLD n'est pas forcément judicieux, il faudrait dans ce cas une table de jointure (relation) COMMANDE_COURS -> id_comm,id_cours.

mardi 18 août 2009 à 15:09:09 | Re : insertion données formulaire

adomaths

salut,
j'ai bien repris le code que tu m'as suggéré malheureusement le résultat est le même, à savoir que seule la première requête est exécutée. J'ai l'impression que c'est lié aux champs id_client et id_comm (respectivement dans les tables commande et cours) que j'ai indexés et paramétrés en tant que FOREIGN KEY. Peut-être que les tables ne sont pas correctement reliées. Quelque soit le problème, voilà la structure de la base :

CREATE TABLE IF NOT EXISTS `client` (
`id_client` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`nom` varchar(25) NOT NULL,
`prenom` varchar(25) NOT NULL,
`classe` varchar(10) NOT NULL,
`adresse` varchar(100) NOT NULL,
`cp` mediumint(5) NOT NULL,
`ville` varchar(50) NOT NULL,
`email` varchar(70) NOT NULL,
PRIMARY KEY (`id_client`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `commande` (
`id_comm` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`id_client` mediumint(8) unsigned NOT NULL,
`date` varchar(50) NOT NULL,
PRIMARY KEY (`id_comm`),
KEY `id_client` (`id_client`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

CREATE TABLE IF NOT EXISTS `cours` (
`id_cours` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`id_comm` mediumint(8) unsigned NOT NULL,
`date_cours` varchar(8) NOT NULL,
`deb_cours` varchar(5) NOT NULL,
`fin_cours` varchar(5) NOT NULL,
PRIMARY KEY (`id_cours`),
KEY `id_comm` (`id_comm`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;

ALTER TABLE `commande`
ADD CONSTRAINT `commande_ibfk_1` FOREIGN KEY (`id_client`) REFERENCES `client` (`id_client`) ON DELETE CASCADE;

ALTER TABLE `cours`
ADD CONSTRAINT `cours_ibfk_1` FOREIGN KEY (`id_comm`) REFERENCES `commande` (`id_comm`) ON DELETE CASCADE;

Ca rend ce message un peu long du coup, mais j'ai quelques remarques à ajouter :
- pourquoi l'auto-increment des tables cours et commande n'est pas égal à 1 ?
- j'ai pas compris "il faudrait dans ce cas une table de jointure (relation) COMMANDE_COURS -> id_comm,id_cours. "
- pour être plus propre avec les chaînes de caractères je dois faire $nom=mysql_real_escape_string($_POST['nom']); ?
- enfin, MERCI pour tes explications bien formulées :) , tu serais pas prof des fois ?

mercredi 19 août 2009 à 21:40:48 | Re : insertion données formulaire

Bemale

Réponse acceptée !

J'ai essayé ce code chez moi sur PHP Version 5.3.0, Apache/2.2.11, MySQL 5.0.5 (EasyPHP 3.1)
Avec un petit formulaire. Ce code insère normalement dans les trois tables.
Il y avait une coquille dans la requête d'insertion de cours (une quote qui trainait).
J'ai rajouté un petit tips sur la création dynamique de variables.

// On ouvre la connexion avant pour pouvoir utiliser la fonction mysql_real_escape_string
$idcom=connex('adomaths','param');

/*
* Pour chaque valeur du tableau $_POST
* Array ( [nom] => MOTAIS [prenom] => Bemale [classe] => Seconde [adresse] => chez moi [cp] => 62000 [ville] => ARRAS...
* On crée la variable de la clé du tableau avec sa valeur respective
*/
foreach ($_POST as $nom_var => $valeur)
{
$$nom_var = mysql_real_escape_string($valeur);
}
$date=date("l d F Y H:i:s ");


//requête SQL
$requete1="INSERT INTO client (nom,prenom,classe,adresse,cp,ville,email) VALUES('$nom','$prenom','$classe','$adresse','$cp',
'$ville','$email')";
$result1=mysql_query($requete1,$idcom);
//On récupére le id_client inséré dans la table
$id_client=mysql_insert_id($idcom);

$requete2="INSERT INTO commande (id_client,date) VALUES('$id_client','$date')";
$result2=mysql_query($requete2,$idcom);
//On récupére le id_comm inséré dans la table
$id_comm=mysql_insert_id($idcom);


$requete3="INSERT INTO cours (id_comm,date_cours,deb_cours,fin_cours) VALUES('$id_comm','$date_cours','$deb_cours','$fin_cours')";
$result3=mysql_query($requete3,$idcom);
//On récupére le id_cours inséré dans la table
$id_cours=mysql_insert_id($idcom);

mysql_close($idcom);

Si ça ne fonctionne pas il va falloir faire un traçage. un echo des requête et une tentative d'execution sur PHPMYADMIN par exemple et voir si il ne renvoi pas une erreur.

mercredi 19 août 2009 à 22:26:47 | Re : insertion données formulaire

adomaths

Ca marche !!!
Tu es génial! J'ai pas bien compris ton code mais il fonctionne. J'ai encore beaucoup de choses à apprendre apparamment.
Merci, maître Yoda !



Cette discussion est classée dans : date, mysql, post, id, cours


Répondre à ce message

Sujets en rapport avec ce message

selection date actuelle [ par jmbabi ] Bonjour à tous Ma requete actuelle c'est :/*Création avec une requête table calendrier dont  les champs sont : ref, pre1, date1, pre2, date2, descr, l probleme requete mysql [ par ad102 ] bonjour, J'ai un grand besoin d'aide car je ne comprend pa ce qui se passe :j'ai un message d'erreur : Warning: mysql_db_query(): supplied argument Pb d'INSERT , aucune erreur retournée ... [ par Blasfem ] Salut à tous, J'ai un souci, je suis en trin de me former sur le PHP et ma page d'ajout ne fonctionne pas. Pourtant le code semble correct . ? inclu Problème de requete SQL [ par MrsDallara ] Bonjour à tous, j'ai une requete SQL qui ne s'execute pas, alors que je ne vois pas où l'erreur peut se trouver. Voici donc l'ensemble du code qui nou Probléme update visible et invisible???? [ par speedylol ] Bonjour voila un script que j ai crée , mais j ai un petit soucis avec , j'aimerais quand mon stock restant arrive a Zero de rendre mon produit invisi probléme udapte [ par speedylol ] Bonjour voici un petit script pour gérer mon stock mais j'aimerais changer la valeur du stock dans ma table??? et cela ne fonction pas??? je vois pas Erreur de syntaxe!!! [ par lebelm ] Bonjour, J'essaie de créé un form pour ajouter des users. Les infos du user dans une table et les privilèges dans l'autre, mais sa me donne une erreur Problème d'un script [ par stu76 ] Bonsoir,J'ai écris un petit script qui me permet d'afficher les élèves stocker dans une base de données. Mon prob est que l'affichage par classe fonct Vignettes cliquables avec photo taille différente ??? [ par Waynejunior ] Bonjour, je me permets d'écrire sur le forum parce que je ne sais plus trop quoi faire pour résoudre mon problème... J'ai une page php qui fait affich Pb avec $_GET [ par moon_00 ] Bonjour,


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales