2012-03-20 5 views
0

J'ai un formulaire qui ressemble à ceci.Boucler toutes les variables _Post et ajouter des valeurs numériques

<form action="index.php" method="post"> 
<select name="dropdownOption"> 
    <option value="First Choice +200">First Choice</option> 
    <option value="Second Choice +300">Second Choice</option> 
</select> 
<p><input type="checkbox" value="Rocket +100"> Rocket</p> 

Ce que je veux faire est une boucle à travers chaque valeur envoyée dans le _POST et résumer ensuite chaque nombre après le signe « + » dans une variable dans le fichier index.php. Ainsi, par exemple, s'ils choisissent le «deuxième choix» et cochent la case «Rocket», ils doivent ajouter jusqu'à 400 (300 + 100).

Dans cet exemple, il n'y a que deux options différentes mais dans l'application finale, il y aura 20-30 choses différentes qui peuvent varier, c'est pourquoi une boucle est nécessaire.

Aussi comment je peux parcourir chaque élément qui n'est pas masqué (donc exclure les éléments de formulaire cachés).

+0

Avez-vous besoin de la première partie de la valeur ou d'une valeur numérique seulement? – tonymarschall

+0

Valeur numérique seulement est ok, je sais comment sortir le reste des données – Talon

Répondre

1
foreach ($_POST as $post) { 
    $num = explode('+', $post); 
    if (is_numeric((int) end($num)) { 
     $sum += end($num); 
    } 
} 

Si vous avez besoin des valeurs négatives, vous pouvez juste faire votre option ressembler à ceci:

<option value="Second Choice +-300">Second Choice</option> 
+1

Vous feriez mieux d'obtenir le dernier élément dans le tableau avec 'end()', juste pour être sûr que la valeur n'a plus un mot. – s3v3n

+0

Ceci est vrai, mais je travaillais sur le code fourni. J'ai fait la modification cependant, car votre point est valide –

+1

Pour l'enregistrement, à moins que vous ne transposiez 'end ($ num)' comme int, le contrôle 'is_numeric' échouera car ce sera une chaîne. –

0

Pourquoi ne pas vous laisser tomber le texte dans les valeurs, et ne conserver que les données numériques? Les valeurs ne sont pas visibles de toute façon, mais dans votre code, vous pouvez facilement mapper les valeurs numériques au texte. En d'autres termes, vous pouvez avoir quelque chose comme ceci:

$choices = array(
    '1' => array('value' => '100', 'text' => 'First choice'), 
    '2' => array('value' => '150', 'text' => 'Second choice'), 
    '3' => array('value' => '250', 'text' => 'Third choice'), 
); 

et afficher les données comme celui-ci (ou de toute autre manière, mais ayant les ids de choix dans le domaine de valeur):

<form action="index.php" method="post"> 
<select name="dropdownOption"> 
    <?php foreach($choices as $id => $choice): ?> 
     <option value="<?php echo $id ?>"><?php echo $choice['text']; ?></option> 
    <?php endforeach; ?> 
</select> 
</form> 

et puis d'avoir le tableau initial, vous pouvez résumer facilement toutes les données:

$sum = 0; 
foreach($selected as $id){ 
    $sum += $choices[$id]['value']; 
} 

et afficher des données à l'utilisateur aussi:

<?php foreach($selected as $id): ?> 
    <p>You chose <?php echo $choices[$id]['text']; ?></p> 
<?php endforeach; ?> 

Ceci est une approche bien meilleure car elle vous donne beaucoup de flexibilité.

+0

Les valeurs sont utilisées plus tard, mais uniquement pour afficher à l'utilisateur qu'elles ne sont pas utilisées dans le calcul. – Talon

+0

J'ai modifié la réponse. – s3v3n

1

Je considère que vous stockez les valeurs envoyées en utilisant _POST dans un tableau.

$total = 0; 

foreach($selections as $sel){ 
    $sep = $explode('+', $sel); 
    $value = (int)$sep[1]; 
    $total += $value; 
} 
Questions connexes