2011-05-27 107 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'