web-dev-qa-db-fra.com

Comment passer des variables JavaScript à PHP?

Je souhaite transmettre des variables JavaScript à PHP à l'aide d'une entrée masquée dans un formulaire.

Mais je ne peux pas obtenir la valeur de $_POST['hidden1'] dans $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>
132
Jiangong SUN

Vous ne pouvez pas transmettre de valeurs de variable du code JavaScript de la page actuelle à la page actuelle PHP code ... _ PHP le code s'exécute côté serveur et il ne sait rien de ce qui est passe du côté du client.

Vous devez transmettre des variables au code PHP à partir du formulaire HTML à l'aide d'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>
81
Sergey Kuznetsov

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 puis lisez-le avec PHP:

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

Ce n'est pas une belle solution, mais ça marche.

24
Christian

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

Vous pourriez:

  1. Envoyez les informations dans un formulaire comme indiqué ici (cela entraînera un rafraîchissement de la page)
  2. Passez le en Ajax (plusieurs articles sont à ce sujet) (sans rafraîchissement de la page)
  3. Effectuez une requête HTTP via une requête na 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 fait pour paraître plus sophistiqué et parcourir toutes les variables et ainsi de suite - mais je l'ai gardé comme base pour le rendre plus facile à comprendre pour les novices.

18
user1849393

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>";
?>
12
Arslan Tabassum

J'essayais de comprendre cela moi-même et je me suis rendu compte que le problème était qu'il s'agissait en quelque sorte d'une approche rétrograde de la situation. Plutôt que d'essayer de transmettre des éléments 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 script Java ainsi). Ensuite, le navigateur charge la page et exécute les scripts html et Java.

Il semble que la façon sensée d’aborder de telles situations consiste à utiliser PHP pour créer le code JavaScript et le code HTML souhaité, puis à utiliser le code JavaScript de 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 de manière assez simple et directe.

Une chose que j'ai faite et qui donne l’apparence de transmettre des choses à PHP depuis votre page à la volée consiste à utiliser la balise image HTML pour appeler du code PHP. Quelque chose comme ça:

<img src="pic.php">

Le code PHP dans pic.php créerait un code HTML avant même le chargement de votre page Web, 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 de votre choix. Peut-être cela change-t-il le contenu de certains fichiers sur votre serveur, etc. Le bon côté de ceci est que le code php peut être exécuté à partir de HTML et je suppose que JavaScript, mais le seul inconvénient est que le seul résultat qu'il peut afficher sur votre page est un fichier. 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.

6
Terry Prothero

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

Si vous souhaitez transmettre une valeur JavaScript à un script PHP, vous devez créer 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 passer une valeur de formulaire au serveur, vous pouvez également faire une publication normale, cela fait la même chose, mais toute la page doit être actualisée.

<?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, vous soumettez la page et imprimez les données soumises.

6
Derek H

Nous pouvons facilement transmettre des valeurs, même sur des pages identiques/différentes, à l'aide des cookies affichés dans le code, comme suit (dans mon cas, je l'utilise avec l'intégration de 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'];
    }
?>
5
Tushar Walzade

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);
3
VisionQuest

Votre code comporte quelques défauts.

  • Vous définissez une fonction JavaScript, func_load3 (), mais vous 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 fait référence n'ont pas encore été chargés. La plupart du code JavaScript vérifie si le document est entièrement chargé avant son exécution, 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 masquée dans un formulaire, puis de la soumettre et de relire 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;
?>
2
user3822447

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

2
pestilence669

Peut-être pourriez-vous utiliser la méthode jquery serialize () pour que tout soit en même temps.

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

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

1
Satyapriya Mishra

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

Il suffit de définir un cookie avec les données que vous souhaitez transmettre à PHP à l'aide de javascript dans le navigateur.

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

0
Tim

lorsque votre page charge pour la première fois le code PHP, il est d'abord exécuté et définit la mise en page complète de votre page Web. après la mise en page, le chargement de JavaScript est activé. Désormais, JavaScript interagit directement avec DOM et peut manipuler la mise en page, mais PHP ne peut pas l'actualiser. Le seul moyen consiste à actualiser votre page et à 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 échanger du Javascript avec PHP sans recharger la page. AJAX peut également être utilisé en tant qu'API. une dernière 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 cela ne fonctionnera jamais.

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

    c'est le moyen le plus sûr de le faire. parce que le contenu HTML peut être édité via des outils de développement et que l'utilisateur peut manipuler les données. il est donc préférable d’utiliser AJAX si vous souhaitez sécuriser cette variable. Si vous êtes un débutant en AJAX, apprenez s'il vous plaît AJAX que c’est très simple.

Le moyen le plus sûr et le plus sûr de passer une variable JavaScript dans PHP est via AJAX.

exemple simple AJAX

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);
            }
            });
  • valeur PASS 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.

0
Sayed Mohd Ali

Nous ne pouvons pas transmettre directement les valeurs de variable JavaScript au code PHP ... _ Le code PHP est exécuté côté serveur et 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 à la vôtre.

0
Rohit Saini