Множественный выбор в цикле for теряет данные при возврате в форму - PullRequest
0 голосов
/ 29 октября 2011

У меня есть форма с множественным выбором в цикле while:

while ($row_i = mysql_fetch_array($res_i))
{
    $i++;

    // maak select name
    $name_bewerking_id = 'bewerking_id'.$i;
    ?>

    <tr valign="top">
        <td>
        <select name="<?php echo $name_bewerking_id ?>[]" multiple="multiple" size="2">
        <?php
            $sql = "SELECT id, bewerking FROM bewerkingen ORDER BY bewerking ASC";
            $res = mysql_query($sql,$con);
            while ($row = mysql_fetch_assoc($res))
            { ?>
                <option value="<?php echo $row['id']; ?>"><?php echo $row['bewerking']; ?></option>
        <?php } ?>
        </select>
        </td>
    </tr>
<?php
}

При отправке формы:

$bewerking_id[$i] = array();
$bewerking_id[$i] = $_POST['name_bewerking_id'][$i];

if(isset($bewerking_id_temp[$i]))
{
    foreach($bewerking_id_temp[$i] as $temp[$i])
    {
        array_push($bewerking_id[$i], $temp[$i]);
    }
}

Возвращаясь к форме:

for ($i = 0; $i <= $aantal_regels_corr; $i++)
{
    // maak select name
    $name_bewerking_id = 'bewerking_id'.$i;
    ?>

    <tr valign="top">
        <td>
        <select name="<?php echo $name_bewerking_id ?>[]" multiple="multiple" size="2">
        <?php
            $sql = "SELECT id, bewerking FROM bewerkingen ORDER BY bewerking ASC";
            $res = mysql_query($sql,$con);
            while ($row = mysql_fetch_assoc($res))
            { ?>
                <option <?php if(isset($bewerking_id[$i]) && in_array($row['id'], $bewerking_id[$i])){ echo 'selected="selected"'; } ?> value="<?php echo $row['id']; ?>"><?php echo $row['bewerking']; ?></option>
        <?php } ?>
        </select>
        </td>
    </tr>
<?php
}

При возврате в форму (когда одно из других полей не заполнено) выбранные параметры теряются и не выбираются снова.

Где я все испортил?

Ответы [ 2 ]

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

Если вы предполагаете, что вы передаете информацию о форме между 3 разными страницами, вам потребуется использовать переменные $ _SESSION. Обычные переменные PHP нельзя передавать между страницами, только переменные $ _SESSION.

Например:

Страница 1

<form ...>
    <input name="text1" type="text" />
    <input type="submit" />
</form>

Страница 2

// must start the session before session variables can be used
start_session();

$inputTextBox1 = $_SESSION["textBox1"] = $_POST["text1"];

Страница 3

<?php start_session(); ?>
<html>
    ...

    <form ...>
        <select>
            <?php while ... { ?>
                <option <?php if(!empty($_SESSION["textBox1"])) { echo "selected=\"selected\""; } ?>>Some Text</option>
            <?php } // End while ?>
        </select>
    </form>

    ...
</html>
0 голосов
/ 29 октября 2011

Вы читаете данные POST с этим идентификатором 'name_bewerking_id'

но выбранное имя дается <?php echo $name_bewerking_id ?> с $name_bewerking_id = 'bewerking_id'.$i

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