2011-05-27 81 views
6

Estoy creando un formulario de pasos múltiples con Ajax y me gustaría cambiar el texto que se muestra en función del valor de un campo de formulario. Pensé que una buena forma de hacerlo sería con una variable de sesión. ¿Cómo le digo a la sesión que actualice con el nuevo valor del campo? Actualmente, la sesión solo parece almacenar el valor inicial, pero no las actualizaciones. Entonces, si un usuario ingresa "Juan" como primer nombre y luego regresa y lo cambia a "Frank", "Juan" es el nombre almacenado.Cómo actualizar una variable de sesió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

no veo una manera que podría ser un problema PHP. Parece un problema de código. Publique su código ajax que envía la solicitud y, preferiblemente, el resultado de algunas var_exports de $ key y $ _SESSION en la línea 6. – Paystey

+0

¿Qué evento está utilizando para activar el código ajax? –

+0

@Jim El código ajax se activa con un botón de envío. Estoy usando un acordeón con diferentes partes del formulario dentro de cada sección. – Ken

Respuesta

0

Si desea crear una sesión persistente entre páginas, tiene que llamar session_start al comienzo de cada script al que se debe aplicar la sesión, no solo el primero.

El PHP docs para session_start dice que la función provocará que la sesión persista si ya existe.

+0

@Zach Gracias. Tengo una session_start al comienzo de cada página. El problema parece ser que el valor ingresado inicialmente persiste incluso si se cambia posteriormente. – Ken

+0

¿Estás seguro de que estás configurando '$ _SESSION ['name']' en ajaxtest.php? Intente borrar las cookies de su navegador y vuelva a enviar el formulario. Si está vacío, su formulario no está configurando esa variable. Además, pruebe 'var_dump ($ _ SESSION)' para ver el estado completo de la sesión. –

+0

@Zach Hice un var_dump ($ _ SESSION). La información para el campo de nombre no parece actualizarse a menos que actualice la página. ¿Hay alguna manera de forzar la actualización de la sesión sin actualizar la página? – Ken

0

Así es como debería funcionar $ _SESSION. Debido a que la misma variable podría estar en uso en diferentes páginas, y en proceso, por lo que cambiar los valores será inaceptable.

En su caso, está tratando de actualizar $ _SESSION ['name'] y necesita mantener intactos todos los demás valores de sesión. La solución posible es

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

puede actualizar el $_SESSION como actualizar una variable simple. El $_SESSION es una var global y puede acceder a él después de la declaración session_start().

No es necesario unset el session cuando desea cambiar porque está trabajando en la misma dirección memory.

Por ejemplo:

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

navegación

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