【问题标题】:Passing form information in a for-loop在 for 循环中传递表单信息
【发布时间】:2013-09-10 16:50:55
【问题描述】:

也许这是一个愚蠢的问题,但我想知道是否可以通过表单将信息传递到 for 循环中。

问题如下: 信息的传递有效,尽管他只传递了最后一个循环。例如,如果我单击循环 2 ($i = 2) 的提交按钮。命令$_POST['titel'] 只会记住最后一个循环($i = $numact-1) 中的信息,而不是循环2 ($i = 2)

例如,如果标题[0] = test0,标题[1] = test1,标题[2] = test2。然后我点击titel[0]下方的提交按钮,他传递了来自titel[2]的信息。有没有简单的方法来解决这个问题?

我有以下代码(为简单起见,我将其缩短);

<?php 
for ($i = 0; $i <= $numact-1; $i++) {

    echo "<tr><td width='150'>
        <input type='text' name='titel' value='$titel[$i]' />
        </td></tr>
        <tr><td><input type='submit' name='submitreg' value='Toon activiteit'/>
        </td></tr>";                        
}
?>

【问题讨论】:

    标签: php forms for-loop


    【解决方案1】:

    您一遍又一遍地使用相同的参数名称(name=titel - 您有一个类型并且可能打算写为 'title')所以当表单提交时 - 只会传递一个值。

    您可以通过将参数传递为:

    ...
    echo "<tr><td width='150'>
    <input type='text' name='titel$i' value='$titel[$i]' />
    </td></tr>
    <tr><td><input type='submit' name='submitreg' value='Toon activiteit'/>
    </td></tr>"; 
    ...
    

    并在另一边以title0title1 等形式阅读它。

    【讨论】:

    • 嘿,谢谢你们的快速回复。这确实是我的问题,我为所有循环使用了相同的名称。剩下的唯一问题是我不知道他们按下了哪个循环按钮。例如,如果他们按下循环按钮 0,他们会得到标题 test0,如果他们按下循环按钮 2,他们会得到 test2!
    • 呵呵是的,我知道这不是一个很好的方法,这就是我发布这个问题的原因!我想知道一个解决方案,或者对其他东西的建议。
    • @Mark 在这种情况下,您必须为每个参数创建不同的表单,在提交表单时您只想发布一个参数 - 否则单击每个提交按钮将发布所有参数...
    • @Mark 另一种(更好的)实现方式是使用复选框/单选按钮。这样您就可以提交所有参数,而另一方面只查找 checked/selected 的参数
    • 应该可以了,非常感谢!我怀疑这是最有效的方法。但是数据库中没有固定数量的活动必须被制作成一个新页面。这就是为什么我选择一个最大找到行数的 for 循环。
    【解决方案2】:

    正如this post 中所见,您只需在索引周围加上括号即可传入数组。 PHP 将为您重建数组。

    另外,您可能希望在表格末尾提交,而不是在每一行之后。您的代码应如下所示:

    <?php 
    for ($i = 0; $i <= $numact-1; $i++) {
        echo "<tr><td width='150'>
        <input type='text' name='titel['.$i.']' value='$titel[$i]' />
        </td></tr><tr><td><input type='submit' name='submitreg' value='Toon activiteit'/>
    </td></tr>";
    }
    ?>
    

    如果您选择使用不同的值,这种方法的优势在于它更具可扩展性。但是,Edson Junior 的方法稍微简单一些。

    【讨论】:

    • 嘿,不重要的是,每个活动都有自己的提交按钮,因此您可以按下活动下方的显示活动按钮。 (它是 20 个活动的列表)
    【解决方案3】:

    您可以将 name 属性更改为name=titel[],以便 PHP 自动将其转换为数组。不需要在title[]中指定索引。

    例如:

    <input type="text" name="titel[]" value="x" />
    <input type="text" name="titel[]" value="y" />
    <input type="text" name="titel[]" value="z" />
    

    当您提交表单时,PHP 会将其转换为

    "title" = array (
        0 => "x",
        1 => "y",
        2 => "z"
    );
    

    如果您需要检查点击了哪个按钮,您可以将输入 type="submit" 更改为 &lt;input type="button" name="submitreg" class="submitreg" id="whatever_you_want_but_has_to_be_unique" /&gt;。 在循环之外,添加另一个输入,它将具有按下的按钮的值。

    <input type="hidden" id="buttonPressed" name="buttonPressed" value="" />
    

    然后添加此代码(您需要将 jQuery 库导入页面以便它理解下面的代码,即 jQuery,这里是 Docs

    <script type="text/javascript">
    $(function(){
        $("button.submitreg").live("click", function(){
            var buttonPressed = $(this).attr("id");
            ("input#buttonPressed").val(buttonPressed);
        });
    }
    </script>
    

    您需要做的就是获取 buttonPressed 的值,然后您就会知道按下了哪个按钮。

    【讨论】:

    • 是的,谢谢,这对我有用,就像之前的建议所说的那样。但是,例如,我怎么知道他们是否按下了值 0 => x 或 2 => z 的按钮。那么有没有办法获得一个 _post[$variable] 来声明他们按下的循环按钮?
    猜你喜欢
    • 2016-01-17
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2019-12-21
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    相关资源
    最近更新 更多