2011-05-27 99 views
6

我正在使用Ajax创建多步表单,并且希望更改基于表单字段值显示的文本。我认为这样做的好方法是使用会话变量。我如何告诉会话使用新字段值进行更新?目前,该会话似乎只存储初始值,但不包含任何更新。因此,如果用户输入“John”作为名字,然后返回并将其更改为“Frank”,则“John”是存储的名称。如何更新会话变量

if (!isset($_SESSION)) { 
session_start(); 
$_SESSION['formStarted'] = true; 
$_SESSION['timestamp'] = date("M d Y H:i:s"); 
$_SESSION[$key] = $value; 

<p>Your name begins with the letter <?php if ($_SESSION['name'] =='Frank') 
    {echo 'F';}?><p> 

的jQuery:

$("#form").validate({ 
    //... 
    submitHandler: function(form) { 

    //... 
    $(form).ajaxSubmit({    
    type: "POST", 
    data: { 
     name : $('#name').val(), 
//... 
    }, 
    dataType: 'json', 
    url: '../ajaxtest.php', 
    error: function() {alert("There was an error processing this page.");}, 
    success: 
     function(data) { 
     $('#output1').html(data.message.join(' ')).show(500); 
     $('#ouput1').append(data); 
//... 

ajaxtest.php:

session_start(); 

$expected = array( 
'name'=>'string', 
//... 
); 

//... 

$return['message']=array(); 
if(!empty($_POST['name'])){ 
    $return['message'][] = '' . htmlentities($_POST['name'], ENT_QUOTES, 'UTF-8'); 
    } 
//... 
echo json_encode($return); 
+2

我不明白的方式,可能是一个PHP的问题。它看起来像一个代码问题。发布提交请求的ajax代码,并优先输出第6行的$ key和$ _SESSION的某些var_exports的输出。 – Paystey 2011-05-27 23:25:58

+0

您使用什么事件触发ajax代码? – 2011-05-27 23:31:51

+0

@Jim ajax代码由提交按钮触发。我在每节中使用带有不同部分形式的手风琴。 – Ken 2011-05-27 23:46:42

回答

0

如果你想创建页面之间的持久会话,你需要在每开始打电话session_start会话应该适用的脚本,而不仅仅是第一个脚本。

PHP docs对于session_start表示如果该会话已存在,该会话将持续存在。

+0

@Zach谢谢。我在每个页面的开头都有一个session_start。问题似乎是,即使后来改变,最初输入的值仍然存在。 – Ken 2011-05-27 23:48:13

+0

你确定你在ajaxtest.php中设置了'$ _SESSION ['name']'吗?尝试清除浏览器Cookie并重新提交表单。如果它是空的,那么表单不会设置该变量。另外,请尝试'var_dump($ _ SESSION)'查看整个会话状态。 – 2011-05-27 23:51:00

+0

@Zach我做了一个var_dump($ _ SESSION)。除非我刷新页面,否则名称字段的信息似乎不会更新。有没有办法强制会话更新而不刷新页面? – Ken 2011-05-28 00:02:08

0

这就是$ _SESSION应该如何工作。因为相同的变量可能在不同的页面上使用,并且正在处理中,所以更改值将是不可接受的。

对于您的情况,您尝试更新$ _SESSION ['name']并需要保持所有其他会话值不变。可能的解决方案是

<?php 
session_start(); 
unset($_SESSION['name']);//remove $_SESSION['name'] 
session_regenerate_id();//Copies all other session variables on to new id 
$_SESSION["name"] = $newValue;//Create new session variable 'name'. 
session_write_close(); 
?> 
0

您可以像更新简单变量那样更新$_SESSION$_SESSION是一个全局变量,你可以在session_start()声明后访问它。

当您想要更改时,不需要unsetsession,因为您正在以相同的memory地址工作。

例如:

的index.php

<?php 
    session_start(); 
    $_SESSION['key'] = 'firstValue'; 

anotherpage.php

<?php 
    session_start(); 
    session_regenerate_id() // that's not required 
    $_SESSION['key'] = 'newValue'; 

checkpage.php

<?php 
    session_start(); 
    echo $_SESSIOn['key']; 

导航

index.php -> anotherpage.php -> checkpage.php // output 'newValue'