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

Langage PHP Discussion :

documenter un tableau avec des données POST


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut documenter un tableau avec des données POST
    Bonjour.
    Je récupère des données POST par l'envoie d'un tableau comprenant un nombre important de valeurs.
    Dans une page, un tableau est documenté et envoyer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     <td style="text-align: center; width: 61px;" valign="undefined"><input size="4" name="1_vtt_-18" value="0"></td>
          <td style="text-align: center; width: 61px;" valign="undefined"><input size="4" name="1_vtt_-18" value="0"></td>
          <td style="text-align: center; width: 60px;" valign="undefined"><input size="4" name="1_vtt_-18" value="0"></td>
          <td style="text-align: center; width: 201px;" valign="undefined"><input size="25" name="1_vtt_-18" value="0"></td>
        </tr>
      </tbody>
    </table><br><br>
    <form method="post" action="tab_cal.php" name="validation_tableau_challenge">Apr&egrave;s avoir
    v&eacute;rifier le tableau, valider pour envoyer le tableau :
    &nbsp;<button value="validation_tableau_challenge" name="validation_tableau_challenge"></button><br>
      <p> input type="submit" value="Valider" </p>
    Je n'ai copié que la fin de la saisie.
    Ensuite dans la page suivante je récupère les données pour les écrire dans une base de données.
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php 
     $req = $bdd->prepare  ("
     UPDATE $resultat_1_sortie 
     SET vtt_18 = :vtt_18,
     route_18 = :route_18 ,
     vtt_fem = :vtt_fem ,
     route_fem = :route_fem ,
     vtt_hom = :vtt_hom ,
     route_hom = :route_hom ,
     total_vtt = :total_vtt ,
     total_cyclo = :total_cyclo ,
     id = :id,
     points_comptes=:points_comptes,
     observation = :observation 
     WHERE id=:id" );//N° club ou l'on charge les resultats
            if(isset($_POST['valider']))
    	   {
     
            foreach($_POST as $index=>$valeur)
     
    			{
                   if ($index!='valider')
     
     
    				{
     
    					//Club 1 
     
    							$club=1;$points_comptes=0;
    							$vtt_18=$_POST['01_vtt_18'];
    							$route_18=$_POST['01_route_18'];
    							$vtt_fem= $_POST['01_vtt_fem'];
    							$route_fem= $_POST['01_route_fem']; 
    							$vtt_hom= $_POST['01_vtt_hom'];
    							$route_hom= $_POST['01_route_hom'];
    							$observation= $_POST['01_observations'];
    							$total_vtt= $vtt_18+$vtt_fem+$vtt_hom; 
    							$total_cyclo= $route_18+$route_fem+$route_hom+$total_vtt;
    							$total_feminine=($vtt_fem+$route_fem);
    if ($ids==$club AND $total_cyclo != 0) { $observation= " club organisateur, pas de points comptes sauf feminines pour rando de la rose";}
    								if ($ids!=$club ) {$points_comptes= (($total_cyclo*$abondement[$club])+(($vtt_fem+$route_fem)*2)+(($vtt_18+$route_18)*3));}//si ce n'est pas le club organisateur
    								if ($id_sortie== 12){$points_comptes= (($total_feminine*$abondement[$club])+($total_feminine*2));}// rando de la rose
    							echo '   total feminines : '.$total_feminine. '<br/> ';
    							echo ' points comptés : ' . $points_comptes .$observation. '<br/> ';
    								$req->execute(array("vtt_18" => $vtt_18,"route_18" => $route_18,"vtt_fem" => $vtt_fem,"route_fem" => $route_fem,
    										"vtt_hom" => $vtt_hom,"route_hom" => $route_hom,"total_vtt" => $total_vtt,"total_cyclo" => $total_cyclo,
    										"points_comptes" => $points_comptes,"observation" => $observation,"id" => $club ));
     
    									Echo 'la mise à jour est faite  club   vtt-18: '.$vtt_18.'  '.$club.'pour  '.$resultat_1_sortie.$rose.'<br />';
    					//Club 2			
     
    							$club=2;$points_comptes=0;
    Et ainsi de suite
    Je désirerai simplifier et écrire directement dans un tableau les valeur inscrite dans "$_POST['01_vtt_18'];" en indexant le "01". je reçois environ 280 valeurs.
    C'est difficile à expliquer.
    Merci pour votre aide
    syldup

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par syldupas Voir le message
    [...] C'est difficile à expliquer. [...]
    C'est surtout incompréhensible et incohérent...

    • les <input...> ont le même name "1_vtt_-18"...
    • ...qu'on ne retrouve pas dans les $_POST récupérés
    • la balise <form...> est après la <table> contenant les <input...>
    • "Et ainsi de suite" ??
    • "écrire directement dans un tableau" ?? <table> ou array ?
    • ...


    Bref. Commence par t'éclaircir les idées.
    "Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire arrivent aisément."
    Nicolas Boileau-Despréaux (1636-1711).
    Dernière modification par Invité ; 20/12/2014 à 04h15.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Je vais essayer d'expliquer comment ça fonctionne. Car ça fonctionne mais je cherche à simplifier le code.
    Cette application sert à renseigner les participants lors d'une randonnée de cyclo pour le challenge départementale.
    A la fin de manifestation, le président du club qui a organisé la manifestation, documente en ligne un tableau avec le nombre de participants par club.
    Il documente les cyclo homme et femme, les VTT homme et femme et le moins de 18 ans.
    Lorsqu'il a documenté le tableau (7 colonnes et 40 lignes car 40 clubs à documenter) il valide.
    Ce tableau est récupéré par post sur une autre page et chaque valeur est lue pour être écrite dans une base de données et ceci ligne après ligne (une ligne pour un club).
    De plus des calculs sont fait pour donner un nombre de points pondérés en fonction de la grosseur du club, des féminines et de moins de 18 ans.
    Tout ceci fonctionne très bien mais fait 800 lignes de code. Je voudrai simplifier mais comment paramétrer la valeur ($_POST['01_vtt_18'] pour le club 1 puis( $_POST['02_vtt_18'] pour le club 2 . je voudrai indexer le 01 , 02 , etc de $_POST['01_vtt_18'] et non pas lire ligne par ligne.
    C'est compliquer à expliquer et je ne connais pas exactement les bon thermes de programmation, c'est pour cela que je suis dans "débutant"

  4. #4
    Invité
    Invité(e)
    Par défaut
    C'est en effet plus clair.
    $_POST[$num.'_vtt_18'], avec $num valant 01, 02, 03,... jusqu'à 40.
    Ensuite, on utilise ce $num pour factoriser les 40 opérations
    Code php : 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
    <?php 
    	for ($club=1; $club<=40; $club++) // numéro du club : 1,2,3 (sans le zéro devant),... 40
    	{
    		$num = ($club<10)? '0'.$club : $club; // on ajoute le 0 (zéro) si le nombre est inférieur à 10
     
    							// $club=$club; // on supprimer cette ligne, devenue inutile
    							$points_comptes=0;
    							$vtt_18=$_POST[$num.'_vtt_18'];
    							$route_18=$_POST[$num.'_route_18'];
    							$vtt_fem= $_POST[$num.'_vtt_fem'];
    							$route_fem= $_POST[$num.'_route_fem']; 
    							$vtt_hom= $_POST[$num.'_vtt_hom'];
    							$route_hom= $_POST[$num.'_route_hom'];
    							$observation= $_POST[$num.'_observations'];
    							$total_vtt= $vtt_18+$vtt_fem+$vtt_hom; 
    							$total_cyclo= $route_18+$route_fem+$route_hom+$total_vtt;
    							$total_feminine=($vtt_fem+$route_fem);
    					// requete
     
    	}

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Merci pour la réponse.
    Ça parait simple.
    Je vais essayer
    Encore merci

  6. #6
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Pour faire plus propre, les données devraient être stockées dans un tableau à deux dimensions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $datas =$_POST['data'];
    $vtt_18=$datas[$num]['vtt_18'];
    Ce qui est tout à fait possible dans un formulaire html :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="data[0][vtt_18] />
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    J'ai essayé et ça fonctionne (proposition de jreaux62) celle de Spartacusply, je n'ai pas compris.
    Pour celle qui fonctionne, je doit mettre une valeur de 01, 01,.....39.
    Pour que ce soit pris en compte, j'écris $club='01'
    Mais pour la boucle, ça ne fonctionne pas.
    Ou alors, il faudrait que j'écrive:$vtt_18=$_POST['0'.$club.'_vtt_18'];
    Mais à partir de 10, ce n'est plus bon puisque ça fait 010.
    Comment faire?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    C'est bon, ça fonctionne.
    Ci dessous 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    // pour les 9 premiers club, écriture des valeurs saisie 
    for($club=1; $club <= 10; $club++){
    	$vtt_18=$_POST['0'.$club.'_vtt_18'];
    	$route_18=$_POST['0'.$club.'_route_18'];
    	$vtt_fem= $_POST['0'.$club.'_vtt_fem'];
    	$route_fem= $_POST['0'.$club.'_route_fem']; 
    	$vtt_hom= $_POST['0'.$club.'_vtt_hom'];
    	$route_hom= $_POST['0'.$club.'_route_hom'];
    	$observation= $_POST['0'.$club.'_observations'];
    	$points_comptes = 0;
    	$total_vtt= $vtt_18+$vtt_fem+$vtt_hom; 
    	$total_cyclo= $route_18+$route_fem+$route_hom+$total_vtt;
    	$total_feminine=($vtt_fem+$route_fem);
    	if ($ids==$club AND $total_cyclo != 0) { $observation= " club organisateur, pas de points comptes sauf feminines pour rando de la rose";}// observation pour rando de la rose
    	if ($ids!=$club ) {$points_comptes= (($total_cyclo*$abondement[$club])+(($vtt_fem+$route_fem)*2)+(($vtt_18+$route_18)*3));}//si ce n'est pas le club organisateur
    	if ($id_sortie== 12){$points_comptes= (($total_feminine*$abondement[$club])+($total_feminine*2));}// rando de la rose
    	$req->execute(array("vtt_18" => $vtt_18,"route_18" => $route_18,"vtt_fem" => $vtt_fem,"route_fem" => $route_fem,
    	    "vtt_hom" => $vtt_hom,"route_hom" => $route_hom,"total_vtt" => $total_vtt,"total_cyclo" => $total_cyclo,
    	    "points_comptes" => $points_comptes,"observation" => $observation,"id" => $club ));
    }
    // pour les clubs suivants
    for($club=10; $club <= 39; $club++){
    	$vtt_18=$_POST[$club.'_vtt_18'];
    	$route_18=$_POST[$club.'_route_18'];
    	$vtt_fem= $_POST[$club.'_vtt_fem'];
    	$route_fem= $_POST[$club.'_route_fem']; 
    	$vtt_hom= $_POST[$club.'_vtt_hom'];
    	$route_hom= $_POST[$club.'_route_hom'];
    	$observation= $_POST[$club.'_observations'];
    	$points_comptes = 0;
    	$total_vtt= $vtt_18+$vtt_fem+$vtt_hom; 
    	$total_cyclo= $route_18+$route_fem+$route_hom+$total_vtt;
    	$total_feminine=($vtt_fem+$route_fem);
    	if ($ids==$club AND $total_cyclo != 0) { $observation= " club organisateur, pas de points comptes sauf feminines pour rando de la rose";}// observation pour rando de la rose
    	if ($ids!=$club ) {$points_comptes= (($total_cyclo*$abondement[$club])+(($vtt_fem+$route_fem)*2)+(($vtt_18+$route_18)*3));}//si ce n'est pas le club organisateur
    	if ($id_sortie== 12){$points_comptes= (($total_feminine*$abondement[$club])+($total_feminine*2));}// rando de la rose
    	$req->execute(array("vtt_18" => $vtt_18,"route_18" => $route_18,"vtt_fem" => $vtt_fem,"route_fem" => $route_fem,
    	    "vtt_hom" => $vtt_hom,"route_hom" => $route_hom,"total_vtt" => $total_vtt,"total_cyclo" => $total_cyclo,
    	    "points_comptes" => $points_comptes,"observation" => $observation,"id" => $club ));
    }
    Il n'y a pas plus simple?
    Merci pour votre aide

  9. #9
    Invité
    Invité(e)
    Par défaut
    Si.
    EXACTEMENT comme je l'ai indiqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	for ($club=1; $club<=40; $club++) // numéro du club : 1,2,3 (sans le zéro devant),... 40
    	{
    		$num = ($club<10)? '0'.$club : $club; // on ajoute le 0 (zéro) si le nombre est inférieur à 10
    Si tu ne comprends pas la formule (voir PHP Opérateurs de comparaison -> L'opérateur ternaire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $num = ($club<10)? '0'.$club : $club;
    elle signifie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($club<10){ $num = '0'.$club; } else { $num = $club; }
    PAR CONTRE, ton code ci-dessus est FAUX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for($club=1; $club <= 10; $club++)
    ...
    for($club=10; $club <= 39; $club++)
    ...
    • Le club 10 est évalué 2 fois (la 1ère étant doublement fausse, puisqu'il affiche $_POST['010_.....'])
    • alors que le club 40 n'est pas du tout pris en compte...
    Dernière modification par Invité ; 21/12/2014 à 02h39.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    Merci pour cet aide.
    J'ai bien compris
    Je vais modifier
    Syldup

  11. #11
    Invité
    Invité(e)
    Par défaut
    J'ajouterai qu'il est très certainement aussi possible de "factoriser" les 40 lignes de la <table> (formulaire) de la même façon.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/01/2013, 14h08
  2. Remplir un tableau avec des données d'une autre feuille
    Par nomade333 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/04/2012, 12h17
  3. Remplir jtable avec des données d'un tableau
    Par kaisser dans le forum Composants
    Réponses: 1
    Dernier message: 01/01/2010, 18h19
  4. Réponses: 11
    Dernier message: 22/05/2008, 14h11
  5. Réponses: 6
    Dernier message: 11/07/2006, 10h56

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