Page 1 sur 1

Exécuter une requête selon la condition remplie

Posté : 08 févr. 2017, 17:23
par Conflux
Salut !
De retour sur le forum pour des conseils et de l'aide, j'ai maintenant besoin d'aide pour une situation !

En gros : j'ai un formulaire qu'on va appeler formulaire.php avec des textbox que les gens peuvent remplir, page liée à execution.php qui contiendra les requêtes.

New pdo etc... et j'aimerai faire en sorte d'executer une requête qui serait différente selon le résultat de la textbox, en gros :

Code : Tout sélectionner

<body></br> <h3><center><p>Renseigner une cartouche :</p></center></h3> <form name="insertion" action="formulaire.php" method="POST"> <table border="0" align="center" cellspacing="2" cellpadding="2"> <tr align="center"> <td id="TdBlur"><b>Référence</b></td> <td><input type="text" name="RefCartouches" class="textbox"></td> </tr> <tr align="center"> <td id="Td1"><b>Fournisseur</b></td> <td><input type="text" name="Fournisseur" class="textbox"></td> </tr> <tr> <td id="Td2"><b>Nombre de <font color="FF00FF">Magentas :</font></b></td> <td><input type="text" name="Magenta" class="textbox"></td> </tr> <tr align="center"> <td id="Td3"><b>Nombre de <font color="yellow">Jaunes :</font></b></td> <td><input type="text" name="Jaune" class="textbox"></td> </tr> <tr align="center"> <td id="Td4"><b>Nombre de <font color="cyan">Cyans :</font></b></td> <td><input type="text" name="Cyan" class="textbox"></td> </tr> <tr align="center"> <td id="Td5">Nombre de <b>Noires :</b></td> <td><input type="text" name="Noir" class="textbox"></td> </tr> <tr align="center"> <<td id="Td5">Nombre de <b>3 couleurs :</b></td> <td><input type="text" name="TrioCouleurs" class="textbox"></td> </tr> </tr> <tr align="center"> <td colspan="2"><input type="submit" value="insérer" class="myButton"></td> </tr> <tr align="center"> <td id="Td5">Localisation</td> <td><input type="text" name="Localisation" class="textbox"></td> </tr> </table>
Ca on va dire que c'est le formulaire.php

Code : Tout sélectionner

