PHP $ _POST self: значения по умолчанию для флажков - PullRequest
0 голосов
/ 30 ноября 2010

ОК. Я отправляю данные с $ _POST самому себе.У меня есть несколько флажков, которые я установил по умолчанию.(1 и 2 в этом примере)Когда форма соответствует, я хочу переопределить эти значения по умолчанию значением $ _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 ]

3 голосов
/ 30 ноября 2010

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 голос
/ 30 ноября 2010

Часто имена, такие как $ variable1, $ variable2, $ variable3, являются подсказками того, что это должна быть $ variable [0], $ variable [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 вверху. Это может происходить даже из базы данных с таблицами для имен и проверок по умолчанию, вместо того, чтобы быть жестко закодированным, что будет хорошо, если оно станет действительно большим или вы захотите изменить его с помощью инструмента администратора или чего-то еще.

...