IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

formulaire dynamique et modification de table


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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,

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    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.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 295
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    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,

Discussions similaires

  1. Formulaire et modification des tables
    Par qltmi dans le forum IHM
    Réponses: 2
    Dernier message: 25/10/2008, 23h16
  2. Réponses: 8
    Dernier message: 02/05/2008, 10h33
  3. Réponses: 25
    Dernier message: 03/05/2007, 15h40
  4. Réponses: 5
    Dernier message: 27/11/2006, 10h32
  5. Réponses: 11
    Dernier message: 27/06/2006, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo