Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 02/02/2010, 15h10   #1
Membre du Club
 
Date d'inscription: mars 2008
Messages: 87
Par défaut formulaire dynamique et modification de table

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, 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,
yann18 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/02/2010, 05h40   #2
Rédacteur/Modérateur
 
Avatar de andry.aime
 
Date d'inscription: septembre 2007
Localisation: Madagascar
Messages: 2 014
Par défaut

Bonjour,
$_POST['cout'] et $_POST['idRecord'] sont aussi de tableaux comme $_POST['prod'].
Tu dois alors utiliser une variable que tu incrementes a chaque iteration du boucle foreach pour l'indice de ces tableaux.
andry.aime est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 23/02/2010, 13h55   #3
Membre du Club
 
Date d'inscription: mars 2008
Messages: 87
Par défaut calcul de cout

Merci! Cette réponse m'a déjà bien aidé. Mais j'ai un nouveau souci qui apparait. Pour être plus explicite, je vais me servir de copies d'écran:





La première image est un formulaire généré à partir d'une table (seconde image). Les quantités sont additionnées pour l'écran si le produit est en doublon. On le voit bien dans la table : j'ai une fois de la longe de porc, mais deux fois des lardons fumés, d'où le chiffre 3 pour la quantité de lardons dans le formulaire. Le script met en relation le formulaire et la table. Il doit calculer et mettre à jour pour chaque produit le cout renseigné par l'utilisateur à l'écran. Dans la table, le prix pour la ligne 27 est correct (proportionnellement parlant) J'ai bien une quantité globale de 3 pour un cout totale de 6 euros (c'est fictif évidemment), avec une quantité de 2 pour cette ligne. Donc (2 * 6)/ 3 = 4 euros. Ce produit en croix doit être répété pour chaque ligne. La ligne 28 a été oubliée, mais pas la 29, pourquoi ? Le problème se répète pour chaque doublon de produit. Comment remédier à cela ? En espérant avoir été suffisamment clair... Le code:
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,

Dernière modification par yann18 ; 23/02/2010 à 14h21.
yann18 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 01h14.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.