Comment transmettre des variables JavaScript à PHP?

150

Je souhaite transmettre des variables JavaScript à PHP en utilisant une entrée masquée dans un formulaire.

Mais je ne peux pas obtenir la valeur $_POST['hidden1']en $salarieid. Y a-t-il quelque chose qui ne va pas?

Voici le code:

<script type="text/javascript">
    // View what the user has chosen
    function func_load3(name) {
        var oForm = document.forms["myform"];
        var oSelectBox = oForm.select3;
        var iChoice = oSelectBox.selectedIndex;
        //alert("You have chosen: " + oSelectBox.options[iChoice].text);
        //document.write(oSelectBox.options[iChoice].text);
        var sa = oSelectBox.options[iChoice].text;
        document.getElementById("hidden1").value = sa;
    }
</script>

<form name="myform" action="<?php echo $_SERVER['$PHP_SELF']; ?>" method="POST">
    <input type="hidden" name="hidden1" id="hidden1" />
</form>

<?php
   $salarieid = $_POST['hidden1'];
   $query = "select * from salarie where salarieid = ".$salarieid;
   echo $query;
   $result = mysql_query($query);
?>

<table>
   Code for displaying the query result.
</table>
SUN Jiangong
la source
2
Vous pouvez stocker la valeur de la variable js dans un cookie et accéder ultérieurement à cette variable dans le cookie php.
shasi kanth
2
@shasikanth - vous pouvez le faire, mais le cookie ne sera défini que lors de la deuxième consultation de la page . Et à ce moment-là, ce sera la valeur de la première page vue - elle est toujours derrière. Un cookie n'est pas un mécanisme pour renvoyer dynamiquement des informations au serveur; vous devez faire autre chose pour rafraîchir la page, par exemple POSTER un formulaire ou faire un appel Ajax. Et si vous en faites un, il n'y a aucune raison d'utiliser un cookie - transmettez simplement les informations dans le mécanisme que vous utilisez. En outre, un cookie persistera après la disparition de la page - pas ce qui est prévu dans cette question.
ToolmakerSteve

Réponses:

90

Vous ne pouvez pas passer des valeurs de variable du code JavaScript de la page actuelle au code PHP de la page actuelle ... Le code PHP s'exécute côté serveur, et il ne sait rien de ce qui se passe côté client.

Vous devez transmettre des variables au code PHP à partir du formulaire HTML en utilisant un autre mécanisme, tel que la soumission du formulaire à l'aide des méthodes GET ou POST.

<DOCTYPE html>
<html>
  <head>
    <title>My Test Form</title>
  </head>

  <body>
    <form method="POST">
      <p>Please, choose the salary id to proceed result:</p>
      <p>
        <label for="salarieids">SalarieID:</label>
        <?php
          $query = "SELECT * FROM salarie";
          $result = mysql_query($query);
          if ($result) :
        ?>
        <select id="salarieids" name="salarieid">
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<option value="', $row['salaried'], '">', $row['salaried'], '</option>'; //between <option></option> tags you can output something more human-friendly (like $row['name'], if table "salaried" have one)
            }
          ?>
        </select>
        <?php endif ?>
      </p>
      <p>
        <input type="submit" value="Sumbit my choice"/>
      </p>
    </form>

    <?php if isset($_POST['salaried']) : ?>
      <?php
        $query = "SELECT * FROM salarie WHERE salarieid = " . $_POST['salarieid'];
        $result = mysql_query($query);
        if ($result) :
      ?>
        <table>
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<tr>';
              echo '<td>', $row['salaried'], '</td><td>', $row['bla-bla-bla'], '</td>' ...; // and others
              echo '</tr>';
            }
          ?>
        </table>
      <?php endif?>
    <?php endif ?>
  </body>
