返回表单时,for 循环中的多重选择会丢失数据

发布于 2024-12-12 21:45:20 字数 1983 浏览 2 评论 0原文

我有一个在 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
}

返回表单时(当其他字段之一未填写时)所选选项将丢失并且没有再次选择。

我哪里搞砸了?

I have an form with an multiple select in the while loop:

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
}

When the form is send:

$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]);
    }
}

Returning to the form:

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
}

When returning to the form (when one of the other fields is not filled in) the chosen option(s) are lost and not selected again.

Where did I messed up?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无边思念无边月 2024-12-19 21:45:21

您使用此标识符 'name_bewerking_id' 读取 POST 数据,

但选择名称由 $name_bewerking_id = 'bewerking_id 给出'.$i

You read POST data with this identifier 'name_bewerking_id'

but the select name is given by <?php echo $name_bewerking_id ?> with $name_bewerking_id = 'bewerking_id'.$i

花伊自在美 2024-12-19 21:45:21

如果假设您要在 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>

If assuming you are passing the form information between 3 different pages, you will need to use $_SESSION variables for that. Normal PHP variables cannot be passed between pages, only $_SESSION variables.

For example:

Page 1

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

Page 2

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

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

Page 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文