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 :

Boucle for avec requête SQL


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut Boucle for avec requête SQL
    Bonjour,

    J'ai un petit bug que j'ai du mal a comprendre.
    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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    for ($travaux_ii=1; $travaux_ii<=$_POST['num_parcelle']; $travaux_ii++) {
     
    	for ($travaux_iii=1; $travaux_iii<=$_POST['num_produit']; $travaux_iii++) {
     
    	$travaux_i++;
     
    			  $updateSQL = sprintf("UPDATE travaux SET fiche_culture_id=%s, parcelle_id=%s, `date`=%s, travaux=%s, operateur_id=%s, produit_id=%s, principe_actif=%s, total=%s, dose_ha=%s, N_consigne=%s, numero_fiche=%s, observations=%s, N=%s, P=%s, K=%s, date_recolte=%s, last_update=%s WHERE id_travaux=%s",
                           GetSQLValueString($_POST['fiche_culture_id_'.$travaux_ii.''], "int"),
                           GetSQLValueString($_POST['parcelle_id_1'.$travaux_iii.''], "int"),
                           GetSQLValueString($_POST['date_application'], "date"),
                           GetSQLValueString($_POST['justification'], "text"),
                           GetSQLValueString($_POST['operateur_id'], "int"),
                           GetSQLValueString($_POST['produit_id_1'.$travaux_iii.''], "int"),
                           GetSQLValueString($_POST['principe_actif_t_1'.$travaux_iii.''], "text"),
                           GetSQLValueString($_POST['Q_tt_1'.$travaux_iii.''], "double"),
                           GetSQLValueString($_POST['dose_ha_1'.$travaux_iii.''], "double"),
                           GetSQLValueString($_POST['traitement_phyto_id'], "text"),
                           GetSQLValueString($_POST['numero_fiche'], "text"),
                           GetSQLValueString($_POST['commentaire'], "text"),
                           GetSQLValueString($_POST['N'], "double"),
                           GetSQLValueString($_POST['P'], "double"),
                           GetSQLValueString($_POST['K'], "double"),
                           GetSQLValueString($_POST['date_recolte_1'.$travaux_iii.''], "date"),
                           GetSQLValueString($_POST['last_update'], "date"),
                           GetSQLValueString($_POST['id_travaux_2'.$travaux_i.''], "int"));
     
    			    mysql_select_db($database_cultureV3, $cultureV3);
    			    $Result1 = mysql_query($updateSQL, $cultureV3) or die(mysql_error());	
     
    	}
    }
    Cela fonctionne a moitié. Les variables $_POST['date_recolte_1'.$travaux_iii.''] ne marche pas comme elle le doit.

    Mon but étant que cela marque date_recolte_11 date_recolte_12 etc.. idem pour les autres variables avec $travaux_iii
    J'ai vérifié que $travaux_iii soit bien ce que je souhaite en simplifiant le code au max. C'est à dire sans la parti SQL et avec de simple echo
    et c'est bon.

    Ce que je comprends pas, c'est pourquoi cela marche avec $_POST['id_travaux_2'.$travaux_i.''] et $_POST['fiche_culture_id_'.$travaux_ii.''] mais pas avec le reste.

    Si quelqu'un avec une idée. Rien me saute au yeux actuellement.
    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sans voir ton formulaire on ne peut pas te répondre.

    Mais travaille avec des tableaux plutôt qu'avec des variables incrementées.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu ne nous facilites pas la tâche ! tu n'expliques rien.
    En te relisant 4 fois, je comprends que ta variable $travaux_iii ne fonctionne pas comme tu l'entends.

    Une chose qui me chiffonne dans ta double boucle, c'est que si je vois bien pourquoi le nombre de parcelles peut être contenu dans une seule donnée utilisateur, je vois mal comment le nombre de produits par parcelle, qui change donc tout le temps, pourrait être contenu dans une seule variable post... (ici ton $_POST['num_produit'])...

    Si c'est juste pour compter les produits dans le tout, et pas seulement dans la parcelle, ça doit ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $i=0;//compteur de produit dans le tout
    for ($i_parcelle=1; $i_parcelle<=$nb_parcelle; $i_parcelle++) {
    	for ($i_produit=1; $i_produit<=$data[$i_parcelle]['nb_produit']; $i_produit++) {
    		$i++;
    	}
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Désolé je sais que j'ai mis que peu d'information mais la page est longue. Beaucoup de ligne (pour moi). Très sale également. Un projet repris alors que je ne suis pas dev. Bref.

    Ce sont des fiches de traitement phyto pour un suivie et enregistrement etc...
    L'on choisit donc une ou plusieurs cultures, une ou plusieurs parcelles, un ou plusieurs produits.
    J'enregistre donc le tout dans 4 tables. Une principale et 2 sous table pour les cultures/parcelles et l'autre pour les produits. La 4eme et dernière nommée travaux qui regroupe tous les travaux effectué dans une parcelle. Pour la partie enregistrement c'est fait. Aucun problème. Pour la partie modification, c'est là que j'ai un bug.
    J'ai donc une multitude de ligne d'enregistrement a modifié. Comme je l'ai dit plus haut la partie principale aucun souci mais pour les travaux ça coince. Dans cette dernière table le problème c'est que je ne peux pas savoir à l'avance combien de ligne j'aurai a modifié contrairement au reste je peux en avoir 1 comme 9 ou plus encore
    Ex: Une culture carotte sur la parcelle A1 avec un produit X et Y
    Suivie d'une autre culture carotte sur parcelle B3 avec donc le produit X et Y

    Cela me donne donc 4 ligne pour cette exemple dans la table travaux j'aurai eu un produit Z en plus j'en aurai eu 4 et si j'avais eu une parcelle de plus cela m'aurait donné 9.
    Pour chaque culture j’inscris la parcelle et un seul produit qui aura donc une dose propre, une quantité etc...
    Cela se répète donc pour la même parcelle et le produit suivant etc... Puis on passe à la parcelle suivante donc 3 lignes vu qu'on a 3 produits etc...


    J'aurai bien mis le formulaire mais meme le rendu fait 500 ligne environs je doute que cela vous aides.

    Dendrite ce n'est pas pour compter le nombre de produit mais pour le nom du produit.
    J'ai du mal a expliqué trop de chose.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Si cela peut vous aidez. La première boucle doit avoir ce
    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
    18
    19
      $updateSQL = sprintf("UPDATE travaux SET fiche_culture_id=%s, parcelle_id=%s, `date`=%s, travaux=%s, operateur_id=%s, produit_id=%s, principe_actif=%s, total=%s, dose_ha=%s, N_consigne=%s, numero_fiche=%s, observations=%s, N=%s, P=%s, K=%s, date_recolte=%s, last_update=%s WHERE id_travaux=%s",
                           GetSQLValueString($_POST['fiche_culture_id_1'], "int"),
                           GetSQLValueString($_POST['parcelle_id_11'], "int"),
                           GetSQLValueString($_POST['date_application'], "date"),
                           GetSQLValueString($_POST['justification'], "text"),
                           GetSQLValueString($_POST['operateur_id'], "int"),
                           GetSQLValueString($_POST['produit_id_11'], "int"),
                           GetSQLValueString($_POST['principe_actif_t_11'], "text"),
                           GetSQLValueString($_POST['Q_tt_11'], "double"),
                           GetSQLValueString($_POST['dose_ha_11'], "double"),
                           GetSQLValueString($_POST['traitement_phyto_id'], "text"),
                           GetSQLValueString($_POST['numero_fiche'], "text"),
                           GetSQLValueString($_POST['commentaire'], "text"),
                           GetSQLValueString($_POST['N'], "double"),
                           GetSQLValueString($_POST['P'], "double"),
                           GetSQLValueString($_POST['K'], "double"),
                           GetSQLValueString($_POST['date_recolte_11'], "date"),
                           GetSQLValueString($_POST['last_update'], "date"),
                           GetSQLValueString($_POST['id_travaux_21'], "int"));
    et j'en mets une 2nd si par exemple nous avions eu 1 seule parcelle/culture et 5 produit
    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
    18
    19
      $updateSQL = sprintf("UPDATE travaux SET fiche_culture_id=%s, parcelle_id=%s, `date`=%s, travaux=%s, operateur_id=%s, produit_id=%s, principe_actif=%s, total=%s, dose_ha=%s, N_consigne=%s, numero_fiche=%s, observations=%s, N=%s, P=%s, K=%s, date_recolte=%s, last_update=%s WHERE id_travaux=%s",
                           GetSQLValueString($_POST['fiche_culture_id_1'], "int"),
                           GetSQLValueString($_POST['parcelle_id_15'], "int"),
                           GetSQLValueString($_POST['date_application'], "date"),
                           GetSQLValueString($_POST['justification'], "text"),
                           GetSQLValueString($_POST['operateur_id'], "int"),
                           GetSQLValueString($_POST['produit_id_15'], "int"),
                           GetSQLValueString($_POST['principe_actif_t_15'], "text"),
                           GetSQLValueString($_POST['Q_tt_15'], "double"),
                           GetSQLValueString($_POST['dose_ha_15'], "double"),
                           GetSQLValueString($_POST['traitement_phyto_id'], "text"),
                           GetSQLValueString($_POST['numero_fiche'], "text"),
                           GetSQLValueString($_POST['commentaire'], "text"),
                           GetSQLValueString($_POST['N'], "double"),
                           GetSQLValueString($_POST['P'], "double"),
                           GetSQLValueString($_POST['K'], "double"),
                           GetSQLValueString($_POST['date_recolte_15'], "date"),
                           GetSQLValueString($_POST['last_update'], "date"),
                           GetSQLValueString($_POST['id_travaux_25'], "int"));

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bon, je ne vais pas dire que j'ai tout compris, loin de là. Mais merci de ton effort.
    Comme suggère Sabotage, tu devrais utiliser des tableaux associatifs, plutôt que des noms de variables incrémentées.

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $cultures=array('carotte','haricot','patate');
    $parcelles=array('A1','A2','A3','B1','B2','B3','C1','C2','C3');
    $produits=array('chaux','eau','sel','azote');//bon ok suis nulle en botanique
    foreach($cultures as $culture){
       foreach($parcelles as $parcelle){
          foreach($produits as $produit){
              echo $culture.' / '.$parcelle.' / '.$produit.'<br/>';
          }
       }
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2013
    Messages : 72
    Points : 21
    Points
    21
    Par défaut
    Merci j'essaie de mettre ça en oeuvre demain.
    Merci pour l'aide

Discussions similaires

  1. [MySQL] Boucle for et requête SQL
    Par Maxime54 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/05/2012, 15h24
  2. PL/SQL boucle for avec un curseur non réussi
    Par kimoto77 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 06/10/2011, 17h52
  3. [Smarty] boucles imbriquées avec requêtes SQL, impossible à comprendre
    Par dexxter dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 18/05/2007, 23h52
  4. [VB6] boucle for avec liste de valeur defini
    Par Morpheus2144 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2006, 18h12
  5. [MySQL] Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/12/2005, 16h04

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