【问题标题】:Form value passing without using input tags不使用输入标签的表单值传递
【发布时间】:2014-02-26 03:03:05
【问题描述】:

我做了 2 个视图,它们都有表单。第一个是基本细节,然后添加一个带有数值的文本框。

例如: 姓: 成员:

提交按钮:继续

然后,我将它(作为$data=array('name'=>$_POST['familyname'],'members'=>$_POST['family_members']); 传递给控制器​​,然后传递给新视图。

然后我在这里循环,

for($counter=1;$counter<$members+1;$counter++)
{
echo "<input type='text' name='membername$counter'/>";
}

所以之后又将它传递给另一个控制器函数。 但是我的问题是,我如何将 $name 和 $members 值与来自第二种形式的新值一起传递。

不使用隐藏的输入类型并将它们存储为它们的值

【问题讨论】:

    标签: php forms codeigniter


    【解决方案1】:

    这正是sessions 的用途。

    会话是一种根据唯一会话 ID 为单个用户存储数据的简单方法。这可用于在页面请求之间保持状态信息。会话 ID 通常通过会话 cookie 发送到浏览器,并且 ID 用于检索现有的会话数据。

    【讨论】:

    • 我认为会话应该用于识别信息,而不是存储中间表单数据。
    • 有什么特别的原因吗?
    • 我认为 $session 用于重要数据,例如用户登录并且您使用会话时,因此只有登录用户才能访问某些页面。我错了吗?
    • 它可以用于那个和更多。它们不限于某些任务。
    • @JohnConde 在会话(或 cookie)中存储中间数据时,在启动此表单的两个或多个实例时可能会遇到问题。一个最终会覆盖另一个。
    【解决方案2】:

    您必须不断传递所有信息。有几种方法可以做到这一点。

    简单的方法是在第二个表单中创建一个&lt;input type="hidden"&gt; 字段,其中包含序列化第一个表单的所有信息。

    类似:

    $first_form_data = $_POST["..."];
    echo '<input type="hidden" name="first_form_data"
      value="' . htmlspecialchars(json_encode($first_form_data)) . '" />';
    

    我使用json_encode 作为序列化程序。您也可以使用serialize 或任何适用于此格式的序列化程序。

    要反序列化数据,请分别使用json_decodeunserialize


    更复杂和复杂的解决方案是让您将数据存储在其他地方并通过某种令牌引用它,然后只传递令牌。如果数据集太大而您不想每次都传递它,这会很有用。

    【讨论】:

    • 我在哪里初始化 $first_form_data?第二种观点?还是第二个视图的控制器?
    • $first_form_data 是我选择的一个变量名称,表示您正在从第一个表单中收集所有数据并将其注入到第二个表单中。这在实践中的效果取决于您如何将这两种形式联系在一起。如果您不确定:有没有可以分享的代码?
    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 2012-10-03
    • 2019-07-22
    • 2019-11-18
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多