2011-05-27 16 views
6

अद्यतन करने के लिए कैसे करें मैं अजाक्स के साथ एक बहु-चरण फ़ॉर्म बना रहा हूं और फ़ॉर्म फ़ील्ड के मान के आधार पर प्रदर्शित टेक्स्ट को बदलना चाहता हूं। मैंने सोचा कि ऐसा करने का एक अच्छा तरीका सत्र चर के साथ होगा। मैं नए फ़ील्ड मान के साथ अपडेट करने के लिए सत्र कैसे कहूं? वर्तमान में, सत्र केवल प्रारंभिक मान को संग्रहीत करता है, लेकिन इसके लिए कोई अपडेट नहीं है। तो यदि कोई उपयोगकर्ता "जॉन" को पहले नाम के रूप में प्रवेश करता है और फिर बाद में वापस जाता है और इसे "फ्रैंक" में बदल देता है, तो "जॉन" नाम संग्रहित होता है।सत्र चर

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 के कुछ var_exports के आउटपुट और लाइन 6 पर $ _SESSION का उत्पादन करता है। – Paystey

+0

AJAX कोड को ट्रिगर करने के लिए आप किस ईवेंट का उपयोग कर रहे हैं? –

+0

@Jim AJAX कोड सबमिट बटन द्वारा ट्रिगर किया जा रहा है। मैं प्रत्येक खंड के भीतर फॉर्म के विभिन्न हिस्सों के साथ एक accordion का उपयोग कर रहा हूँ। – Ken

उत्तर

0

आप पृष्ठों के बीच एक सतत सत्र बनाना चाहते हैं, तो आप हर के शुरू में session_start कॉल करने की आवश्यकता स्क्रिप्ट कि सत्र केवल पहले ही नहीं, बल्कि लागू होना चाहिए।

PHP docssession_start के लिए कहता है कि फ़ंक्शन सत्र को तब तक जारी रखेगा जब यह पहले से मौजूद है।

+0

@Zach धन्यवाद देता है। मेरे पास प्रत्येक पृष्ठ की शुरुआत में session_start है। समस्या यह प्रतीत होती है कि प्रारंभिक रूप से दर्ज मूल्य तब भी जारी रहता है जब इसे बाद में बदला जाता है। – Ken

+0

क्या आप वाकई ajaxtest.php में '$ _SESSION ['name'] 'सेट कर रहे हैं? अपनी ब्राउज़र कुकीज़ को साफ़ करने और फ़ॉर्म को पुनः सबमिट करने का प्रयास करें। यदि यह खाली है, तो आपका फॉर्म उस चर को सेट नहीं कर रहा है। साथ ही, पूरे सत्र स्थिति को देखने के लिए 'var_dump ($ _ सत्र) 'आज़माएं। –

+0

@Zach मैंने एक var_dump ($ _ सत्र) किया था। नाम फ़ील्ड की जानकारी अपडेट नहीं होती है जब तक कि मैं पृष्ठ को रीफ्रेश नहीं करता। पृष्ठ को रीफ्रेश किए बिना सत्र को अपडेट करने के लिए कोई तरीका है? – Ken

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() घोषणा के बाद एक्सेस कर सकते हैं।

session की आवश्यकता नहीं है जब आप बदलना चाहते हैं क्योंकि आप उसी 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' 
संबंधित मुद्दे