Флажок, увеличивающий значение в базе данных

Да, это один из тех вопросов формы флажка. Я стараюсь, чтобы мой вопрос был коротким и простым для понимания. У меня есть форма с 25 флажками, разделенными на 3 группы. Каждая группа дает разные баллы за каждую отмеченную ячейку. Группа1 = 5 баллов/чек | Группа 2 = 8 баллов/чек | Группа 3 = 12 очков/чек. Что я хочу сделать, так это подсчитать количество проверок при отправке, а затем добавить все к общему баллу. Простой? Новые флажки можно установить в любое время, что означает, что общий балл может увеличиться, и, чтобы упростить задачу, флажки нельзя снять, поэтому общий балл не может уменьшиться. Затем общий балл будет сохранен в таблице базы данных. Это то, что у меня есть прямо сейчас, это немного, но мне нужен новый взгляд на мою проблему. Уравнение кажется простым в моей голове, но я не могу представить его на бумаге.

            ....5points
                    <label for="first_name">first point</label>
                    <input type="checkbox" name="five[]" value="1" <?php if(isset($_POST['five'])) echo 'checked="checked"'; ?> />

                    <label for="first_name">sec point</label>
                    <input type="checkbox" name="five[]" value="1" <?php if(isset($_POST['five'])) echo 'checked="checked"'; ?> />

                    <label for="first_name">n point</label>
                    <input type="checkbox" name="five[]" value="1" <?php if(isset($_POST['five'])) echo 'checked="checked"'; ?> />
................8points
                    <label for="first_name">first point</label>
                    <input type="checkbox" name="eight[]" value="1" <?php if(isset($_POST['eight'])) echo 'checked="checked"'; ?> />

                    <label for="first_name">sec point</label>
                    <input type="checkbox" name="eight[]" value="1" <?php if(isset($_POST['eight'])) echo 'checked="checked"'; ?> />
....12points and so on

также я сохраняю поля как отмеченные с помощью кода Isset = checked. Это мое уродливое добавление общего балла:

$a =0;
$b =0;
$total;
if(isset($_POST['submitted']))
{
if (isset($_POST['five'])) {
    foreach ($_POST['five'] as $five) {
       $a + 5;
    }
 if (isset($_POST['eight'])) {
    foreach ($_POST['eight'] as $eight) {
       $b + 8;
    }
    $total=$total+$a+$b;
}

Но, конечно, это не помогает, а просто дает эхо-результат в виде 5555555 и 888888. Кроме того, я не хочу, чтобы моя сумма добавляла один и тот же результат дважды, как сейчас. Может ли кто-нибудь помочь мне разобраться с этой головоломкой?


person Rocksteady    schedule 18.06.2013    source источник


Ответы (4)


измените $a + 5 и $a + 8 на:

$a += 5;
$a += 8;

Или вы можете сделать весь подсчет еще умнее, например:

if(isset($_POST['submitted'])) {
  $fives = isset($_POST['five']) ? $_POST['five'] : array();
  $eights = isset($_POST['eight']) ? $_POST['eight'] : array();
  $twelves = isset($_POST['twelve']) ? $_POST['twelve'] : array();

  $total = 5 * count($fives) + 8 * count($eights) + 12 * count(twelves);
}

Кроме того, ваш html обязательно проверяет все флажки, если они отправлены. Измените операторы if, имена и добавьте свойство disabled, если вы не хотите, чтобы баллы вычитались:

            ....5points
                    <label for="first_name">first point</label>
                    <input type="checkbox" name="five[0]" value="1" <?php if(isset($_POST['five'][0])) echo 'checked="checked" disabled="true"'; ?> />

                    <label for="first_name">sec point</label>
                    <input type="checkbox" name="five[1]" value="1" <?php if(isset($_POST['five'][1])) echo 'checked="checked" disabled="true"'; ?> />

                    <label for="first_name">n point</label>
                    <input type="checkbox" name="five[2]" value="1" <?php if(isset($_POST['five'][2])) echo 'checked="checked" disabled="true"'; ?> />
................8points
                    <label for="first_name">first point</label>
                    <input type="checkbox" name="eight[0]" value="1" <?php if(isset($_POST['eight'][0])) echo 'checked="checked" disabled="true"'; ?> />

                    <label for="first_name">sec point</label>
                    <input type="checkbox" name="eight[1]" value="1" <?php if(isset($_POST['eight'][1])) echo 'checked="checked" disabled="true"'; ?> />
....12points and so on
person Ziarno    schedule 18.06.2013
comment
Ха, я вообще не думал об использовании count. Хорошее решение. - person Joel Hinz; 18.06.2013
comment
Это круто! но если я не выберу галочки с двенадцатью точками, я получу неопределенное значение? И еще вопрос, могут ли галочки ставиться и отключаться даже после перезагрузки страницы? @Зиарно - person Rocksteady; 18.06.2013
comment
Да, они должны быть проверены и отключены после перезагрузки сейчас. Например, если вы не выберете ни один из пяти флажков, этот массив будет пустым и 5 * count($_POST['five']) = 0 - person Ziarno; 18.06.2013
comment
Извините, но когда я попадаю на страницу, не устанавливая ни одного флажка, я получаю сообщение об ошибке, либо полное неопределенное, либо какое-то другое, когда-то неопределенное. И когда я попал на главную страницу, а затем обратно, галочки не хотят оставаться отмеченными :/ - person Rocksteady; 18.06.2013
comment
хм, верно, если вы ничего не отметите, то $_POST['five'] не будет установлен и выдает ошибки. Позвольте мне немного отредактировать - person Ziarno; 18.06.2013
comment
сделал это немного длиннее, потому что вам нужно проверить каждую переменную, если она существует, если не присвоить и пустой массив - person Ziarno; 18.06.2013
comment
Большой! Это действительно большое спасибо! Все еще есть крошечная винная проблема, когда я снова нажимаю «Отправить», общий счетчик сбрасывается, а флажки снимаются, какой-нибудь намек на то, что искать? - person Rocksteady; 18.06.2013
comment
или я думаю, что если я сохраню общее количество в БД после отправки, мне нужно будет извлечь его и добавить к нему в следующий раз. не должно быть сложнее, чем это? - person Rocksteady; 18.06.2013
comment
вы можете сохранить $ total в БД, но тогда вы не будете знать, какие флажки были нажаты. Если вы хотите всегда получать отмеченные/отключенные флажки, вам нужно сохранить некоторые значения в вашей БД, которые будут отслеживать, какие из них щелкнул пользователь. - person Ziarno; 18.06.2013

Вам нужно будет изменить свой PHP-код, вот пример:

$total = 0;
if(isset($_POST['submitted'])) {
    if (isset($_POST['five'])) {
        foreach ($_POST['five'] as $five) {
            $total += 5;
        }
    }
    if (isset($_POST['eight'])) {
        foreach ($_POST['eight'] as $eight) {
            $total += 8;
        }
    }
}

Оператор += берет переменную, в данном случае $total, и добавляет к ней все, что находится справа. Так что $total += 8; это то же самое, что и $total = $total + 8;

person Joel Hinz    schedule 18.06.2013

Внутри цикла foreach вы просто выполняете $a + 5 и $b + 8, вы, вероятно, захотите написать $a +=5, $b += 8

person dannrob    schedule 18.06.2013

замените $a + 5; и $b + 8; ниже

$a += 5;
$b += 8;
person Ripa Saha    schedule 18.06.2013