2010-11-30 8 views
-1

OK Я отправляю данные с $ _POST для себя.
У меня есть флажки, которые я проверил по умолчанию. (1 & 2 в этом примере)
Когда форма sumbitted, я хочу переопределить эти значения по умолчанию с значением $ _POST.

<?php 
    $syndication_check_1 = 'checked="checked"'; 
    $syndication_check_2 = 'checked="checked"'; 
    $syndication_check_3 = ''; 
    if (isset($_POST['syndication'])) { 
     // 
    } 
?> 

<form name="form" method="post" action=""> 
    <!-- this is what I use for radiobuttons --> 
    <legend>Sex:</legend> 
    <input type="radio" name="sex" id="sex-1" value="M" <?php echo (!isset($_POST['sex']) || $_POST['sex'] == "M") ? 'checked="checked"': ''; ?> /> 
    <label for="sex-1"><?= _("Male"); ?></label> 
    <input type="radio" name="sex" id="sex-2" value="F" <?php echo (isset($_POST['sex']) && $_POST['sex'] == "F") ? 'checked="checked"': ''; ?> /> 
    <label for="sex-2"><?= _("Female"); ?></label> 

    <!-- now something similar for checkboxes --> 
    <legend>Syndication:</legend> 
    <input type="checkbox" name="syndication[]" id="syndication-1" value="yahoo" <?= $syndication_check_1; ?> /> <!-- checked --> 
    <label for="syndication-1">Yahoo Real Estate</label> 
    <input type="checkbox" name="syndication[]" id="syndication-2" value="trulia" <?= $syndication_check_2; ?> /> <!-- checked --> 
    <label for="syndication-2">Trulia.com</label> 
    <input type="checkbox" name="syndication[]" id="syndication-3" value="zillow" <?= $syndication_check_3; ?> /> 
    <label for="syndication-3">Zillow.com</label> 
</form> 
+2

Что вы хотите сказать? – Beaker 2010-11-30 08:21:20

+0

да неясно – 2010-11-30 08:21:55

+0

Как я могу переопределить свои значения по умолчанию с помощью значений данных $ _POST? – FFish 2010-11-30 08:49:34

ответ

3

Id, вероятно, сделать что-то вроде этого ...

$syndicationCheck = array(
    'yahoo' => null, 
    'trulia' => null, 
    'zillow' => null 
); 

if(isset($_POST['syndication'])){ 
    foreach($_POST['syndication'] as $value){ 
    $syndicationCheck[$value] = 'checked'; 
    } 
} 


<legend>Syndication:</legend> 
    <input type="checkbox" name="syndication[]" id="syndication-1" value="yahoo" <?= $syndicationCheck['yahoo']; ?> /> <!-- checked --> 
    <label for="syndication-1">Yahoo Real Estate</label> 
    <input type="checkbox" name="syndication[]" id="syndication-2" value="trulia" <?= $syndicationCheck['trulia']; ?> /> <!-- checked --> 
    <label for="syndication-2">Trulia.com</label> 
    <input type="checkbox" name="syndication[]" id="syndication-3" value="zillow" <?= $syndicationCheck['zillow']; ?> /> 
    <label for="syndication-3">Zillow.com</label> 
1

Часто имена, как $ variable1, $ variable2, $ variable3 намеки, что она должна быть переменной $ [0], $ переменная [1 ], $ variable [2]. То, что у меня ниже, только немного более удобно сейчас, но вы действительно оцените это, если вы переходите к большему количеству флажков.

$ syndication_checkboxes будет содержать имена и проверять/не отмечать статус каждого флажка. Начальное присваивание представляет собой статус «по умолчанию», который может быть переопределен или не отменен $ _POST.

<?php 
    $syndication_checkboxes = array(array('name' => 'Yahoo Real Estate', 'checked' => 1), 
            array('name' => 'Trulia.com', 'checked' => 1), 
            array('name' => 'Zillow.com', 'checked' => 0)); 

    if isset($_POST['syndication']) 
    { 
     $arr = array_fill(0, count($syndication_checkboxes), 0) 
     foreach($_POST['syndication'] as $k=>$v) //unfortunately in this case, merges on numeric arrays dont overwrite. This could probably be written nicer as an array_walk or map 
       $arr[$k] = $v; 
     foreach($arr as $k=>$v) 
       $syndication_checkboxes[$k]['checked'] = $v; 
    } 

    //Everything up to and including <legend>Syndication... 

    foreach($syndication_checkboxes as $k=>$v) 
    { 
     $checkString = $v['checked'] ? "checked='checked'" : ''; 
     echo "<input type='checkbox' name='syndication[$k]' id='syndication-$k' value='1' $checkString />"; 
     echo "<label for='syndication-$k' >".$v['name']."</label>"; 
    } 
    echo "</form>" 
?> 

Теперь, если вы хотите добавить новые галочки все, что вам нужно сделать, это добавить его в $ syndication_checkboxes уступки до верхней. Это может даже произойти из базы данных с таблицами для «name» и «default-checked» вместо жесткого кодирования, которая будет приятной, если она станет действительно большой или вы хотите изменить ее с помощью инструмента администрирования или чего-то еще.

Смежные вопросы