web-dev-qa-db-fra.com

Passer la variable Javascript à PHP via ajax

J'essaie de transmettre une variable de mon code javascript au code côté serveur PHP. Je sais que cela doit être fait via un appel ajax que je crois avoir fait correctement, mais accéder à la variable que je passe de mon ajax à mon php est lorsque je rencontre des problèmes car je suis nouveau sur php. Voici mon code que j'ai jusqu'à présent:

$(document).ready(function() {

            $(".clickable").click(function() {
                var userID = $(this).attr('id');
                //alert($(this).attr('id'));
                $.ajax({
                    type: "POST",
                    url: 'logtime.php',
                    data: "userID=" + userID,
                    success: function(data)
                    {
                        alert("success!");
                    }
                });
            });
        });

<?php //logtime.php
$uid = isset($_POST['userID']);
//rest of code that uses $uid
?>

J'essaie de transmettre ma variable javascript "userID" à php ($ userID), mais je me suis trompé quelque part sur la route. Merci pour l'aide!

13
Staleyr

Transmettez les données de ce type à l'appel ajax ( http://api.jquery.com/jQuery.ajax/ ):

data: { userID : userID }

Et dans votre PHP procédez comme suit:

if(isset($_POST['userID']))
{
    $uid = $_POST['userID'];

    // Do whatever you want with the $uid
}

La fonction isset() a pour but de vérifier si la variable donnée existe, et non pour obtenir sa valeur.

34
mirrormx

Puisque vous n'utilisez pas JSON en tant que type de données sans votre appel AJAX, je suppose que vous ne pouvez pas accéder à la valeur car le PHP que vous avez donné ne sera jamais que vrai ou faux. isset est une fonction pour vérifier si quelque chose existe et a une valeur, pas pour accéder à la valeur. 

Changez votre PHP pour être:

$uid = (isset($_POST['userID'])) ? $_POST['userID'] : 0;

La ligne ci-dessus vérifiera si la variable post existe. S'il existe, il définira $uid pour qu'il corresponde à la valeur affichée. S'il n'existe pas, $uid sera égal à 0. 

Plus tard dans votre code, vous pouvez vérifier la valeur de $uid et réagir en conséquence

if($uid==0) {
    echo 'User ID not found';
}

Cela rendra votre code plus lisible et suivra également ce que je considère être les meilleures pratiques pour gérer les données en PHP.

3
Liam

Pour tester si la variable POST a un élément appelé "userID", vous feriez mieux d'utiliser array_key_exists .. qui teste en réalité l'existence de la clé de tableau et non si sa valeur a été définie .. une valeur subtile et probablement uniquement. différence sémantique, mais cela améliore la lisibilité.

et pour le moment, votre $ uid est défini sur une valeur booléenne selon que $ __ POST ['userID'] est défini ou non ... Si je me souviens de mémoire, vous voudrez peut-être essayer ...

$uid = (array_key_exists('userID', $_POST)?$_POST['userID']:'guest';

Vous pouvez ensuite utiliser un utilisateur 'invité' identifiable et rendre votre code beaucoup plus lisible :)

Un autre point concernant isset (), même s'il est peu probable que cela s'applique dans ce scénario, rappelons-le si vous ne voulez pas être attrapé plus tard ... un élément de tableau peut être légitimement défini sur NULL ... c'est-à-dire qu'il peut exister , mais être encore non peuplé, et cela pourrait être une condition valide, acceptable et vérifiable. mais :

a = array('one'=>1, 'two'=>null, 'three'=>3);
isset(a['one']) == true
isset(a['two']) == false

array_key_exists(a['one']) == true
array_key_exists(a['two']) == true

Assurez-vous de savoir quelle fonction vous souhaitez utiliser et dans quel but.

1
Radiotrib
$(document).ready(function() {
            $(".clickable").click(function() {
                var userID = $(this).attr('id'); // you can add here your personal ID
                //alert($(this).attr('id'));
                $.ajax({
                    type: "POST",
                    url: 'logtime.php',
                    data : {
                        action : 'my_action',
                        userID : userID 
                    },
                    success: function(data)
                    {
                        alert("success!");
                        console.log(data);
                    }
                });
            });
        });


 $uid = (isset($_POST['userID'])) ? $_POST['userID'] : 'ID not found';
 echo $uid;

$ uid ajouter dans vos fonctions

remarque: si $ n'est pas supporté, alors ajoutez jQuery where $ defined

0
Pankaj Kanani

Sinon, essayez de supprimer "data" et de créer l'URL "logtime.php? UserID =" + userId

J'aime mieux la réponse de Brian, cette réponse est simplement parce que vous essayez d'utiliser la syntaxe de paramètre d'URL dans "data" et je voulais montrer où vous pouvez utiliser cette syntaxe correctement.

0
AmericanUmlaut