</html>
Sergey Kuznetsov
la source
@Sergey, j'ai utilisé le formulaire de soumission ici avec la méthode POST, je ne sais pas pourquoi cela ne fonctionne pas. Est-ce que tu sais pourquoi? Et comment résoudre ça?
SUN Jiangong
@sergey, donc je dois utiliser ajax? En fait, je suis familier avec ça.
SUN Jiangong
En fait, j'ai utilisé votre méthode dans la dernière case de sélection de niveau. Mais maintenant, j'ai créé une boîte de sélection à trois chaînes, je ne peux donc pas utiliser votre méthode.
SUN Jiangong
À ce stade: Oui, vous devez utiliser la technologie AJAX. Si vous avez des problèmes de réalisation, je pense que je peux vous aider.
Sergey Kuznetsov
3
@MadaraUchiha L'OP utilise déjà des mysql_fonctions; ce ne serait pas l'objectif de répondre à cette question par une réécriture complète.
Ja͢ck
26

Enregistrez-le simplement dans un cookie:

$(document).ready(function () {
  createCookie("height", $(window).height(), "10");
});

function createCookie(name, value, days) {
  var expires;
  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toGMTString();
  }
  else {
    expires = "";
  }
  document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
}

Et puis lisez-le avec PHP:

<?PHP
   $_COOKIE["height"];
?>

Ce n'est pas une jolie solution, mais cela fonctionne.

Christian
la source
2
Finalement! une selution qui fonctionne! Cela fait des heures que je cherche une sélection maintenant, je crée un jeu et j'aimerais envoyer le score le plus élevé à une base de données, je l'ai corrigé maintenant! À votre santé!
Cid-El
1
en fait, c'est une excellente solution! passer de php à javascript est facile. de javascript en php n'est pas facile. l'utilisation d'un cookie est simple, élégante. pas de bs .. !! bien sûr, si le client désactive les cookies ,,, c'est un problème à gérer avec une valeur par défaut ..
JamesAD-0
Pouvez-vous s'il vous plaît me faire savoir comment utiliser le truc $ _COOKIE ["height"] pour obtenir le nom et la valeur? Merci. Ne travaille pas pour moi.
Zac
4
Malgré tous les votes positifs, ce n'est pas une bonne solution. Raison: le cookie n'est pas vu par le serveur jusqu'à la prochaine fois que la page est demandée par le navigateur . C'est toujours "un derrière". La première fois que la page est ouverte dans le navigateur, il n'y aura pas du tout de cookie. Est-ce acceptable? La prochaine fois que la page est ouverte dans le navigateur, il y aura un cookie de la première fois. Pour une valeur constante , comme cet exemple, cela pourrait être tolérable (même si vous ne travaillez pas la première fois !!). Considérez maintenant une valeur dynamique , telle que la date / heure actuelle. php verra le datetime PRÉCÉDENT, pas maintenant. Utilisez ajax.
ToolmakerSteve
20

Il existe plusieurs façons de passer des variables de JavaScript à PHP (pas la page actuelle, bien sûr).

Vous pourriez:

  1. Envoyez les informations dans un formulaire comme indiqué ici (entraînera une actualisation de la page)
  2. Passez-le en Ajax (plusieurs articles sont ici à ce sujet) (sans actualisation de la page)
  3. Faites une requête HTTP via une requête XMLHttpRequest (sans actualisation de page) comme ceci:

 if (window.XMLHttpRequest){
     xmlhttp = new XMLHttpRequest();
 }

else{
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }

 var PageToSendTo = "nowitworks.php?";
 var MyVariable = "variableData";
 var VariablePlaceholder = "variableName=";
 var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;

 xmlhttp.open("GET", UrlToSend, false);
 xmlhttp.send();

Je suis sûr que cela pourrait être rendu plus sophistiqué et parcourir toutes les variables et tout le reste - mais je l'ai gardé basique pour le rendre plus facile à comprendre pour les novices.

