Проблема с выбранным значением в форме - PullRequest
0 голосов
/ 03 июня 2010

В настоящее время у меня есть встроенная форма, в которой после проверки, если есть ошибки, данные остаются на экране для исправления потребителем. Пример того, как это работает, скажем, «Год рождения»:

<select name="DOB3">
    <option value="">Year</option>
    <?php
        for ($i=date('Y'); $i>=1900; $i--)
  {
    echo "<option value='$i'";
    if ($fields["DOB3"] == $i)
      echo " selected";
    echo ">$i</option>";
  }
  ?>
</select>

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

<?php

$states_arr = array('AL'=>"Alabama",'AK'=>"Alaska",'AZ'=>"Arizona",'AR'=>"Arkansas",'CA'=>"California",'CO'=>"Colorado",'CT'=>"Connecticut",'DE'=>"Delaware",'DC'=>"District Of Columbia",'FL'=>"Florida",'GA'=>"Georgia",'HI'=>"Hawaii",'ID'=>"Idaho",'IL'=>"Illinois", 'IN'=>"Indiana", 'IA'=>"Iowa",  'KS'=>"Kansas",'KY'=>"Kentucky",'LA'=>"Louisiana",'ME'=>"Maine",'MD'=>"Maryland", 'MA'=>"Massachusetts",'MI'=>"Michigan",'MN'=>"Minnesota",'MS'=>"Mississippi",'MO'=>"Missouri",'MT'=>"Montana",'NE'=>"Nebraska",'NV'=>"Nevada",'NH'=>"New Hampshire",'NJ'=>"New Jersey",'NM'=>"New Mexico",'NY'=>"New York",'NC'=>"North Carolina",'ND'=>"North Dakota",'OH'=>"Ohio",'OK'=>"Oklahoma", 'OR'=>"Oregon",'PA'=>"Pennsylvania",'RI'=>"Rhode Island",'SC'=>"South Carolina",'SD'=>"South Dakota",'TN'=>"Tennessee",'TX'=>"Texas",'UT'=>"Utah",'VT'=>"Vermont",'VA'=>"Virginia",'WA'=>"Washington",'WV'=>"West Virginia",'WI'=>"Wisconsin",'WY'=>"Wyoming");

    function showOptionsDrop($array, $active, $echo=true){
        $string = '';

        foreach($array as $k => $v){
            $s = ($active == $k)? ' selected="selected"' : '';
            $string .= '<option value="'.$k.'"'.$s.'>'.$v.'</option>'."\n";     
        }

        if($echo) {   echo $string;}
        else {       return $string;}
    }
?> 

Затем я вызываю функцию из формы, используя:

<td><select name="State"><option value="">Choose a State</option><?php showOptionsDrop($states_arr, null, true); ?></select></td>

Не уверен, что мне не хватает, но я хотел бы получить любую помощь, если кто-то увидит ошибку в моем коде.

Спасибо!

1 Ответ

1 голос
/ 03 июня 2010

Посмотрите на код:

<?php showOptionsDrop($states_arr, null, true); ?>

Вы передаете null, поэтому $active всегда будет null. Состояние

($active == $k)

будет никогда мы оцениваем как true.

Вместо этого вы должны передать значение, полученное из формы, например ::

<?php showOptionsDrop($states_arr, isset($fields['State']) ? $fields['State'] : null,  true); ?>

Вы действительно должны попытаться отделить PHP от HTML, особенно в вашем первом примере

Обновление:

На самом деле это не так уж и много, но рассмотрите возможность использования альтернативного синтаксиса для структур управления :

<select name="DOB3">
    <optgroup label="Year">
    <?php for ($i=date('Y'); $i>=1900; $i--) : ?>
        <option value="<?php echo $i ?>" 
             <?php echo ($fields["DOB3"] == $i) ? 'selected="selected"' : '' ?> > 
             <?php echo $i ?> 
        </option>
    <?php endforeach; ?>
    </optgroup>
</select>

Также, если вы хотите присвоить опциям какую-либо метку, вы можете сделать это с помощью HTML-тега optgroup (это нельзя выбрать).

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