Probleme de gestion de 3 tables

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 : Probleme de gestion de 3 tables

par charabia » 01 nov. 2008, 13:02

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()
Tu as vérifié ça ?

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

par charabia » 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()

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

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

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

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

par spidercrash » 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 :?

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

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

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

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

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

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

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