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

Php 使用表单保存多个会话变量,php,forms,session,session-variables,Php,Forms,Session,Session Variables,我正在制作一个表单,其中包含维度字段,客户可以填写并提交这些字段,这些字段将保存在会话变量中。到目前为止,我成功地完成了1张表单,但在保存了1次字段数据后,客户需要能够再次填写表单(用于尺寸),以及其他表单等等 (我在标题顶部开始了会话) 表格: <form method="POST"> <label>A:</label> <input name="wz_saving_a" type="text" /> <label&g

我正在制作一个表单,其中包含维度字段,客户可以填写并提交这些字段,这些字段将保存在会话变量中。到目前为止,我成功地完成了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>
提交后,我向客户显示提交的数据,如:

<?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; ?>  

  • 您的尺寸:
  • A:嗯
  • B:嗯
所以这适用于1 submit,如果我提交表单,第一个表单的会话变量将被新数据刷新,但现在我需要做一些事情,以便客户可以添加多个维度集并保存在会话中

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

如果你愿意,我可以给出我的示例的url


谢谢

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

$_SESSION['wz_saving_b'][$_POST['wz_saving_b']] = $_POST['wz_saving_b'];
或者,只需使用[]添加新的键,但您将拥有重复的值

$_SESSION['wz_saving_b'][] = $_POST['wz_saving_b'];
假设用户在wz__b中键入以下内容:

1
2
3

<?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);
?>

请求的抽象:

<?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);
?>

根据提供的代码,这应该可以工作,我尝试在位置
x
上输入一次
1
2
mm,然后在位置
y
上输入
4
5
mm,输出为:

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
代码:


回收备用1
    • 范德斯帕林格式:
    • A:嗯
    • B:嗯
    • 定位车去备用:

我觉得有趣的是,您在示例代码中使用了数组,但您从未想到数组可以是多维的?如果您可以简单地使用
$\u会话['your\u form\u id']['your\u form\u data\u key']]
并使用它,那么为什么要使用附加有_a、_b、_c的数组键呢?我刚刚开始使用会话变量,所以这对我来说是新的。但是,您的意思是可以按特定形式保存会话变量吗?是的,您可以在$\u会话中保存特定形式的数据。这是一个数组,你可以用任何你喜欢的方式使用它。好吧,这对我有点帮助,但它不能解决我的问题,因为我需要在每次提交后更改表单名称,对吗?否则就没有第二张表格可以提交了?好吧,但我不明白这怎么能解决我的问题。这是我作品的网址,也许你能更好地理解我的问题。您可以看到,您可以存储1个表单,但我需要存储更多表单。你不明白的事。它解决了您的问题,因为在$_会话['wz_saving_b']中,您有一个带有POST-ed值键的数组。可以做得更好,但现在这是我的例子。看到我的编辑打印。好的,谢谢你的帮助,我不完全理解,但我会尝试。我改变了一点代码。你不需要更多的表格。每次用户返回添加尺寸时,它们都将被存储和打印。好的,谢谢。但是我需要为每个提交的表单显示整个“wz_配置”,其中A和B是您现在只在B上应用的。我可以通过使用您的foreach语句来做到这一点,但是对于每个$会话['wz_submit_Save_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)
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
<?php

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

    $straight_saving = array(
        'wz_str_saving' => $_POST['wz_str_saving'],
        'wz_saving_a' => $_POST['wz_saving_a'],
        'wz_saving_b' => $_POST['wz_saving_b'],
        'wz_submit_saving_1' => $_POST['wz_submit_saving_1']
    );

    $_SESSION['straight_saving'][] = $straight_saving;

endif;


if(isset($_SESSION['straight_saving'])) : 

    foreach($_SESSION['straight_saving'] as $sav) {

?>

<div class="wz_config">

    <h3>Rechte sparing 1</h3>


    <ul>
        <li>
            <ul>
                <li>Formaat van de sparing:</li>
                <li>A: <?php echo $sav['wz_saving_a']; ?> mm</li>
                <li>B: <?php echo $sav['wz_saving_b']; ?> mm</li>
            </ul>
        </li>

        <li>
            <ul>
                <li>Positionering van de sparing:</li>
                <li><?php echo $sav['wz_str_saving']; ?></li>
            </ul>
        </li>
    </ul>

    <div class="clear"></div>

</div><!--End wz_config_1-->

<?php } endif; ?>