user1849393
la source
Que diriez-vous de comment vais-je obtenir les tableaux de base de données et le transmettre au javascript chaque fois que je soumets un nouveau formulaire. alors la variable en javascript changera également. Comment? Aidez moi. :(
Vincent
3
Ajax est en fait XMLHttpRequest, ce dernier n'est qu'un terme technique pour cela.
Alex C.
14

Voici l'exemple de travail: Obtenez la valeur de la variable javascript sur la même page en php.

<script>
var p1 = "success";
</script>

<?php
echo "<script>document.writeln(p1);</script>";
?>
Arslan Tabassum
la source
1
J'ai essayé ce consept puis a vraiment fonctionné, mais si j'essaye comme ceci: <? Php var x = <script> document.writeln (p1); </script> ";?>, Alors echo x; Cela ne fonctionne pas. Avez-vous un autre moyen?
Juna serbaserbi
3
vous pouvez essayer comme ceci <script> var p1 = "success"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; echo $ x; ?>
Arslan Tabassum
3
Le php dans ce cas fait simplement écho au javascript sur la page sous forme de chaîne. Javascript n'est pas transmis à php.
Ben
Oui, c'est ce que nous devons faire ... parfois, nous devons utiliser la valeur JavaScript en php sur la même page et sans rafraîchir la page ... alors cela fonctionnera comme du charme .. :)
Arslan Tabassum
1
@ArslanTabassum Non, vous avez mal compris le commentaire. php ne voit jamais la valeur de p1. echo "<script>document.writeln(p1);</script>";utilise la variable javascript p1en javascript , pas en php. document.writelnest une fonction javascript , que vous exécutez, dans le navigateur, pendant que le navigateur construit la page HTML.
ToolmakerSteve
6

PHP s'exécute sur le serveur avant que la page ne soit envoyée à l'utilisateur, JavaScript est exécuté sur l'ordinateur de l'utilisateur une fois qu'il est reçu, donc le script PHP a déjà été exécuté.

Si vous souhaitez transmettre une valeur JavaScript à un script PHP, vous devez effectuer une requête XMLHttpRequest pour renvoyer les données au serveur.

Voici une question précédente que vous pouvez suivre pour plus d'informations: Tutoriel Ajax

Maintenant, si vous avez juste besoin de transmettre une valeur de formulaire au serveur, vous pouvez également simplement faire un message de formulaire normal, cela fait la même chose, mais la page entière doit être rafraîchie.

<?php
if(isset($_POST))
{
  print_r($_POST);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <input type="text" name="data" value="1" />
  <input type="submit" value="Submit" />
</form>

Cliquez sur Soumettre pour soumettre la page et imprimer les données soumises.

Derek H
la source
1
@Zurahn, oui, peut-être que j'essaie d'utiliser XMLHttpRequest, donc je ne peux pas passer la valeur javascript au script php dans la même page en utilisant javascript? J'ai beaucoup cherché, quelqu'un dit que cela peut être fait avec une entrée cachée dans le formulaire. Dois-je essayer cette solution Furthur?
SUN Jiangong
6

J'essayais de comprendre cela moi-même et je me suis ensuite rendu compte que le problème est que c'est une sorte de façon rétrograde de regarder la situation. Plutôt que d'essayer de faire passer les choses de JavaScript à PHP, il vaut peut-être mieux faire l'inverse, dans la plupart des cas. Le code PHP s'exécute sur le serveur et crée le code html (et éventuellement le script java également). Ensuite, le navigateur charge la page et exécute le script html et java.

Il semble que la manière raisonnable d'aborder des situations comme celle-ci est d'utiliser le PHP pour créer le JavaScript et le html que vous voulez, puis d'utiliser le JavaScript dans la page pour faire tout ce que PHP ne peut pas faire. Il semble que cela vous donnerait les avantages de PHP et de JavaScript d'une manière assez simple et directe.

Une chose que j'ai faite qui donne l'impression de passer des choses à PHP à partir de votre page à la volée est d'utiliser la balise d'image html pour appeler du code PHP. Quelque chose comme ça:

<img src="pic.php">

Le code PHP dans pic.php créerait en fait du code html avant même que votre page Web ne soit chargée, mais ce code html est fondamentalement appelé à la volée. Le code php ici peut être utilisé pour créer une image sur votre page, mais il peut contenir toutes les commandes que vous aimez en plus de cela. Peut-être que cela change le contenu de certains fichiers sur votre serveur, etc. L'avantage est que le code php peut être exécuté à partir de html et je suppose que JavaScript, mais l'inconvénient est que la seule sortie qu'il peut mettre sur votre page est un image. Vous avez également la possibilité de passer des variables au code php via des paramètres dans l'url. Les compteurs de pages utiliseront cette technique dans de nombreux cas.

Terry Prothero
la source
5

Nous pouvons facilement transmettre des valeurs même sur des pages identiques / différentes en utilisant les cookies indiqués dans le code comme suit (dans mon cas, je l'utilise avec l'intégration facebook) -

function statusChangeCallback(response) {
    console.log('statusChangeCallback');
    if (response.status === 'connected') {
        // Logged into your app and Facebook.
        FB.api('/me?fields=id,first_name,last_name,email', function (result) {
            document.cookie = "fbdata = " + result.id + "," + result.first_name + "," + result.last_name + "," + result.email;
            console.log(document.cookie);
        });
    }
}

Et je l'ai accédé (dans n'importe quel fichier) en utilisant -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
Tushar Walzade
la source
5

Voici comment je l'ai fait (j'avais besoin d'insérer un fuseau horaire local dans PHP:

<?php
    ob_start();
?>

<script type="text/javascript">

    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>

<?php
    $offset = ob_get_clean();
    print_r($offset);
VisionQuest
la source
2

Votre fonction, qui définit la valeur du formulaire masqué, est-elle appelée? Ce n'est pas dans cet exemple. Vous ne devriez avoir aucun problème à modifier une valeur masquée avant de publier le formulaire sur le serveur.

peste669
la source
@perstilence, vous avez raison, je n'ai pas appelé la fonction. Savez-vous comment l'appeler en php?
SUN Jiangong
hmm. Il semble que vous vouliez l'appeler lorsque quelqu'un sélectionne quelque chose dans votre formulaire / un gestionnaire onClick. L'appeler depuis PHP n'a aucun sens. Quelqu'un sélectionne une valeur de formulaire, votre fonction se déclenche, met à jour une valeur de formulaire masquée, puis se dirige vers php lors de la publication du formulaire. Non?
pestilence669
@pestilence, je veux laisser quelqu'un sélectionner un élément dans la boîte de sélection, et lorsque je clique sur le bouton Soumettre, un résultat de recherche s'affiche dans un tableau. Donc, au niveau du backend, lorsque je choisis l'élément, sa valeur sera transmise à une requête mysql en php en tant que variable. C'est ce que je veux faire. Mais il semble que je ne trouve pas la solution en javascript. Avez-vous une idée?
SUN Jiangong
Oui, la méthode post ou get dans le formulaire sera acceptée si cela fonctionne.
SUN Jiangong
2

Votre code présente quelques problèmes.

  • Vous définissez une fonction JavaScript, func_load3 (), mais ne l'appelez pas.
  • Votre fonction est définie au mauvais endroit. Lorsqu'il est défini dans votre page, les objets HTML auxquels il se réfère n'ont pas encore été chargés. La plupart du code JavaScript vérifie si le document est complètement chargé avant de s'exécuter, ou vous pouvez simplement déplacer votre code au-delà des éléments auxquels il fait référence dans la page.
  • Votre formulaire n'a aucun moyen de le soumettre. Il a besoin d'un bouton d'envoi.
  • Vous ne vérifiez pas si votre formulaire a été soumis.

Il est possible de définir une variable JavaScript dans une variable cachée dans un formulaire, puis de la soumettre et de lire la valeur en PHP. Voici un exemple simple qui montre ceci:

<?php
if (isset($_POST['hidden1'])) {
   echo "You submitted {$_POST['hidden1']}";
   die;
}

echo <<<HTML
   <form name="myform" action="{$_SERVER['PHP_SELF']}" method="post" id="myform">
      <input type="submit" name="submit" value="Test this mess!" />
      <input type="hidden" name="hidden1" id="hidden1" />
   </form>

   <script type="text/javascript">
      document.getElementById("hidden1").value = "This is an example";
   </script>
HTML;
?>
utilisateur3822447
la source
2

lorsque votre page charge pour la première fois le code PHP, exécutez pour la première fois et définissez la mise en page complète de votre page Web. après la mise en page, il a défini la charge JavaScript. maintenant, JavaScript interagit directement avec DOM et peut manipuler la mise en page, mais PHP ne peut pas avoir besoin de rafraîchir la page. Le seul moyen est d'actualiser votre page et de transmettre les paramètres dans l'URL de la page afin que vous puissiez obtenir les données via PHP. Nous utilisons donc AJAX pour interagir Javascript avec PHP sans rechargement de page. AJAX peut également être utilisé comme API. encore une chose si vous avez déjà déclaré la variable en PHP. avant le chargement de la page, vous pouvez l'utiliser avec votre exemple Javascript.

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>

le code ci-dessus est correct et cela fonctionnera. mais le code ci-dessous est totalement faux et il ne fonctionnera jamais.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Passer de la valeur de JavaScript à PHP via AJAX

    c'est le moyen le plus sûr de le faire. car le contenu HTML peut être modifié via les outils de développement et l'utilisateur peut manipuler les données. il est donc préférable d'utiliser AJAX si vous voulez une sécurité sur cette variable. Si vous êtes un débutant en AJAX, veuillez apprendre AJAX, c'est très simple.

Le moyen le meilleur et le plus sûr de transmettre une variable JavaScript à PHP est via AJAX

exemple AJAX simple

var mydata = 55;
var myname = "syed ali";
var userdata = {'id':mydata,'name':myname};
    $.ajax({
            type: "POST",
            url: "YOUR PHP URL HERE",
            data:userdata, 
            success: function(data){
                console.log(data);
            }
            });
  • PASS de la valeur de javascript à php via des champs cachés.

sinon, vous pouvez créer une entrée HTML masquée dans votre formulaire. comme

<input type="hidden" id="mydata">

puis via jQuery ou javaScript, passez la valeur au champ caché. comme

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>

Maintenant, lorsque vous soumettez le formulaire, vous pouvez obtenir la valeur en PHP.

Sayed Mohd Ali
la source
1
Je vous remercie. Très utile. La méthode jQuery ne vous permet pas de transmettre les données générées lors de l'exécution de la page? Vous ne pouvez pas définir un champ de saisie sur une valeur et le récupérer par php? C'est l'un des exemples Ajax les plus clairs que j'ai vus. J'ai hâte de l'essayer.
boucles du
1

Vous pouvez peut-être utiliser la méthode jquery serialize () pour que tout se passe d'un seul coup.

var data=$('#myForm').serialize();

// de cette façon, vous pouvez également obtenir la valeur cachée côté serveur.

Satyapriya Mishra
la source
0

Cette solution n'a évidemment pas été mentionnée plus tôt. Vous pouvez également utiliser des cookies pour transmettre les données du navigateur au serveur.

Définissez simplement un cookie avec les données que vous souhaitez transmettre à PHP en utilisant javascript dans le navigateur.

Ensuite, lisez simplement ce cookie côté PHP.

Tim
la source
. . . Souhaitez-vous donner un exemple et peut-être un lien pertinent ou deux? (Voir comment répondre .)
ashleedawg
0

Nous ne pouvons pas transmettre directement les valeurs des variables JavaScript au code PHP ... Le code PHP s'exécute côté serveur, et il ne sait rien de ce qui se passe côté client.

Il est donc préférable d'utiliser AJAX pour analyser la valeur JavaScript dans le code php.

Ou bien nous pouvons le faire avec l'aide de COOKIES dans notre code.

Merci et acclamations.

Rohit Saini
la source