-
Message publié le mardi 02 février 2010 - 15h36 par albius.
-
Bonjour,
J'ai un formulaire avec des noms de champs établis dynamiquement, et dont les valeurs proviennent d'une table
Code :
<td><input name="prod[]" type="text" id="prod[]" value="Fondant blanc" size="60" readonly>
<input name="idRecord[]" type="hidden" id="idRecord[]" value="1"></td>
<td><input name="qt[]" type="text" id="qt[]" value="15" size="5" readonly></td>
<td><input name="cout[]" type="text" id="cout[]" size="10"></td>
<td><input type="checkbox" name="tva[]" id="tva[]"></td>
L'utilisateur doit renseigner pour chaque ligne un cout global et valider par la suite.
Deux cas de figures après:
* Soit le produit existe une fois dans la table de la bdd, et s'effectue un simple 'update' de l'enregistrement avec le cout transmis par l'utilisateur
* Soit il existe plusieurs fois, et dans ce cas, je dois m'arranger pour redistribuer le cout en fonction de la quantité.
Mais c'est le premier point qui me préoccupe pour l'instant. Voici ce que j'ai fait jusqu'à présent:
Code :
foreach ($_POST['prod'] as $prod) {
// Combien de fois le produit est présent dans la table ?
$select = 'SELECT designation FROM compta WHERE designation= "'.$prod.'"';
$requete = mysql_query($select) or die('Erreur SQL!');
$nbre = mysql_num_rows($requete);
// S'il est présent qu'une seule fois
if($nbre == 1) {
// Je fais un "simple" update
$update= 'UPDATE `alimentaires`.`compta` SET `cout` = "'.$_POST['cout'].'"
WHERE `compta`.`idCompt` = "'.$_POST['idRecord'].'" LIMIT 1';
$requete1 = mysql_query($update) or die('Erreur SQL!');
}
// Sinon, j'effectue un calcul
elseif($nbre > 1) {
echo 'calcul<br>';
}
}
La requête de modification ne renvoie rien (lmais ça, je m'y attendais) d'où cette question : comment puis-je récupérer précisément les valeurs de $_POST['idRecord'] et de $_POST['cout'] dans cette boucle pour que la requête soit effective ?
merci,
-
Message publié le mardi 02 février 2010 - 20h02 par nours312.
nours312.com -- je ne suis pas codeur bénévol, mais j'aide gratos ;)
-
1. mets des clés réelles dans ton html
2. extrait la clés sr laquelle tu travail dans le
foreach($_POST['prod'] as $k => $prod){
echo $_POST['idRecord'][$k] ;
}
est-ce une bonne piste ?
-
Message publié le mercredi 03 février 2010 - 11h18 par albius.
-
Bonjour,
Par ce que tu entends par clefs réelles, ça serait par exemple 'prod1, prod2, qt1, qt2' etc. ? Et l'extraire avec quoi ? la fonction substr je suppose ?
merci,
-
Message publié le mercredi 03 février 2010 - 13h23 par nours312.
nours312.com -- je ne suis pas codeur bénévol, mais j'aide gratos ;)
-
nan, tu peux avoir des clés numériques, mais il faut que tous les éléments de la ligne aient les meme !....
ex :
<td><input name="prod[0]" type="text" id="prod[0]" value="Fondant blanc" size="60" readonly>
<input name="idRecord[0]" type="hidden" id="idRecord[0]" value="1"></td>
<td><input name="qt[0]" type="text" id="qt[0]" value="15" size="5" readonly></td>
<td><input name="cout[0]" type="text" id="cout[0]" size="10"></td>
<td><input type="checkbox" name="tva[0]" id="tva[0]"></td>
ensuite tu récupèrera en php des tableaux du style :
$_POST => array(
prod => array ( ValueLine0, ValueLine1, ...),
idRecord => array ( ValueLine0, ValueLine1, ...),
qt => array ( ValueLine0, ValueLine1, ...),
cout => array ( ValueLine0, ValueLine1, ...),
tva => array ( ValueLine0, ValueLine1, ...),
),
tu pourras donc bien en correspondance $_POST['prod'][0] et $_POST['qt'][0] par exemple !...
-
Message publié le mercredi 03 février 2010 - 15h04 par albius.
-
Merci nours312. Je vais étudier cela. Je laisse toutefois le post ouvert en cas de difficulté...
-
Message publié le mercredi 10 février 2010 - 17h30 par albius.
-
Bonsoir,
Je reviens à la charge sur ce post. Je n'arrive toujours à afficher ces satanés produits (ou autres)
J'ai écrit cela:
<code>foreach ($_POST as $key => $value) {
echo $_POST['prod'][$key];
}
print_r($_POST);
</code>
Et je me retrouve avec la sortie serveur suivante:
Notice: Undefined index: prod in C:\Program Files\wamp\www\...
Array ( [prod] => Array ( [0] => Fondant blanc [1] => Sucre semoule [2] => Sucre simple ) [idRecord] => Array ( [0] => 1 [1] => 2 [2] etc.
J'arrive bien à accéder au tableau 'prod', (et aux autres) mais pas à son contenu, pas à ses index pour pouvoir afficher leur valeur... Qu'est ce qui me manque ?
merci,
-
Message publié le jeudi 11 février 2010 - 12h11 par albius.
-
Bon, j'ai merdé sur ce coup là... je n'avais pas relu l'intégralité du post. Je dispose vraiment d'une base de travail maintenant. Encore merci et mes excuses pour le message précédent.
-
Message publié le lundi 22 février 2010 - 17h17 par albius.
-
Bonsoir,
Je reviens sur ce sujet car je peine sur un point, décris dans mon premier post, à savoir distribuer le cout en fonction de la quantité. L'utilisateur doit renseigner pour chaque ligne un cout global pour une quantité donnée. Cette quantité peut-être une somme calculée à l'écran si le produit est présent plus d'une fois dans la table. Si ce produit en question se trouve une fois dans la base, pas de problème, mais s'il existe plusieurs fois, je dois pouvoir diviser ce cout en fonction de chaque quantité de ce même produit. (je ne sais pas si je suis très clair là...) Bref, cela se traduit par un petit produit en croix... Et ça marche disons au 2/3 tiers :?
Le hic que je rencontre est que le script me calcule et me met bien à jour le coût des produits présent 1 fois, mais il s'arrête à la deuxième occurrence d'un même produit et passe au suivant sans qu'il y ait cette fois-ci d'actualisation. Pourquoi ? Le code:
foreach($_POST['idRecord'] as $key => $id) {
// parcours de la table pour chercher chaque quantité, de chaque produit
$select = "SELECT quantite FROM `compta` WHERE `idCompt` = '".$id."'";
$requete = mysql_query($select) or die('Erreur SQL! Nous avons un problème avec la base de données.');
$data = mysql_fetch_array($requete);
// calcul et mise à jour de la table
$update1= "UPDATE compta SET cout='".($data['quantite'] * $_POST['cout'][$key])/ $_POST['qt'][$key]."'
WHERE idCompt='".$id."'";
$requete2 = mysql_query($update1) or die('Erreur SQL! Nous avons un problème avec la base de données.');
}
Merci pour vos lumières,