Лучший способ использовать PHP для повторного заполнения значения выбранного параметра после неудачной отправки формы? - PullRequest
2 голосов
/ 13 октября 2011

У меня есть эта форма с 10 выпадающими списками на выбор и заключительным флажком для отказа от ответственности внизу.

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

То, что у меня есть, работает, но это безумно избыточно, особенно если у меня будет 100 вопросов.

<select name="question1" id="question1">
    <?php if ($question[0] == '0') {
        $first = 'selected="selected"';
        $second = '';
        $third = '';
        $fourth = '';
    } elseif ($question[0] == '1') {
        $first = '';
        $second = 'selected="selected"';
        $third = '';
        $fourth = '';
    } elseif ($question[0] == '2') {
        $first = '';
        $second = '';
        $third = 'selected="selected"';
        $forth = '';
    } elseif ($question[0] == '3') {
        $first = '';
        $second = '';
        $third = '';
        $forth = 'selected="selected"';
    }
    ?>
    <option value="0" <?php echo $first; ?>>Answer 1</option>
    <option value="1" <?php echo $second; ?>>Answer 2</option>
    <option value="2" <?php echo $third; ?>>Answer 3</option>
    <option value="3" <?php echo $fourth; ?>>Answer 4</option>
</select>

Это только для 1 вопроса, так что вы можете себе представить, что мне придется повторить это для всех вопросов.Должен быть лучший способ сделать это?

Спасибо ...

Ответы [ 4 ]

3 голосов
/ 13 октября 2011
<option value="0" <?= ($question[0] == 0 ? "selected='selected'" : ""); ?>>Answer 1</option>
<option value="1" <?= ($question[0] == 1 ? "selected='selected'" : ""); ?>>Answer 1</option>
<option value="2" <?= ($question[0] == 2 ? "selected='selected'" : ""); ?>>Answer 1</option>
<option value="3" <?= ($question[0] == 3 ? "selected='selected'" : ""); ?>>Answer 1</option>

обычно как это делается.

0 голосов
/ 13 октября 2011

Попробуй это. У $questions есть все вопросы для пользователя:

$questions = array(
    // The first question
    array(
       'question' => 'The 1st question?'
       'answers' => array(
           'answer 1',
           'answer 2',
           'answer 3',
           'answer 4',
       )
    ),
    // The second question
    array(
        ...
    ),
    // etc
);

И $answer содержит все ответы пользователя, как это:

$answer = array(1, 2, 3, 2, ... );

Тогда вы можете переписать все ваши вопросы, как это:

* * 1010
0 голосов
/ 13 октября 2011

Вот как я это делаю:

$array_existing_values = array(3,5);
$array_options = array(1,2,3,4,5);
foreach(array_options as $value)
{
    $sel = null;
    if (in_array($array_existing_values,$array_options)
    {
         $sel = ' selected ';
    }
    $html_options .= "<option value='$value' $sel>$value</option>";
}

Добавление проверки к сезону.

0 голосов
/ 13 октября 2011

Насколько я знаю, элегантного решения не существует.Я склонен использовать условные выражения, такие как;

<option value="0" <?=($question[0] == 0 ? ' selected' : '')?>>Answer 1</option>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...