<?php try { // PDO // Logins $bdd = new PDO('mysql:host=localhost;dbname=root', 'root', 'root'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (Exception $e) { // Message erreur die('Erreur : ' . $e->getMessage()); } $tab = array( ':RefCartouche' => $_POST['RefCartouches'], ':Magenta' => $_POST['Magenta'], ':Jaune' => $_POST['Jaune'], ':Cyan' => (empty($_POST['Cyan']) ? NULL : $_POST['Cyan']), ':Noir' => $_POST['Noir'], ':TrioCouleurs' => $_POST['TrioCouleurs'] ':Localisation' => $_POST['Localisation']); //création de la requête update $sql = "UPDATE table set Magenta = Magenta + '".$_POST['Magenta']."', Jaune = Jaune + '".$_POST['Jaune']."', Cyan = Cyan + '".$_POST['Cyan']."', Noir = Noir + '".$_POST['Noir']."', TrioCouleurs = TrioCouleurs + '".$_POST['TrioCouleurs']."' where RefCartouches = '".$_POST['RefCartouches']."'"; $req = $bdd->prepare($sql); if ($req->execute($tab)) { echo '<center><h3>Insertion effective !</h3></center>'.'<center><h1><a href="reservation.php">Retour</a></h1></center>'; } else { echo 'Erreur d\'insertion : l\'insertion n\'est pas effective'; } // fermeture connexion if($bdd){ $bdd = NULL; }
En gros j'aimerai que selon le champ localisation (qui sera un futur choix via menu déroulant) la requête ira dans une table OU un autre, genre :

Code : Tout sélectionner

Si $post[Localisation] = Lune alors { executer UPDATE Lune set values = valuesPHP } Elseif $post[localisation] = Terre alors { executer UPDATE Terre set values = valuesPHP}

Donc si l'utilisateur rentre Lune dans localisation, ça exécutera la requête update pour la table Lune, et si il met terre, ça exécutera la requête update pour la table Terre.

Cela peut être confus mais je ne saurais pas l'expliquer autrement (je ne sais même pas comment le formuler pour google en anglais ou en français !)

Si y'a besoin de + d’éclaircissement, je ferai de mon mieux !

Merci et bonne soirée !

PS: Je ne m'y connais absolument pas en PHP, encore moins sur ses structures if avec les accolades dans tous les sens.
PS2: C'est un projet local, donc peu importe les injections SQL ou autre failles de sécurités, mise a part de fausses données il n'y aura rien a voler sur mon réseau maison !

Re: Exécuter une requête selon la condition remplie

Posté : 09 févr. 2017, 00:44
par kevin254kl
Bonjour,

Si j'ai bien compris ton champs localisation correspond à des tables? Tu as un exemple de ce que contiendra ton champ localisation? Si tu as une table par localisation et que tu as 5 trilliards de localisation tu vas faire 5 trilliards de tables? ta base de données ressemble à quoi tu as essayer de passer par un mcd avant?

Re: Exécuter une requête selon la condition remplie

Posté : 09 févr. 2017, 09:36
par Spols
Les questions de Kevin254kl sont pertinente, et ton modèle est probablement à revoir.

mais au niveau de ta requète, je vois quelques incohérence de code. tu utilise en même temps une concatènation de requète et une requète préparée. je te conseil de te limiter à la requète préparé
$tab = array(
':RefCartouche' => $_POST['RefCartouches'],
':Magenta' => $_POST['Magenta'],
':Jaune' => $_POST['Jaune'],
':Cyan' => (empty($_POST['Cyan']) ? NULL : $_POST['Cyan']),
':Noir' => $_POST['Noir'],
':TrioCouleurs' => $_POST['TrioCouleurs'],//il manquait une virgule ici
':Localisation' => $_POST['Localisation']);//il faut que localisation représente directement ton nom de table sinon il te faudra un tableau de correspondance

//création de la requête update


$sql = "UPDATE :Localisation set Magenta = Magenta + :Magenta, Jaune = Jaune + :Jaune, Cyan = Cyan + :Cyan, Noir = Noir + :Noir, TrioCouleurs = TrioCouleurs + :TrioCouleurs where RefCartouches = :RefCartouche";

$req = $bdd->prepare($sql);

if ($req->execute($tab)) {

Re: Exécuter une requête selon la condition remplie

Posté : 09 févr. 2017, 10:44
par Conflux
Bonjour !
Oui tout est probablement à revoir, j'ai c/c un code précédent car je n'ai pas encore vraiment codé celui ci.

En gros, on arrivera sur un formulaire à remplir, et dans la dernière partie on devra choisir où iront les cartouches.

Genre:
Cartouche XXYYZZ
3 magentas de cette référence
4 jaunes
2 cyans
5 noires
4 tricolores
<Bouton radio>A <Bouton Radio>B

soit on choisit la localisation A et ça va mettre la table du stock A, soit on choisit B et ça mettra le stock de la table B à jour (en gros ça sera un choix style radio-button plutôt qu'un champs menu déroulant) et du coup, si c'est le stock A qu'on choisit, ça exécutera une update sur la table A, si on choisit stock B, ça mettra a jour le stock B, un contrôle qui exécutera la requête selon le choix du champs en gros.

Pour ce qui est du moteur SQL, j'utilise MySQL 5.7 avec le workbench en tant qu'outil visuel.

Faire cette vérification de condition m'éviterai donc de faire 2 formulaire (un pour mettre a jour stock A et un autre pour Stock B, de même pour les futures suppressions)

Pour ce qui est des données en elle mêmes, j'ai actuellement deux tables semblables, une pour le stock A et une pour stock B, même champs, avec Refcartouche en clé primaire.

Merci pour l'aide !

Re: Exécuter une requête selon la condition remplie

Posté : 09 févr. 2017, 10:58
par Spols
Il serait beaucoup plus logique d'avoir un champs supplémentaire localisation et une seule table. tu pourra alors rentrer la localisation pour chaque ligne et faciliter les comparaison au besoin.