Page 1 sur 3

Probleme de gestion de 3 tables

Posté : 22 oct. 2008, 12:04
par spidercrash
bonjour a tous j'ai un petit probleme et je ne sait pas ou sa cloche

Je vous explique mon probleme
J'ai trois tables

Entrée
Suite
Dessert

dans chaque tables j'ai 2 champs le nom et la description

cependant dans mon petit formulaire, j'ai placé un menu déroulant comprenant entree,suite,dessert

je souhaiterai lorsque le chef cuisinier "clac" sur un de ces titres celui ci inscrit bien dans la table désiré

voici le code de ma page index

Code : Tout sélectionner

<table width="0" height="0" border="0" align="center" cellpadding="2" cellspacing="0"> <form name="enregistrement" method="get" action="joinform.php"> <tr> <td align="right" width="250">Type de Plat</dt> <td align="left" width="250"> <form method="get"> <select name="repas"> <option value="entree">entree</option> <option value="suite">suite</option> <option value="dessert">dessert</option> </select></dt></tr> <tr> <td align="right" width="250">Nom Entree :</dt> <td align="left" width="250"><span class="saisie"><input name="nomentree" type="text" size=30></span></dt> </tr> <tr> <td align="right" width="250">Description de la recette : </dt> <td align="left" width="250"> <TEXTAREA name="description" rows=10 COLS=40></TEXTAREA> </dt> </tr> <tr> <td align="right" width="250"> <td><input type="submit" name="Submit" value="Envoyer"/> </td> </tr> </center> </form></table>
apres voici ma page de jointure

Code : Tout sélectionner

