173 votes

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 n'arrive pas à obtenir la valeur de $_POST['hidden1'] en $salarieid . Y a-t-il un problème ?

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>

115voto

Sergey Kuznetsov Points 4324

Vous ne pouvez pas passer des valeurs variables du code JavaScript de la page en cours au code PHP de la page en cours... 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, par exemple en soumettant le 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>

21voto

user1849393 Points 41

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

Tu pourrais :

  1. Envoyez les informations dans un formulaire comme indiqué ici (cela entraînera un rafraîchissement de la page).
  2. Le passer en Ajax (il y a plusieurs articles sur ce sujet ici) (sans rafraîchissement de la page)
  3. Faites une requête HTTP via une requête XMLHttpRequest (sans rafraîchissement de 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 qu'il serait possible de donner à tout cela un aspect plus sophistiqué, en passant par toutes les variables et autres, mais je l'ai gardé basique afin de le rendre plus facile à comprendre pour les novices.

7voto

Terry Prothero Points 21

J'ai essayé de comprendre cela moi-même, puis j'ai réalisé que le problème est que cette façon d'envisager la situation est en quelque sorte inversée. Plutôt que d'essayer de faire passer des choses de JavaScript à php, il est peut-être préférable de 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 java script aussi). Ensuite, le navigateur charge la page et exécute le html et le script de java.

Il semble que la façon la plus sensée 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 ce que le PHP ne peut pas faire. Cela vous permettrait de bénéficier des avantages de PHP et de JavaScript d'une manière relativement simple et directe.

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 html image pour appeler du code PHP. Quelque chose comme ceci :

<img src="pic.php">

Le code PHP de pic.php crée en fait du code html avant même que votre page Web ne soit chargée, mais ce code html est 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. Il peut peut-être modifier le contenu de certains fichiers sur votre serveur, etc. Le bon côté de la chose est que le code php peut être exécuté à partir de html et, je suppose, de JavaScript, mais le mauvais côté est que la seule sortie qu'il peut mettre sur votre page est une image. Vous avez également la possibilité de transmettre des variables au code php par le biais de paramètres dans l'url. Les compteurs de pages utilisent cette technique dans de nombreux cas.

6voto

Zurahn Points 4682

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 l'a reçue, donc le script de PHP a déjà été exécuté.

Si vous voulez passer une valeur JavaScript à un script PHP, vous devrez faire une 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 aussi 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", la page sera soumise et les données soumises seront imprimées.

2voto

pestilence669 Points 4009

Votre fonction, qui définit la valeur du formulaire caché, est-elle appelée ? Elle ne l'est pas dans cet exemple. Vous ne devriez pas avoir de problème pour modifier une valeur cachée. avant renvoyer le formulaire au serveur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X