Bonjour à tous...
Je developpe pour un usage perso une webappli 'menu' sur un serveur local pour gérer des aliments, recettes, menus et liste de course. Le but est d'établir un menu, constitué de recettes, elles même constituées d'aliments (ingrédients).
J'utilise plusieurs tables dont une menu_aliments, une menu_recettes et une menu_ingredients (qui reprend les id des aliments et des recettes).
Globalement ça se passe pas trop mal, sauf que, certains aliments peuvent être à la fois un ingrédient entrant dans la composition d'un recette (Kiwi pour faire une tarte par exemple) ou un ingrédient unique pouvant être une "recette" (manger un Kiwi comme dessert).
Aujourd'hui j'arrive à enregistrer l'aliment dans la table menu_aliments, j'arrive également à enregistrer l'aliment dans la table menu_recettes mais j'aimerai logiquement l'ajouter à la table menu_ingredients.
Le problème c'est qu'au moment de l'enregistrement de l'aliment dans ces 2 tables je ne connais pas encore les id respectifs (aliment + recette) pour les enregistrer dans menus_ingredients.
Je fais donc appel à une page de traitement extérieur, mais je n'arrive pas à lui transmettre les éléments nécessaires !
Questions :
Ou des variables globales ?
Voici mon code actuel :
require('+aliment_enregistrement2.php?nomaliment=' . echo $nomaliment . '&nomrecette=' echo $nomaliment');
Ne fonctionne pas non plus :
require("+aliment_enregistrement2.php?nomaliment=' . $nomaliment . '&nomrecette=' $nomaliment");
Merci d'avance pour votre aide !
Salut, tu ne peux pas inclure un fichier avec des paramètres, c'est impossible.
Ce que tu peux faire c'est mettre tes variables au même niveau que ton require :
$nomaliment = "banane" ;
require("+aliment_enregistrement2.php);
Ainsi si tu fais un
echo $nomaliment;
Dans ta page +aliment_enregistrement2.php tu obtiendras banane parce que $nomaliment est au même niveau que ton require.
En espérant t'avoir aidé.
Hugo
La page de traitement extérieur "+aliment_enregistrement2.php" :
?php
if (isset($_GET['nomaliment']) && isset($_GET['nomrecette'])) {
// Récupération de l'ID de l'aliment qui vient d'être inséré dans la base :
$requete4 = $bdd->prepare('SELECT aliment_id FROM menu_aliments WHERE aliment_nom = :nomaliment LIMIT 1');
// Exécution de la requête :
$requete4->execute(array('nomaliment' => $_GET['nomaliment'])) or die(print_r($requete4->errorInfo()));;
// Récupération de la réponse :
$reponse4 = $requete4->fetch();
$idaliment = $reponse4['aliment_id'];
// Récupération de l'ID de la recette qui vient d'être insérée dans la base :
$requete5 = $bdd->prepare('SELECT recette_id FROM menu_recettes WHERE recette_nom = :nomrecette LIMIT 1');
// Exécution de la requête :
$requete5->execute(array('nomrecette' => $_GET['nomrecette'])) or die(print_r($requete5->errorInfo()));;
// Récupération de la réponse :
$reponse5 = $requete5->fetch();
$idrecette = $reponse5['aliment_id'];
// Enregistement de l'aliment/recette dans la table ingrédients :
$requete6 = $bdd->prepare('INSERT INTO menu_ingredients (ingredient_recette_id, ingredient_idaliment , ingredient_q, ingredient_u) VALUES (recette, aliment, quantite, unite)');
$requete6->execute(array(
'recette' => $idrecette,
'aliment' => $idaliment,
'quantite' => 1,
'unite' => 'pièce'
)) or die(print_r($requete6->errorInfo()));
$requete4->closeCursor();
$requete5->closeCursor();
$requete6->closeCursor();
}
?>
Bonjour,
Pour votre require essaye ceci :
require('aliment_enregistrement2.php?nomaliment='.$nomaliment.'&nomrecette='.$nomaliment);
Pourquoi avez-vous mis un + avant le nom de la page ?
Merci à vous deux pour vos réponses...
Pourquoi avez-vous mis un + avant le nom de la page ?
C'est le nom de ma page, je fais toujours comme ça pour les enregistrements
et - pour les suppressions (ex : -aliment.php, -aliment2.php, +recette.php, +recette2.php...)
Ce n'est peut être pas une bonne habitude ?
require('aliment_enregistrement2.php?nomaliment='.$nomaliment.'&nomrecette='.$nomaliment);
Je ne suis pas devant mon code mais il me tarde d'essayer ta solution !
$nomaliment est au même niveau que ton require.
Ce qui veut dire que je peux même dans ma page traitement me passer de mon
if (isset($_GET['nomaliment']) && isset($_GET['nomrecette'])) {
si je suis au même niveau, il ne peut pas y avoir de problème de transmission
de variable alors ?
A ce moment, dois-je faire obligatoirement une page de traitement extérieur, je veux dire
est-ce propre de programmer comme ça ? Existe t-il un moyen d'obtenir les id que l'on
vient de créer sur la première page ?
seulement des lettres, chiffres et des _ ou - dans les noms de fichiers, tous les autres (meme espace) c'est pas conseillé (les points on peut aussi mais bon, ca c'est personnel je préfère qu'il en ait qu'un seul pour l'extension)
Pour les ajout suppress peut-être considérer de passer à du versionning git ? ca éviterait d'avoir autant de fichiers.
mettre c'est variable dans un require pour tenter de les récuperer par une superglobale GET....
Euh oui... ? Fumer c'est mal x)
En admettant que tu accèdes à cette page en envoyant déjà des variable en GET lorsque tu vas inclure un fichier à l'intérieur tu pourras avoir accès à ces variables. Et quand bien même une variable $potDeFleur qui est défini dans ton fichier principal, tu peux affichier celle-ci dans ton autre fichier SI et Seulement SI il est inclu à l'intérieur de ton fichier principal.
Fais le test avec une simple variable, n'essaye pas de coder tout ton script en une fois...
$reponse4 = $requete4->fetch();
$idaliment = $reponse4['aliment_id'];
euh... si tu ne sélectionnes qu'un seul enregistrement avec une seule colonne, pourquoi en faire un array avec fetch ?
Sinon je ne ferais pas de nouvelle page, dans ton code spaghetti ce serait un peu trop foutoir, de l'extérieur on ne saurait pas d'où cette page est appelée.
lorsque tu fais ton insert retourne une variable $succes = $requete->lastInsertId(); et tu auras ton ID
Bonne chance
J'ai essayé la méthode la plus simple, celle de hugopb82 :
echo $nomaliment; renvoit bien le nom de l'aliment qui vient d'être créé...
Le if dans la page de traitement n'est du coup plus utile car aucune variable
$_GET n'est transmise...
Merci kewai pour le nom de fichier, je vais en tenir compte et corriger mes noms
de pages .php et éviter les + et - dans les noms de fichiers.
Pour les ajout suppress peut-être considérer de passer à du versionning git ?
Ca je ne sais pas ce que c'est donc j'irai jeter un oeil pour voir si je peux m'en servir
pour mon petit projet.
mettre c'est variable dans un require pour tenter de les récuperer par une superglobale GET....Euh oui... ? Fumer c'est mal x)
ptdr ! J'essaie à ma sauce des trucs sans savoir si c'est correct. J'ai du mal à trouver
des cas concrets dans mes bouquins et sur le net qui correspondent pile poil à ce que je recherche.
si tu ne sélectionnes qu'un seul enregistrement avec une seule colonne, pourquoi en faire un array avec fetch ?
Justement, je ne sais pas comment avec PDO rechercher de manière sécurisée un seul enregistrement,
surtout si le critère de recherche est une variable. Partout on me dit que concaténer une variable dans ma requête
c'est mal ! Alors les exemples me renvoient vers des requêtes préparées avec des array que ce soit avec des marqueurs
? ou des marqueurs nominatifs...