<?php require_once('./Connections/login.php'); ?> <? $msg = "nomentree : " . $_GET['nomentree'] . "<br>" . "description : " . $_GET['description']; $nomentree = $_GET['nomentree']; $description = $_GET['description']; echo $msg; ?> <? $query1 = "INSERT INTO entree SET nomentree ='$nomentree', description ='$description'"; mysql_query($query1); $entree = mysql_insert_id(); ?> <? $msg = "nomsuite : " . $_GET['nomsuite'] . "<br>" . "description : " . $_GET['description']; $nomsuite = $_GET['nomsuite']; $description = $_GET['description']; echo $msg; ?> <? $query1 = "INSERT INTO suite SET nomsuite ='$nomsuite', description ='$description'"; mysql_query($query1); $suite = mysql_insert_id(); ?> <? $msg = "nomdessert : " . $_GET['nomdessert'] . "<br>" . "description : " . $_GET['description']; $nomdessert = $_GET['nomdessert']; $description = $_GET['description']; echo $msg; ?> <? $query1 = "INSERT INTO dessert SET nomsuite ='$nomsuite', description ='$description'"; mysql_query($query1); $dessert = mysql_insert_id(); ?>
Quelqu'un petit til m'aider ou m'aiguiller merci d'avance
:(

Posté : 22 oct. 2008, 12:50
par crash
Bonjour,

Ton problème est très simple, en fait les variables $_GET que tu récupères pour pouvoir les insérer dans le premier champ de la BDD sont vide et incorrectes de plus tu veux remplir un champ mysql qui n'existe pas, les noms sont faux, tu dois récupérer la variable dans le name du select qui se nomme repas.

Ensuite, ton autre problème était que tu ne faisais pas de conditions donc toutes les données s'insérait dans les 3 tables :)

Voici la modification du fichier joinform.php
<?php require_once('./Connections/login.php'); ?>
<?php
if(($_GET['repas']) == "entree") {

$msg =
"nomentree : " . $_GET['repas'] . "<br>"
. "description : " . $_GET['description'];

$nomentree = $_GET['repas'];
$description = $_GET['description'];
echo $msg;

$query1 = "INSERT INTO entree SET nom ='$nomentree', description ='$description'";
mysql_query($query1);
$entree = mysql_insert_id();
}


if(($_GET['repas']) == "suite") {

$msg =
"nomsuite : " . $_GET['repas'] . "<br>"
. "description : " . $_GET['description'];
$nomsuite = $_GET['repas'];
$description = $_GET['description'];
echo $msg;


$query1 = "INSERT INTO suite SET nom ='$nomsuite', description ='$description'";
mysql_query($query1);
$suite = mysql_insert_id();
}


if(($_GET['repas']) == "dessert") {

$msg =
"nomdessert : " . $_GET['repas'] . "<br>"
. "description : " . $_GET['description'];

$nomdessert = $_GET['repas'];
$description = $_GET['description'];
echo $msg;


$query1 = "INSERT INTO dessert SET nom ='$nomdessert', description ='$description'";
mysql_query($query1);
$dessert = mysql_insert_id();
}
?>





De plus en ce qui concerne ta balise d'ouverture <? elle n'est pas correct prend le soin de toujours commencer un code php par la balise <?php :wink:

Posté : 22 oct. 2008, 17:54
par chrislabricole
Je te conseillerai d'écrire plutôt ça :
mysql_query(...) or die('Erreur SQL:<br/>'.mysql_error());
Comme ça MySQL t'affiche les erreurs que tu as pus commettre dans ta requête SQL...

Moi, JE PENSE, (après je n'ai pas essayer pour voir si ça marcher) que ta requête:

Code : Tout sélectionner

INSERT INTO entree SET nom ='$nomentree', description ='$description'
N'est pas bonne...
On ne met pas de SET avec un INSERT INTO... (je sais pas si c'est bon j'ai pas essayé hein :P)

Mets plutôt :
$query1 = 'INSERT INTO entree (nom, description) VALUES("'.$nomentree.'", "'.$description.'")';
C'est mieux ;)

Posté : 22 oct. 2008, 18:42
par crash
AH oui pardon, en effet j'ai pas fais attention au SET c'est évident :lol:

Posté : 22 oct. 2008, 19:44
par zeus
Moi, JE PENSE, (après je n'ai pas essayer pour voir si ça marcher) que ta requête:

Code : Tout sélectionner

INSERT INTO entree SET nom ='$nomentree', description ='$description'
N'est pas bonne...
On ne met pas de SET avec un INSERT INTO... (je sais pas si c'est bon j'ai pas essayé hein :P)
Les 2 syntaxes sont bonnes. La 1ère est plus facilement lisible, mais la seconde permet des insertions multiples ;)

Posté : 22 oct. 2008, 20:31
par spidercrash
merci pour les reponses cependant plus de message d'erreur impecable mais mes tables ne s'allimente plus

mon code et a présent cela
<?php require_once('./Connections/login.php'); ?>
<?php
if(($_GET['repas']) == "entree") {

$msg =
"nomentree : " . $_GET['repas'] . "<br>"
. "description : " . $_GET['description'];

$nomentree = $_GET['repas'];
$description = $_GET['description'];
echo $msg;


$query1 = 'INSERT INTO entree (nom, description) VALUES("'.$nomentree.'", "'.$description.'")'; 
mysql_query($query1);
$entree = mysql_insert_id();
}


if(($_GET['repas']) == "suite") {

$msg =
"nomsuite : " . $_GET['repas'] . "<br>"
. "description : " . $_GET['description'];
$nomsuite = $_GET['repas'];
$description = $_GET['description'];
echo $msg;


$query1 = 'INSERT INTO suite (nom, description) VALUES("'.$nomsuite.'", "'.$description.'")'; 
mysql_query($query1);
$suite = mysql_insert_id();
}


if(($_GET['repas']) == "dessert") {

$msg =
"nomdessert : " . $_GET['repas'] . "<br>"
. "description : " . $_GET['description'];

$nomdessert = $_GET['repas'];
$description = $_GET['description'];
echo $msg;


$query1 = 'INSERT INTO dessert (nom, description) VALUES("'.$nomdessert.'", "'.$description.'")'; 
mysql_query($query1);
$dessert = mysql_insert_id();
}
?> 
:?

Posté : 22 oct. 2008, 22:13
par chrislabricole
N'oublie pas de rajouter les
or die ('Erreur SQL:<br />'.mysql_error());
après ton mysql_query()
;)

Posté : 23 oct. 2008, 11:05
par Invité
j'ai bien suivi ton conseil donc cela me donne cela sur une partie du code
<?php 
if(($_GET['repas']) == "entree") { 

$msg = 
"nomentree : " . $_GET['repas'] . "<br>" 
. "description : " . $_GET['description']; 

$nomentree = $_GET['repas']; 
$description = $_GET['description']; 
echo $msg; 


$query1 = 'INSERT INTO entree (nom, description) VALUES("'.$nomentree.'", "'.$description.'")';  
mysql_query($query1); 
or die ('Erreur SQL:<br />'.mysql_error());
$entree = mysql_insert_id(); 
} 
cepedant a présent j'ai un message d'erreur sur la ligne ou j'ai rajouter ton code

pour information que signifie
or die ('Erreur SQL:<br />'.mysql_error());
l'affichage des erreur si il y en a ?

merci d'avance

Posté : 23 oct. 2008, 14:59
par charabia
mysql_query($query1);  
or die ('Erreur SQL:<br />'.mysql_error());
n'est pas correct
mysql_query($query1) or die ('Erreur SQL:<br />'.mysql_error());
Ca te donne en effet l'erreur SQL s'il y en a.

Posté : 23 oct. 2008, 18:34
par spidercrash
mysql_query($query1);  
or die ('Erreur SQL:<br />'.mysql_error());
n'est pas correct
mysql_query($query1) or die ('Erreur SQL:<br />'.mysql_error());
Ca te donne en effet l'erreur SQL s'il y en a.
merci sa marche j'ai put trouver mon erreur sauf que j'ai un autre soucis
lorsque je clic sur le menu deroulant et je choisi DESSERT dans titre je marque
chocolat liegois
et dans le champs description je met un descriptif

le hic c'est que quand je visualise ma table l'inscription se fait bien dans la table souhaité sauf que le titre du dessert ne s'affiche pas il me met juste dans le titre SUITE PLAT ou DESSERT

cela est du a cette ligne de code

Code : Tout sélectionner

$query1 = 'INSERT INTO dessert (nomdessert, description) VALUES("'.$nomdessert.'", "'.$description.'")'; mysql_query($query1) or die ('Erreur SQL:<br />'.mysql_error()); $dessert = mysql_insert_id();
le probleme viens de la dessert (nomdessert, description)

Car a la base il y avait nom ? mais nom ne figure dans ancun moment dans mon code

Dois je créer un table nom reprenant les noms de chaque table ?


je rapelle le code de mon menu déroulant

Code : Tout sélectionner

<tr> <td align="right" width="250">Type de Plat</dt> <td align="left" width="250"> <form method="get"> <select name="repas"> <option value="entree">entree</option> <option value="suite">suite</option> <option value="dessert">dessert</option> </select></dt></tr>
sinon si je laisse nom j'obtient le message d'erreur : Champ 'nom' inconnu dans field list

Posté : 23 oct. 2008, 18:57
par chrislabricole
Je te rappelle que :

Code : Tout sélectionner

INSERT INTO nom_de_la_table (nom_du_champ_1, nom_du_champ_2) VALUES("'.$variable_champ_1.'", "'.$variable_champ_2.'")
Donc ça veut dire que le champ "nom" n'existe pas dans ta table "dessert"...

Posté : 23 oct. 2008, 19:10
par spidercrash
Je te rappelle que :

Code : Tout sélectionner

INSERT INTO nom_de_la_table (nom_du_champ_1, nom_du_champ_2) VALUES("'.$variable_champ_1.'", "'.$variable_champ_2.'")
Donc ça veut dire que le champ "nom" n'existe pas dans ta table "dessert"...
je suis d'accord avec toi mes mon probleme c'est que lorsque a partir de mon menu deroulant je selectionne entrée plat ou dessert
et que si je choisi un dessert comment type de plat dans le menu déroulant que en en le champs nom du plat je tape chocolat et que dans le champs descriptif je tape chocolat au lait cela me met ceci dans ma table

message du get

nomdessert : dessert
description : chocolat au lait


dessert n'est pas le nom du plat mais le type du plat

vois tu se que je veut dire ?

:oops:

Posté : 23 oct. 2008, 19:28
par chrislabricole
je suis d'accord avec toi mes mon probleme c'est que lorsque a partir de mon menu deroulant je selectionne entrée plat ou dessert et que si je choisi un dessert comment type de plat dans le menu déroulant que en en le champs nom du plat je tape chocolat et que dans le champs descriptif je tape chocolat au lait cela me met ceci dans ma table
:-s Oula

Est-ce tu pourrais rajouter de la ponctuation à ton interminable phrase parce-que là...
Je sais pas si c'est moi mais j'ai rien compris :P

Posté : 23 oct. 2008, 19:46
par spidercrash
je suis d'accord avec toi mes mon probleme c'est que lorsque a partir de mon menu deroulant je selectionne entrée plat ou dessert et que si je choisi un dessert comment type de plat dans le menu déroulant que en en le champs nom du plat je tape chocolat et que dans le champs descriptif je tape chocolat au lait cela me met ceci dans ma table
:-s Oula

Est-ce tu pourrais rajouter de la ponctuation à ton interminable phrase parce-que là...
Je sais pas si c'est moi mais j'ai rien compris :P

oki escuse moi
je recommence lol
Mon probleme le voici :

Dans ma page index j'ai mon formulaire il comprend:
Un menu déroulant avec les choix suivants : entree, suite, dessert.

Ensuite une textbox nommée : NOM DU PLAT

Puis un seconde texbox nommée : Description

Le Cuisinier choisi dans le menu déroulant soit entree, suite ou dessert
apres il indique le nom de son plat puis une description de sa recette.

si je fait un test je choisi dans le menu déroulant le type de plat pour mon exemple se sera un dessert donc je choisi dessert.

en titre du plat je met chocolat, puis en description je marque chocolat au lait

Lorsque je valide mon plat l'enregistrement se place bien dans la table dessert sauf qu'au lieu d'avoir;
titre du plat : chocolat
description : chocolat au lait.

j'obtient ceci
titre du plat : dessert
description : chocolat au lait.

En faite dans titre du plat je n'obtient pas le nom de la recette mais le genre.

En esperant que j'ai etait plus précis :)

merci d'avance car je vois pas ou se trouve le HIC .

Posté : 23 oct. 2008, 23:18
par charabia
Si tu utilises un formulaire, utilises la méthode POST à la place de GET, tes variables ne seront ainsi pas visibles dans l'URL : <form method="post" action="">.

Tu utilises 3 tables différentes mais les champs sont quasiments identiques. C'est un peu dommage, tu peux rassembler le tout dans une seule table et rajouter juste un champ qui te permettra d'identifier le type : entrée, suite ou dessert.

<select name="repas">
<option value="entree">entree</option>
<option value="suite">suite</option>
<option value="dessert">dessert</option>
</select>

Donc dans ta table, en plus du nom du plat et la description, il te suffit d'ajouter "repas".

Tu te bases ensuite sur cette valeur pour faire les requêtes et récolter les données que tu voudras plus tard.