Probleme de gestion de 3 tables

Eléphant du PHP | 388 Messages

24 oct. 2008, 12:59

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.
je te remercie pour ta réponse j'ai fait comme tu m'a dit, j'ai placer dans chacune de mes tables ( entree, plat, dessert) un champs nommée repas cependant cela me crée toujours le meme problème.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 oct. 2008, 17:42

Tu n'as pas compris, tu as ajouté un champ aux 3 tables que tu as fait. En fait ce champ sert justement à ne plus faire qu'une unique table au lieu de 3.

Eléphant du PHP | 388 Messages

24 oct. 2008, 18:53

Oki mais pour mon reperage je préfererai garder trois tables je trouve sa plus lisible pour moi lol ( je c'est je me complique la vie lol )

J'ai peut etre trouver une solution comme je tes dit dans chaque une de mes tables j'ai rajouté un champs nommé repas alors en modifiant mon code comme cela sa devrai marché

Code : Tout sélectionner

<?php if(($_GET['repas']) == "entree") { $msg = "repas : " . $_GET['repas'] . "<br>" . "nomentree : " . $_GET['nomentree'] . "<br>" . "description : " . $_GET['description']; $repas = $_GET['repas']; $nomentree = $_GET['nomentree']; $description = $_GET['description']; echo $msg; $query1 = 'INSERT INTO entree (repas, nomentree, description) VALUES("'.$nomentree.'", "'.$nomentree.'", "'.$description.'")'; mysql_query($query1) or die ('Erreur SQL:<br />'.mysql_error()); $entree = mysql_insert_id(); }
mais le probleme j'ai un soucis a présent avec la ligne

. "nomentree : " . $_GET['nomentree'] . "<br>"

et

$nomentree = $_GET['nomentree'];

mais la ponctuation est bonne il me semble ?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 oct. 2008, 19:28

En principe pour ton cas une table est amplement suffisant. Quitte à faire, optimise au lieu de laisser 3 tables. Tu verras que c'est aussi simple avec une table.

Si tu gardes 3 tables, il est inutile de mettre le champ dont j'ai parlé.

Concernant ton souci, tu as sans aucun doute fait une erreur entre les noms de tes champs et ceux de la base.

En gros, chaque champ de formulaire a un nom défini par "name". Tu récupères la valeur grâce à ça avec $_POST['nom_du_champ']. C'est cette valeur que tu dois intégrer dans la base.

Je considère que tu as par exemple comme nom de champ :
- nom_plat
- description

et comme nom pour ta table BDD
- nom
- desc

Ton INSERT devra ressembler à
query1 = 'INSERT INTO dessert(nom, desc) VALUES("'.$_POST['nom_plat'].'", "'.$_POST['description'].'")';
Edit : Tu as gardé la méthode GET...prend la méthode POST puisque c'est un formulaire.

Eléphant du PHP | 388 Messages

24 oct. 2008, 21:49

mais comme j'ai expliquer precedement ( dernier post ) cela n'est til pas possible avec ce code ?

sinon suivant ta reponse tout est bien paramétrer je ne vois pas le probleme

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 oct. 2008, 22:16

Bon si tu persistes à garder ton code c'est ton choix.

Tu as 3 champs que tu récupères avec :
$_GET['repas']
$_GET['nomentree']
$_GET['description']

Dans ta page de traitement il te suffit de jouer avec les IF.
$repas=$_GET['repas'];
$nomentree=$_GET['nomentree'];
$description=$_GET['description'];

if($repas=="entree")
{
	//requête
	$query1 = 'INSERT INTO entree(nom, description) VALUES("'.$nomentree.'", "'.$description.'")';
}
elseif($repas=="suite")
{
	//requête
	...etc
}
...etc

Eléphant du PHP | 388 Messages

24 oct. 2008, 22:52

Bon si tu persistes à garder ton code c'est ton choix.

Tu as 3 champs que tu récupères avec :
$_GET['repas']
$_GET['nomentree']
$_GET['description']

Dans ta page de traitement il te suffit de jouer avec les IF.
$repas=$_GET['repas'];
$nomentree=$_GET['nomentree'];
$description=$_GET['description'];

if($repas=="entree")
{
	//requête
	$query1 = 'INSERT INTO entree(nom, description) VALUES("'.$nomentree.'", "'.$description.'")';
}
elseif($repas=="suite")
{
	//requête
	...etc
}
...etc

je suis entreint d'essayer avec les if cela me donne donc ceci

Code : Tout sélectionner

<?php require_once('./Connections/login.php'); ?> <? if(($_GET['repas']) == "entree") { $msg = "repas : " . $_GET['repas'] . "<br>" . "nomentree : " . $_GET['nomentree'] . "<br>" . "description : " . $_GET['description']; $repas = $_GET['repas']; $nomentree = $_GET['nomentree']; $description = $_GET['description']; if($repas=="entree") { //requête $query1 = 'INSERT INTO entree(nom, description) VALUES("'.$nomentree.'", "'.$description.'")'; } elseif($repas=="suite") { //requête $query1 = 'INSERT INTO suite(nom, description) VALUES("'.$nomsuite.'", "'.$description.'")'; } elseif($repas=="dessert") { //requête $query1 = 'INSERT INTO dessert(nom, description) VALUES("'.$nomdessert.'", "'.$description.'")'; } ?>
Comme y a toujours quelques chose pour bloquer sur le code j'ai une erreur sur la derniere ligne soit ?>

bizarre

Avatar du membre
ViPHP
ViPHP | 3008 Messages

24 oct. 2008, 23:04

Tu as un gros souci de compréhension. Relis bien tout ce qu'on t'a dit jusqu'à maintenant sans recopier sans comprendre.

Tu as combien de formulaires ? Un pour chaque table aussi ? Je ne le pense pas. Le champ "nomentree" est le nom que tu as donné toi-même dans ton formulaire pour le nom du plat.

Or dans le code que tu as remis je vois $nomentree, $nomsuite et $nomdessert, soit 3 valeurs pour un seul champ, impossible donc.

Comprend bien le rapport entre champs formulaire, valeurs récupérées et champs de ta table avant de continuer.

Eléphant du PHP | 388 Messages

26 oct. 2008, 12:45

Finalement tu as raison je vais crée une seul table comme cela le code sera surement plus simple

En clair la base va s'appeler recettes, la table je l'appelle repas
si j'ai bien compris je crée 3 champs soit
typerepas
nomrepas
descriptionrepas

je vais essayer sa toute suite mais je vois pas par ou commencer mdr :?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

27 oct. 2008, 11:18

On va reprendre doucement.

Tu as 3 valeurs différentes :
- le type (entrée, suite ou dessert)
- le nom de l'entrée, de la suite OU du dessert
- la description de l'entrée, de la suite OU du dessert

Dans ton formulaire tu as donc 3 sortes de champs :
1 : la liste déroulante pour le type, que tu nommeras par exemple type_plat.
2 : un champ text pour qu'on mette le nom, que tu nommeras par exemple nom_plat.
3 : un textarea pour la description, que tu nommeras par exemple desc_plat.

Lorsque tu envois ce formulaire vers ta page de traitement, tu récupères ces valeurs grâce à la méthode POST :
1 : $_POST['type_plat']
2 : $_POST['nom_plat']
3 : $_POST['desc_plat']

Ce sont ces valeurs que tu intègres dans ta table.

Donc pour tes requêtes ensuite, tu peux identifier très facilement le type grâce au champ type_plat.

Tu comprends mieux ?

Eléphant du PHP | 388 Messages

31 oct. 2008, 15:46

donc me revoila lol donc

sa ne passe toujours pas j'ai une erreur a la fin de mon code

donc la base s'appelle : recettes
la table se nomme : repas

et dans ma table j'ai c'est champs :
typerepas soit ( entrée, suite, dessert )
nomrepas soit( le titre du repas )
descriptionrepas soit pour la description

voici mon code

Code : Tout sélectionner

<?php require_once('./Connections/login.php'); ?> <?php if(($_GET['typerepas']) == "entree") { $msg = "typerepas : " . $_GET['typerepas'] . "<br>" . "nomrrepas : " . $_GET['nomrepas'] . "<br>" . "descriptionrepas : " . $_GET['descriptionrepas']; $typerepas = $_GET['typerepas']; $nomrepas = $_GET['nomrepas']; $descriptionrepas = $_GET['descriptionrepas']; { //requête $query1 = 'INSERT INTO repas(typerepas, nom, description) VALUES("'.$nomentree.'", "'.$nomentree.'", "'.$description.'")'; } ?>
je débute alors je mit prend peut etre mal :oops:


merci pour tout

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 oct. 2008, 15:57

Tu débutes mais il faudrait prendre en compte ce que je te dis si tu veux corriger ton code. Si tu passes outre les corrections, je ne vois pas trop pourquoi continuer.

Je vais donc encore le dire une dernière fois. Tu passes par un FORMULAIRE, évite donc d'utiliser la méthode GET et prend le POST (cf. mon message précédent).

Ensuite à quoi correspond if(($_GET['typerepas']) == "entree") { ? Il n'y a même pas d'accolade fermante pour ce IF. Pourquoi fais-tu encore une condition sur le type de repas ? Tu n'en a plus besoin maintenant.

C'est une insertion vraiment basique dans une table de 3 valeurs de formulaire dans 3 champs d'une table.
'INSERT INTO repas(typerepas, nom, description) VALUES("'.$nomentree.'", "'.$nomentree.'", "'.$description.'")'
Tu insères $nomentree dans typerepas...? :shock:

Le pire, tu déclares :
$typerepas = $_GET['typerepas'];
$nomrepas = $_GET['nomrepas'];
$descriptionrepas = $_GET['descriptionrepas'];

et regarde ce que tu intègres dans tes champs ! Dis moi seulement où tu trouves $nomentree et $description...un peu de logique.

Eléphant du PHP | 388 Messages

31 oct. 2008, 16:37

sa y'est mon probleme est résolu

cependant lorsque je remplace les get pas les post sa marche pas bizare

voici le code qui est OK

Code : Tout sélectionner

<?php require_once('./Connections/login.php'); ?> <? $msg = "typerepas : " . $_GET['typerepas'] . "<br>" . "descriptionrepas : " . $_GET['descriptionrepas'] . "<br>" . "nomrepas : " . $_GET['nomrepas']; $typerepas = $_GET['typerepas']; $descriptionrepas = $_GET['descriptionrepas']; $nomrepas = $_GET['nomrepas']; echo $msg; ?> <? $query1 = "INSERT INTO repas SET typerepas ='$typerepas', descriptionrepas ='$descriptionrepas', nomrepas ='$nomrepas'"; mysql_query($query1); $repas = mysql_insert_id(); ?>
je vais chercher pour les POST cependant
pour le champs description dans ma base je les mit en VARCHAR limite de caractere a 255 maximum cependant lorsque j'écrit une recette comprenant 4 lignes cela ne s'inscrit pas dans la base.
mais pour des petite commande cela marche est ce normal ?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 oct. 2008, 18:27

Tu as vérifié la méthode dans le <form> pour voir si c'est bien POST ?

255 caractères sont très vite arrivés, tes 4 lignes peuvent dépasser 255 caractères.

En plus si je rentre par exemple : "c'est une belle recette", ça ne marchera pas non plus étant donné que tu auras quote dans des quotes à l'intérieur de ta requête. Pour éviter ça : mysql_real_escape_string()

Eléphant du PHP | 388 Messages

01 nov. 2008, 10:20

y a t'il pas une solution ? qu'elle type utilise les forum pour que cela permettent d'avoir autant de caractère.
j'ai essayer egalement en TEXT la meme chose cela ne s'inscrit plus dans la base a partir d'un certain nombre de caracteres