Как передать массив проверенных / непроверенных значений флажков в генератор электронной почты PHP? - PullRequest
3 голосов
/ 16 июня 2011

Я добавил флажок в форму, к которой пользователь может динамически добавлять строки.Вы можете увидеть форму здесь .

Я использую массив для передачи значений для каждой строки в генератор электронной почты PHP, и все отлично работает для других входных данных, но я не могу получитьфлажок для работы.Входные данные флажка в настоящее время выглядят так:

<input type="checkbox" name="mailing[]" value="Yes">

Тогда в PHP у меня есть это:

$mailing = trim(stripslashes($_POST['mailing'][$i]));

Но это не работает, как ожидалось, то есть я вижу только «Да»для первого установленного флажка и ничего для последующих отмеченных флажков.

Еще одна проблема заключается в том, что я хотел бы, чтобы значение 'Нет' генерировалось для непроверенных флажков.

Может кто-то помочьс этим?

Спасибо,

Ник

Форма:

<form method="post" action="bookingenginetest.php">
            <p>
                <input type="checkbox" name="mailing[]" value="Yes">
                <label>Full Name:</label> <input type="text" name="name[]">
                <label>Email:</label> <input type="text" name="email[]">
                <label>Telephone:</label> <input type="text" name="telephone[]">
                <span class="remove">Remove</span>
            </p>
            <p>
                <span class="add">Add person</span><br /><br /><input type="submit" name="submit" id="submit" value="Submit" class="submit-button" />
            </p>

        </form>

Сценарий клонирования:

$(document).ready(function() {

                $(".add").click(function() {
                    var x = $("form > p:first-child").clone(true).insertBefore("form > p:last-child");
                    x.find('input').each(function() { this.value = ''; });
                    return false;
                });

                $(".remove").click(function() {
                    $(this).parent().remove();
                });

            });

Ответы [ 5 ]

4 голосов
/ 16 июня 2011
$mailing = array();
foreach($_POST as $v){
    $mailing[] = trim(stripslashes($v));
}

Для обработки непроверенных ящиков было бы лучше установить для каждого флажка уникальное значение:

<input type="checkbox" name="mailing[1]" value="Yes">
<input type="checkbox" name="mailing[2]" value="Yes">

или

<input type="checkbox" name="mailing[a]" value="Yes">
<input type="checkbox" name="mailing[b]" value="Yes">

Затем получите список флажков:

$boxes = array(1,2,3);
$mailing = array();
$p = array_key_exists('mailing',$_POST) ? $_POST['mailing'] : array();
foreach($boxes as $v){
    if(array_key_exists($v,$p)){
        $mailing[$v] = trim(stripslashes($p[$v]));
    }else{
        $mailing[$v] = 'No';
    }
}

print_r($mailing);

Вы также можете использовать это с несколькими флажками вместо:

$boxes = 3;
$mailing = array();
$p = array_key_exists('mailing',$_POST) ? $_POST['mailing'] : array();
for($v = 0; $v < $boxes; $v++){
    if(array_key_exists($v,$p)){
        $mailing[$v] = trim(stripslashes($p[$v]));
    }else{
        $mailing[$v] = 'No';
    }
}

print_r($mailing);
1 голос
/ 12 апреля 2013

Вот мое решение:

С массивом флажков в html, например, так ...

<input type="hidden" name="something[]" value="off" />
<input type="checkbox" name="something[]" />
<input type="hidden" name="something[]" value="off" />
<input type="checkbox" name="something[]" />
<input type="hidden" name="something[]" value="off" />
<input type="checkbox" name="something[]" />

Затем я исправляю опубликованный массив с помощью этой функции ...

$_POST[ 'something' ] = $this->fixArrayOfCheckboxes( $_POST[ 'something' ] );
function fixArrayOfCheckboxes( $checks ) {
    $newChecks = array();
    for( $i = 0; $i < count( $checks ); $i++ ) {
        if( $checks[ $i ] == 'off' && $checks[ $i + 1 ] == 'on' ) {
            $newChecks[] = 'on';
            $i++;
        }
        else {
            $newChecks[] = 'off';
        }
    }
    return $newChecks;
}

Это даст мне массив со значениями «вкл.» Или «выкл.» Для каждого (и каждого) флажка.

Обратите внимание, что скрытый вход ДОЛЖЕН быть ДО ввода флажка в порядкедля правильной работы функции.

1 голос
/ 18 февраля 2013

Чтобы проверить и снять флажок с обоих значений в POST, поместите скрытое поле с точно таким же именем, но с противоположным значением по сравнению с исходным значением chkbox, так что в этом случае значение будет равно '0'

<input type="hidden" name="chk_name[]" value="0" />
<input type="checkbox"  name="chk_name[]"  value="1"/>
 <input type="hidden" name="chk_name[]" value="0" />
<input type="checkbox"  name="chk_name[]"  value="1"/>

<?php 
function getAllChkboxValues($chk_name) {
    $found = array(); //create a new array 
    foreach($chk_name as $key => $val) {
        //echo "KEY::".$key."VALue::".$val."<br>";
        if($val == '1') { //replace '1' with the value you want to search
            $found[] = $key;
        }
    }
    foreach($found as $kev_f => $val_f) {
        unset($chk_name[$val_f-1]); //unset the index of un-necessary values in array
    }   
    final_arr = array(); //create the final array
    return $final_arr = array_values($chk_name); //sort the resulting array again
}
$chkox_arr = getAllChkboxValues($_POST['chk_name']); //Chkbox Values
echo"<pre>";
print_r($chkox_arr);
?>
1 голос
/ 16 июня 2011

Измените значение для каждого флажка на что-то уникальное:

<input type="checkbox" name="mailing[]" value="Yes-1"> 
<input type="checkbox" name="mailing[]" value="Yes-2"> 

и т.д.. Чтобы сделать это из вашего кода jQuery, добавьте еще одну строку , которая присваивает значение новому флажку:

x.find('input:checkbox').each(function() { this.value='Yes-'+n; }); 

Вам нужно определить n при начальной загрузке страницы. Предполагая, что вы начинаете только с одного «человека», просто добавьте прямо над обработчиком $(".add").click:

var n=1;

А потом:

  • в обработчике $(".add").click, увеличьте значение n
  • в вашем обработчике $(".remove").click, уменьшите значение n
0 голосов
/ 02 февраля 2016

Вот мое решение:

<span>
<input class="chkBox" onchange="if($(this).is(':checked')){$(this).parent().find('.hidVal').prop('disabled',true);}else{$(this).parent().find('.hidVal').prop('disabled', false);}" type="checkbox" checked name="session[]" value="checked_value_here" />
<input type="hidden" class="hidVal" name="session[]" value="un_checked_value_here" />
</span>
<span>
<input class="chkBox" onchange="if($(this).is(':checked')){$(this).parent().find('.hidVal').prop('disabled',true);}else{$(this).parent().find('.hidVal').prop('disabled', false);}" type="checkbox" checked name="session[]" value="checked_value_here" />
<input type="hidden" class="hidVal" name="session[]" value="un_checked_value_here" />
</span>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...