2011-05-27 36 views
6

Tôi đang tạo biểu mẫu nhiều bước với Ajax và muốn thay đổi văn bản được hiển thị dựa trên giá trị của trường biểu mẫu. Tôi nghĩ rằng một cách tốt để làm điều này sẽ là với một biến phiên. Làm thế nào để tôi nói phiên để cập nhật với giá trị trường mới? Hiện tại, phiên chỉ dường như lưu trữ giá trị ban đầu, nhưng không có bất kỳ cập nhật nào đối với nó. Vì vậy, nếu người dùng nhập "John" làm tên và sau đó quay lại và thay đổi thành "Frank", "John" là tên được lưu trữ.Cách cập nhật biến phiên

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

Tôi không thấy một cách mà có thể là một vấn đề PHP. Nó trông giống như một vấn đề mã. Đăng mã ajax của bạn gửi yêu cầu và ưu tiên đầu ra của một số var_exports của $ key và $ _SESSION trên dòng 6. – Paystey

+0

Bạn đang sử dụng sự kiện nào để kích hoạt mã ajax? –

+0

@Jim Mã ajax đang được kích hoạt bằng nút gửi. Tôi đang sử dụng accordion với các phần khác nhau của biểu mẫu trong mỗi phần. – Ken

Trả lời

0

Nếu bạn muốn tạo ra một phiên dai dẳng giữa các trang, bạn cần phải gọi session_start vào đầu mỗi tập lệnh mà phiên sẽ áp dụng cho, không phải phiên đầu tiên.

PHP docs cho session_start cho biết chức năng sẽ khiến phiên tồn tại nếu nó đã tồn tại.

+0

@Zach Cảm ơn bạn. Tôi có một session_start ở đầu mỗi trang. Vấn đề dường như là giá trị được nhập ban đầu vẫn còn ngay cả khi nó được thay đổi sau đó. – Ken

+0

Bạn có chắc là bạn đang đặt '$ _SESSION ['name']' trong ajaxtest.php? Thử xóa cookie trình duyệt của bạn và gửi lại biểu mẫu. Nếu nó trống, thì biểu mẫu của bạn không đặt biến đó. Ngoài ra, hãy thử 'var_dump ($ _ SESSION)' để xem toàn bộ trạng thái phiên. –

+0

@Zach Tôi đã thực hiện một var_dump ($ _ SESSION). Thông tin cho trường tên dường như không cập nhật trừ khi tôi làm mới trang. Có cách nào để buộc phiên cập nhật mà không làm mới trang không? – Ken

0

Thats cách $ _SESSION hoạt động. Bởi vì cùng một biến có thể được sử dụng ở các trang khác nhau, và đang được xử lý và do đó thay đổi giá trị sẽ không thể chấp nhận được.

Trong trường hợp của bạn, bạn đang cố cập nhật $ _SESSION ['name'] và cần giữ nguyên tất cả các giá trị phiên khác. Giải pháp có thể là

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

Bạn có thể cập nhật $_SESSION như bạn cập nhật một biến đơn giản. $_SESSION là một var toàn cầu và bạn có thể truy cập nó sau khi khai báo session_start().

Không bắt buộc phải unsetsession khi bạn muốn thay đổi vì bạn đang làm việc tại cùng một địa chỉ memory.

Ví dụ:

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']; 

Navigation

index.php -> anotherpage.php -> checkpage.php // output 'newValue' 
Các vấn đề liên quan