使用表单保存多个会话变量

时间:2013-11-22 12:13:03

标签: php forms session session-variables

我正在处理一个包含维度字段的表单,客户可以填写这些字段并提交它们,它们将保存在会话变量中。到目前为止,我成功了1个表格,但是在保存了1次字段数据之后,他需要为客户填写一个表格(维度),还有另一个表格等等。

(我在标题的顶部开始了会议)

表格:

<form method="POST">

   <label>A:</label>
   <input name="wz_saving_a" type="text" />

   <label>B:</label>
   <input name="wz_saving_b" type="text" />

   <input name="wz_submit_saving_1" type="submit" class="add_button" value="Add"  />

</form>

用于在$ _SESSION中保存数据的PHP:

if(isset($_POST['wz_submit_saving_1'])) :

    // Save submit
    $_SESSION['wz_submit_saving_1'] = $_POST['wz_submit_saving_1'];

    // Save wz_saving_a in session
    $_SESSION['wz_saving_a'] =  $_POST['wz_saving_a'];

    // Save wz_saving_b in session
    $_SESSION['wz_saving_b'] = $_POST['wz_saving_b'];

endif;

提交后,我将提交的数据显示给客户,如:

<?php if(isset($_SESSION['wz_submit_saving_1'])) : ?>

<div id="wz_config_1" class="wz_config">

<ul>
   <li>Your dimensions:</li>
   <li>A: <?php if(isset($_SESSION['wz_saving_a'])) : echo $_SESSION['wz_saving_a']; endif; ?> mm</li>
   <li>B: <?php if(isset($_SESSION['wz_saving_b'])) : echo $_SESSION['wz_saving_b']; endif; ?> mm</li>
</ul>   

<?php endif; ?>  

所以这适用于1提交,如果我提交表单,第一个会话变量将由新数据刷新,但现在我需要做一些事情,所以客户可以添加多个维度集并保存在会话中。

我的想法是在每个表单提交后通过_1 _2 _3更改字段的每个名称。但我不知道如何解决这个问题,所以我希望有人可以给我一些建议。

如果你愿意,我可以提供我的例子的网址吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用多维会话数组:

$_SESSION['wz_saving_b'][$_POST['wz_saving_b']] = $_POST['wz_saving_b'];

或者,只需使用[]添加新密钥,但您将拥有重复的值

$_SESSION['wz_saving_b'][] = $_POST['wz_saving_b'];

假设用户在wz_saving_b中输入以下内容:

123

<?php
session_start();
?>
<form method="POST" action="">

   <label>A:</label>
   <input name="wz_saving_a" type="text" />

   <label>B:</label>
   <input name="wz_saving_b" type="text" />

   <input name="wz_submit_saving_1" type="submit" class="add_button" value="Add"  />

</form>
<?php
if(isset($_POST['wz_submit_saving_1'])):
    $_SESSION['wz_saving_b'][$_POST['wz_saving_b']] = $_POST['wz_saving_b'];
?>
<div id="wz_config_1" class="wz_config">

<ul>
   <li>Your dimensions:</li>
   <li>B: <?php if(isset($_SESSION['wz_saving_b'])): foreach($_SESSION['wz_saving_b'] as $k => $v) { echo "$v "; } endif; ?> mm</li>
</ul>
<?php endif; ?>


<?php
var_dump($_SESSION);
?>

输出:

    Your dimensions:
    B: 1 2 3 mm

array (size=1)
  'wz_saving_b' => 
    array (size=3)
      1 => string '1' (length=1)
      2 => string '2' (length=1)
      3 => string '3' (length=1)

请求的抽象:

<?php
session_start();
?>
<form method="POST" action="">

   <label>A:</label>
   <input name="wz_saving_a" type="text" />

   <label>B:</label>
   <input name="wz_saving_b" type="text" />

   <label>C:</label>
   <input name="wz_saving_c" type="text" />

   <label>D:</label>
   <input name="wz_saving_d" type="text" />

   <input name="wz_submit_saving_1" type="submit" class="add_button" value="Add"  />

</form>
<?php
if(isset($_POST['wz_submit_saving_1'])) {
    foreach($_POST as $key => $value) {
        if($key != 'wz_submit_saving_1') {
            $_SESSION[$key][] = $value;
        }
    }
}
?>
<div id="wz_config_1" class="wz_config">

<ul>
   <li>Your dimensions:</li>
   <?php foreach($_SESSION as $k => $v): ?>
    <?php foreach($v as $saving => $wz): ?>
   <li><?= strtoupper(substr($k, 10));?> : <?=$wz;?> mm</li>
    <?php endforeach; ?>
   <?php endforeach; ?>
</ul>


<?php
var_dump($_SESSION);
?>

我在这里用一些数字做了一些随机输入。输出是:

    Your dimensions:
    A : 1 mm
    A : 6 mm
    A : 5 mm
    B : 1 mm
    B : 6 mm
    B : 5 mm
    C : 4 mm
    C : 8 mm
    C : 5 mm
    D : 4 mm
    D : 7 mm
    D : 5 mm

array (size=4)
  'wz_saving_a' => 
    array (size=3)
      0 => string '1' (length=1)
      1 => string '6' (length=1)
      2 => string '5' (length=1)
  'wz_saving_b' => 
    array (size=3)
      0 => string '1' (length=1)
      1 => string '6' (length=1)
      2 => string '5' (length=1)
  'wz_saving_c' => 
    array (size=3)
      0 => string '4' (length=1)
      1 => string '8' (length=1)
      2 => string '5' (length=1)
  'wz_saving_d' => 
    array (size=3)
      0 => string '4' (length=1)
      1 => string '7' (length=1)
      2 => string '5' (length=1)

根据提供的代码,这应该有效,我尝试在位置1上输入一次2x毫米,然后4和{{1位于5的mm},输出为:

y

代码:

Rechte sparing 1

        Formaat van de sparing:
        A: 1 mm
        B: 2 mm
        Positionering van de sparing:
        x

Rechte sparing 1

        Formaat van de sparing:
        A: 4 mm
        B: 5 mm
        Positionering van de sparing:
        y