2009-03-03 6 views
31

J'ai besoin de définir une variable PHP $ _SESSION en utilisant le jQuery. Si l'utilisateur clique sur une image, je veux enregistrer une information associée à cette image en tant que variable de session en php.

Je pense que je peux le faire en appelant une page php ou une fonction et en ajoutant cette information à la chaîne de requête.

Des idées. J'ai trouvé peu d'aide par google.

grâce Mike

Répondre

68

Vous ne pouvez pas le faire avec jQuery seul; vous aurez besoin d'une combinaison d'Ajax (que vous pouvez faire avec jQuery) et d'un backend PHP. Une version très simple pourrait ressembler à ceci:

HTML:

<img class="foo" src="img.jpg" /> 
<img class="foo" src="img2.jpg" /> 
<img class="foo" src="img3.jpg" /> 

Javascript:

$("img.foo").onclick(function() 
{ 
    // Get the src of the image 
    var src = $(this).attr("src"); 

    // Send Ajax request to backend.php, with src set as "img" in the POST data 
    $.post("/backend.php", {"img": src}); 
}); 

PHP (backend.php):

<?php 
    // do any authentication first, then add POST variable to session 
    $_SESSION['imgsrc'] = $_POST['img']; 
?> 
+18

Manquant session_start(); sur backend autre que ça, c'est un bon conseil! Merci Luke ... – Codex73

7

voudrez peut-être essayer de mettre la fonction PHP sur une autre page PHP, et utiliser un appel AJAX pour définir la variable.

5

Ce que vous cherchez est jQuery Ajax. Et puis il suffit de configurer une page php pour traiter la demande.

5

Beaucoup de réponses ici abordent le comment mais pas le pourquoi. Les paires clé/valeur PHP $ _SESSION sont stockées sur le serveur. Cela diffère d'un cookie, qui est stocké sur le navigateur. C'est pourquoi vous pouvez accéder aux valeurs dans un cookie à partir de PHP et de JavaScript. Pour ne rien arranger, les requêtes AJAX du navigateur n'incluent aucun des cookies que vous avez définis pour le site Web. Donc, vous devrez faire en sorte que JavaScript tienne le cookie d'identification de session et l'inclue dans chaque requête AJAX pour que le serveur puisse en faire la tête ou la queue. Du bon côté, les sessions PHP sont conçues pour basculer vers une variable HTTP GET ou POST si les cookies ne sont pas envoyés avec les en-têtes HTTP. Je voudrais examiner certains des principes des applications Web RESTful et l'utilisation des modèles de conception qui sont communs avec ces types d'applications au lieu d'essayer de mangle avec le gestionnaire de session.

3

J'ai aussi conçu une solution "setter valeur la session php" par moi-même (similaire à la solution de Luke Dennis. Pas grand-chose ici), mais après la mise en valeur de ma session, mes besoins étaient " sauter sur un autre fichier .php ". Ok, je l'ai fait, dans mon code jquery ... Mais quelque chose n'a pas marché tout à fait ...

Mon problème était assez facile:

-Après vous « $ » .post vos valeurs sur la petit fichier .php, vous devriez attendre une valeur de retour "succès/échec", et seulement après avoir lu cette valeur de réussite, effectuez le saut. Si vous sautez immédiatement sur le prochain grand.fichier php, la valeur de votre session n'a peut-être pas été définie sur le moteur d'exécution des sessions php, et vous aurez probablement lu "empty" lors de l'exécution de $ _SESSION ["my_var"]; à partir du fichier .php de destination.

Dans mon cas, pour corriger cette situation, j'ai changé mon code .post jQuery $ de cette façon:

$.post('set_session_value.php', { key: 'keyname', value: 'myvalue'}, function(ret){ 
    if(ret==0){ 
     window.alert("success!"); 
     location.replace("next_page.php"); 
    } 
    else{ 
     window.alert("error!"); 
    } 
}); 

Bien sûr, votre fichier "set_session_value.php", doit retourner « echo "0"; ou "echo" 1 "; '(ou quelles que soient les valeurs de succès dont vous pourriez avoir besoin).

Salutations.

1

Similaire à la réponse de Luke, mais avec GET.

Placez ce code php dans une page php, ex. getpage.php:

<?php 
$_SESSION['size'] = $_GET['size']; 
?> 

donnons le nom avec un script jQuery comme ceci:

$.get("/getpage.php?size=1"); 

D'accord avec Federico. Dans certains cas, vous pouvez rencontrer des problèmes lors de l'utilisation de POST, mais vous ne savez pas si cela peut être lié au navigateur.

0

Cela fonctionne sur firefox, si vous changez onClick() pour cliquer() dans la partie javascript.

$("img.foo").click(function() 
 
{ 
 
    // Get the src of the image 
 
    var src = $(this).attr("src"); 
 

 
    // Send Ajax request to backend.php, with src set as "img" in the POST data 
 
    $.post("/backend.php", {"img": src}); 
 
});

Questions connexes