CodeIgniter set_select не переполняется после публикации - PullRequest
0 голосов
/ 21 февраля 2012

У меня есть окно выбора, созданное в CodeIgniter. Когда я вытаскиваю значение из базы данных, форма заполняется без проблем. Но после отправки формы поле выбора сбрасывается в ноль.

Вот мой код:

<select name="week[tuesday][startam]" id="" class="small">
    <?php for( $i = 0; $i < 24; $i=$i + 0.25 ):?>
           <option value="<?php echo $i; ?>"<?php echo set_select('week[tuesday][startam]', $i, ($i==(float)$model_week['tuesday']['startam'])); ?>><?php printf('%02d:%02d', floor($i), ( ($i-floor($i))*60 ) ); ?></option>
    <?php endfor; ?>
</select>

Я задавался вопросом, была ли проблема в том, что set_select() сравнивает значение $_POST[week][tuesday][startam] (которое представляет собой строку) с $i (которое представляет собой число с плавающей запятой). Но приведение $i к строке, похоже, не имеет значения.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 22 февраля 2012

Благодаря комментарию @chaft я снова просмотрел свои правила проверки и нашел поля, которые мне не хватало.Я добавил их в набор правил, и теперь все работает как положено.Итак, для приведенного выше кода у меня есть:

$validation_rules = array(
    array(
        'field' => 'week[tuesday][startam]',
        'label' => 'Tuesday morning start',
        'rules' => 'trim'
    )
)
$this->form_validation->set_rules( $validation_rules );
$is_valid = $this->form_validation->run();
0 голосов
/ 16 мая 2013

Я столкнулся с той же проблемой, что и JasonC, при проверке формы.У меня было 2 поля, но только 1 было правильно установлено после публикации.Мне не приходило в голову, что проверка формы вызовет такую ​​проблему.Благодаря шату!

0 голосов
/ 21 февраля 2012

Возможно, потому что после отправки нет начального значения для $ model_week ['tuesday'] ['startam'] и, следовательно, для set_select не задан третий параметр, равный TRUE

Проверьте для $ _POST иесли установлено, установите значение к опубликованному значению;

if($_POST){
    $model_week['tuesday']['startam']=$_POST['week']['tuesday']['startam'];
}else{
    $model_week['tuesday']['startam']=5;//or initial db value
}

    <select name="week[tuesday][startam]" id="" class="small">
        <?php for( $i = 0; $i < 24; $i=$i + 0.25 ):?>
               <option value="<?php echo $i; ?>"<?php echo set_select('week[tuesday][startam]', $i, "FALSE"); ?>><?php printf('%02d:%02d', floor($i), ( ($i-floor($i))*60 ) ); ?></option>
        <?php endfor; ?>
    </select>

^ посмотрим, можно ли получить этот код, чтобы когда-либо иметь выбранное значение, отличное от 00: 00

Вы не можете.Потому что у вас никогда не будет выбран параметр без 1 set_selected с третьим параметром в качестве ИСТИНЫ, будь то при загрузке страницы по умолчанию или после отправки формы.


Вот быстрый и грязный пример:

public function index(){
    if($_POST){
        $model_week['tuesday']['startam']=$_POST['week']['tuesday']['startam'];
    }else{
        $model_week['tuesday']['startam']=5;//would be the default value
    }
?>
<form action="" method="POST" accept-charset="utf-8">
    <select name="week[tuesday][startam]" id="" class="small">
        <?php for( $i = 0; $i < 24; $i=$i + 0.25 ):?>
            <option value="<?php echo $i; ?>"
                <?php echo set_select('week[tuesday][startam]', $i, ($i==(float)$model_week['tuesday']['startam'])); ?>>
                <?php printf('%02d:%02d', floor($i), ( ($i-floor($i))*60 ) ); ?>
            </option>
        <?php endfor; ?>
    </select>
    <input type="submit" name="some_name" value="rrrr" id="some_name">
    </form>
<?php
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...