Обход всех переменных _Post и добавление числовых значений - PullRequest
0 голосов
/ 20 марта 2012

У меня есть форма, которая выглядит следующим образом.

<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>

Что я хочу сделать, это перебрать все значения, отправленные в _POST, а затем суммировать каждое число после знака '+' в переменнойв файле index.php.

Так, например, если они выбрали «Второй выбор» и отметили флажок «Ракета», он должен добавить до 400 (300 + 100).

Вв этом примере есть только две разные опции, но в конечном приложении будет 20-30 разных вещей, которые могут варьироваться, поэтому цикл необходим.

Также Как я могу пройти через каждый элемент, который не скрыт (поэтому исключите скрытые элементы формы).

Ответы [ 3 ]

1 голос
/ 20 марта 2012

Я считаю, что вы храните значения, отправленные с помощью _POST, в массиве.

$total = 0;

foreach($selections as $sel){
    $sep = $explode('+', $sel);
    $value = (int)$sep[1];
    $total += $value;
}
1 голос
/ 20 марта 2012
foreach ($_POST as $post) {
    $num = explode('+', $post);
    if (is_numeric((int) end($num)) {
        $sum += end($num);
    }
}

Если вам нужны отрицательные значения, вы можете просто заставить свой option выглядеть так:

<option value="Second Choice +-300">Second Choice</option>
0 голосов
/ 20 марта 2012

Почему бы вам не уронить текст в значения и сохранить только числовые данные?Значения в любом случае не видны, но в вашем коде вы можете легко сопоставить числовые значения с текстом.Другими словами, вы можете иметь что-то вроде этого:

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

И отображать данные вот так (или любым другим способом, но с идентификаторами выбора в поле значения):

<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>

И затем, имея начальный массив, вы можете легко суммировать все данные:

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

И отображать данные для пользователя тоже:

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

Это лучшеподход, поскольку он дает вам большую гибкость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...