Comment passer des variables JavaScript à PHP?

je veux passer des variables JavaScript à PHP en utilisant une entrée cachée dans un formulaire.

mais je ne peux pas obtenir la valeur de $_POST['hidden1'] dans $salarieid . Est-il quelque chose de mal?

voici le code:

<script type="text/javascript">
// view which the user has chosen
function func_load3(name){
    var oForm = document.forms["myform"];
    var oSelectBox = oForm.select3;
    var iChoice = oSelectBox.selectedIndex;
    //alert("you have choosen: " + 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 display the query result. 
</table>
116
demandé sur Harsh Patel 2009-12-16 23:46:04

12 réponses

vous ne pouvez pas passer des valeurs variables de la page actuelle javascript au code PHP de la page actuelle... Le code PHP tourne du côté du serveur et il ne sait rien de ce qui se passe du côté du client.

vous devez passer des variables au code PHP à partir de html-form en utilisant un autre mécanisme, comme la soumission de formulaire sur les 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>
73
répondu Sergey Kuznetsov 2009-12-17 15:00:29

il y a plusieurs façons de passer des variables de javascript à php (pas la page actuelle, bien sûr)

, Vous pouvez:

  1. envoyer l'information sous une forme comme indiqué ici, (résultera en une mise à jour de la page)
  2. passer en ajax (plusieurs postes d'ici à ce sujet) (sans rafraichissement de la page)
  3. faire une requête http via une requête XMLHttpRequest (sans rafraîchir la 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 fait pour avoir l'air plus fantaisiste et passer en revue toutes les variables et tout - mais je l'ai gardé basique pour le rendre plus facile à comprendre pour les novices.

17
répondu user1849393 2018-03-13 10:28:10

il suffit de le sauvegarder 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 ensuite le lire avec php

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

ce n'est pas une jolie solution, mais il fonctionne. Acclamation.

13
répondu Christian 2018-03-13 10:29:28

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

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
6
répondu Arslan Tabassum 2014-07-25 07:25:16

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

si vous voulez passer une valeur JavaScript à un script PHP, vous devez faire une XMLHttpRequest pour renvoyer les données au serveur.

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

maintenant si vous avez juste besoin de passer une valeur de formulaire au serveur, vous pouvez aussi juste faire un post de formulaire normal, qui 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>

en cliquant sur soumettre soumettra la page, et imprimera les données soumises.

5
répondu Derek H 2017-05-23 12:26:05

nous pouvons facilement passer des valeurs même sur des pages identiques/ différentes en utilisant les cookies affiché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 j'y ai accédé (dans n'importe quel fichier) en utilisant -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
5
répondu Tushar Walzade 2016-02-28 16:00:02

j'essayais de comprendre cela moi-même et puis j'ai réalisé que le problème est que c'est une sorte de manière rétrograde de regarder la situation. Plutôt que d'essayer de passer des choses de JavaScript à php, peut-être est-il préférable d'aller dans l'autre sens, 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). Ensuite, le navigateur charge la page et exécute le script html et java.

il semble comme le sensible une façon d'aborder des situations comme celle-ci est d'utiliser le PHP pour créer le JavaScript et le html que vous voulez et ensuite 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 JavaScript d'une manière assez simple et simple.

une chose que j'ai faite qui donne l'apparence de passer des choses à PHP à partir de votre page à la volée est d'utiliser la balise d'image html pour faire appel au code PHP. Quelque chose comme ceci:

<img src="pic.php">

le code PHP en pic.php créerait effectivement du code html avant même que votre page web ne soit chargée, mais ce code html est essentiellement 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 voulez. Peut-être qu'il change le contenu de certains fichiers sur votre serveur, etc. L'avantage de ceci est que le code php peut être exécuté à partir de html et je suppose JavaScript, mais l'inconvénient est que la seule sortie qu'il peut mettre sur votre page est une image. Vous avez aussi la possibilité de passer des variables au code php à travers les paramètres de l'url. Les compteurs de Page utiliseront cette technique dans de nombreux cas.

5
répondu Terry Prothero 2018-03-13 10:32:04

est-ce que votre fonction, qui définit la valeur de la forme cachée, est appelée? Il n'est pas dans cet exemple. Vous ne devriez pas avoir de problème à modifier une valeur cachée avant en postant le formulaire sur le serveur.

2
répondu pestilence669 2009-12-16 20:53:46

Voici comment je l'ai fait (nécessaire pour 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);
2
répondu VisionQuest 2014-06-17 16:11:49

votre code a quelques défauts.

  • Vous définissez une fonction JavaScript, func_load3(), mais ne l'appelez pas.
  • votre fonction est définie au mauvais endroit. Quand 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 des codes JavaScript vérifient si le document est complètement chargé avant l'exécution, ou vous pouvez simplement déplacer votre code au-delà des éléments auxquels il se réfère dans la page.
  • votre formulaire n'a aucun moyen de le soumettre. Il a besoin d'un bouton de soumission.
  • 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 sous une forme, 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;
?>
1
répondu user3822447 2014-07-22 12:48:35

peut être que vous pourriez utiliser la méthode jQuery serialize() pour que tout soit à la fois.

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

/ / de cette façon vous pouvez obtenir la valeur cachée aussi bien du côté du serveur.

1
répondu Satyapriya Mishra 2016-03-31 17:57:47

cette solution évidemment n'a pas été mentionnée plus tôt. Vous pouvez également utiliser des cookies pour renvoyer des données du navigateur vers le serveur.

il suffit de configurer un cookie avec les données que vous voulez passer à PHP en utilisant javascript dans le navigateur.

alors, il suffit de lire ce cookie sur le côté PHP.

0
répondu Tim 2018-08-09 12:16:21