Wie übergebe ich JavaScript-Variablen an PHP?

150

Ich möchte JavaScript-Variablen mithilfe einer versteckten Eingabe in einem Formular an PHP übergeben.

Aber ich kann den Wert von $_POST['hidden1']in nicht bekommen $salarieid. Stimmt irgendetwas nicht?

Hier ist der 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>
SONNE Jiangong
quelle
2
Sie können den Variablenwert js in einem Cookie speichern und später auf diese Variable in einem PHP-Cookie zugreifen.
Shasi Kanth
2
@shasikanth - Sie können das tun, aber das Cookie wird erst gesetzt, wenn die Seite zum zweiten Mal angezeigt wird . Und zu diesem Zeitpunkt ist es der Wert aus der ersten Seitenansicht - es ist immer einer dahinter. Ein Cookie ist kein Mechanismus, um Informationen dynamisch an den Server zurückzugeben. Sie müssen etwas anderes tun, um die Seite zu aktualisieren, z. B. ein Formular POSTEN oder einen Ajax-Anruf tätigen. Und wenn Sie eines davon ausführen, gibt es keinen Grund, ein Cookie zu verwenden. Übergeben Sie einfach die Informationen in dem von Ihnen verwendeten Mechanismus. Außerdem bleibt ein Cookie bestehen, nachdem die Seite verschwunden ist - nicht das, was in dieser Frage beabsichtigt ist.
ToolmakerSteve

Antworten:

90

Sie können keine Variablenwerte vom JavaScript-Code der aktuellen Seite an den PHP-Code der aktuellen Seite übergeben ... PHP-Code wird auf der Serverseite ausgeführt und weiß nichts darüber, was auf der Clientseite vor sich geht.

Sie müssen Variablen aus dem HTML-Formular mithilfe eines anderen Mechanismus an PHP-Code übergeben, z. B. indem Sie das Formular mit den Methoden GET oder POST senden.

<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
quelle
@ Sergey, ich habe das Absenden des Formulars hier mit der POST-Methode verwendet. Ich weiß nicht, warum es nicht funktioniert. Weißt du, warum? Und wie kann man das lösen?
SUN Jiangong
@sergey, also muss ich Ajax verwenden? Eigentlich bin ich damit vertraut.
SUN Jiangong
Eigentlich habe ich Ihre Methode im letzten Auswahlfeld für eine Ebene verwendet. Aber jetzt habe ich ein dreikettiges Auswahlfeld erstellt, sodass ich Ihre Methode nicht verwenden kann.
SUN Jiangong
An dieser Stelle: Ja, Sie müssen die AJAX-Technologie verwenden. Wenn Sie Probleme mit der Realisierung haben, kann ich Ihnen helfen.
Sergey Kuznetsov
3
@ MadaraUchiha Das OP hat bereits mysql_Funktionen verwendet; Es wäre nicht das Ziel, diese Frage mit einem vollständigen Umschreiben zu beantworten.
Ja͢ck
26

Speichern Sie es einfach in einem 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=/";
}

Und dann lesen Sie es mit PHP:

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

Es ist keine schöne Lösung, aber es funktioniert.

Christian
quelle
2
Endlich! eine Auswahl, die funktioniert! Ich habe stundenlang nach einer Auswahl gesucht, ein Spiel gemacht und möchte die höchste Punktzahl an eine Datenbank senden, habe sie jetzt behoben! Prost!
Cid-El
1
Eigentlich ist es eine großartige Lösung! Der Wechsel von PHP zu Javascript ist einfach. von Javascript zu PHP ist nicht einfach. Die Verwendung eines Cookies ist einfach und elegant. nein bs .. !! Natürlich, wenn der Client Cookies deaktiviert, ist dies ein Problem, das mit einem Standard behandelt werden muss.
JamesAD-0
Können Sie mir bitte mitteilen, wie Sie das $ _COOKIE ["height"] -Ding verwenden, um den Namen und den Wert darin zu erhalten? Vielen Dank. Ich arbeite nicht für mich.
Zac
4
Trotz aller positiven Stimmen ist dies keine gute Lösung. Grund: Das Cookie wird vom Server erst angezeigt, wenn die Seite das nächste Mal vom Browser angefordert wird . Es ist immer "eins hinter". Beim ersten Öffnen der Seite im Browser wird überhaupt kein Cookie angezeigt. Ist das akzeptabel? Beim nächsten Öffnen der Seite im Browser wird beim ersten Mal ein Cookie angezeigt. Für einen konstanten Wert wie dieses Beispiel ist dies möglicherweise tolerierbar (obwohl es beim ersten Mal nicht funktioniert !!). Betrachten Sie nun einen dynamischen Wert, z. B. die aktuelle Datums- und Uhrzeitangabe. PHP wird PREVIOUS datetime sehen, nicht jetzt. Verwenden Sie Ajax.
ToolmakerSteve
20

Es gibt verschiedene Möglichkeiten, Variablen von JavaScript an PHP zu übergeben (natürlich nicht die aktuelle Seite).

Du könntest:

  1. Senden Sie die Informationen in einem hier angegebenen Formular (führt zu einer Seitenaktualisierung).
  2. Übergeben Sie es in Ajax (einige Beiträge finden Sie hier) (ohne Seitenaktualisierung)
  3. Stellen Sie eine HTTP-Anfrage über eine XMLHttpRequest-Anfrage (ohne Seitenaktualisierung) wie folgt:

 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();

Ich bin mir sicher, dass dies dazu gebracht werden könnte, schicker auszusehen und alle Variablen und so weiter zu durchlaufen - aber ich habe es einfach gehalten, um es den Anfängern leichter zu machen, es zu verstehen.

user1849393
quelle
Wie wäre es, wenn ich die DB-Arrays bekomme und sie jedes Mal, wenn ich ein neues Formular abschicke, an das Javascript weitergebe? dann ändert sich auch die Variable in Javascript. Wie? Hilf mir. :(
Vincent
3
Ajax ist eigentlich XMLHttpRequest, letzteres ist nur ein Fachbegriff dafür.
Alex C.
14

Hier ist das Arbeitsbeispiel: Holen Sie sich den Wert der Javascript-Variablen auf derselben Seite in PHP.

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
Arslan Tabassum
quelle
1
Ich habe dieses Konzept ausprobiert und dann wirklich funktioniert, aber wenn ich es so versuche: <? Php var x = <script> document.writeln (p1); </ script> ";?>, Dann echo x; Es hat nicht funktioniert. Haben Sie einen anderen Weg?
Juna serbaserbi
3
Sie können dies versuchen <script> var p1 = "success"; </ script> <? php $ x = "<script> document.writeln (p1); </ script>"; echo $ x; ?>
Arslan Tabassum
3
Das PHP gibt in diesem Fall einfach Javascript als Zeichenfolge auf die Seite zurück. Javascript wird nicht an PHP weitergegeben.
Ben
Ja, das ist, was wir tun müssen ... manchmal müssen wir JavaScript-Wert in PHP auf derselben Seite verwenden und ohne die Seite zu
aktualisieren
1
@ArslanTabassum Nein, du verstehst den Kommentar falsch. PHP sieht nie den Wert von p1. echo "<script>document.writeln(p1);</script>";verwendet die Javascript-Variable p1in Javascript , nicht in PHP. document.writelnist eine Javascript- Funktion, die Sie im Browser ausführen, während der Browser die HTML-Seite erstellt.
ToolmakerSteve
6

PHP wird auf dem Server ausgeführt, bevor die Seite an den Benutzer gesendet wird. JavaScript wird nach dem Empfang auf dem Computer des Benutzers ausgeführt, sodass das PHP-Skript bereits ausgeführt wurde.

Wenn Sie einen JavaScript-Wert an ein PHP-Skript übergeben möchten, müssen Sie eine XMLHttpRequest ausführen, um die Daten an den Server zurückzusenden.

Hier ist eine vorherige Frage, der Sie folgen können, um weitere Informationen zu erhalten: Ajax Tutorial

Wenn Sie nur einen Formularwert an den Server übergeben müssen, können Sie auch einen normalen Formularbeitrag ausführen, der dasselbe tut, aber die gesamte Seite muss aktualisiert werden.

<?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>

Wenn Sie auf Senden klicken, wird die Seite gesendet und die übermittelten Daten ausgedruckt.

Derek H.
quelle
1
@Zurahn, ja, vielleicht versuche ich, XMLHttpRequest zu verwenden, damit ich den Javascript-Wert nicht mit Javascript an das PHP-Skript auf derselben Seite übergeben kann? Ich habe viel gesucht, jemand sagt, dass es mit versteckten Eingaben in Form gemacht werden kann. Muss ich diese Lösung weiter ausprobieren?
SUN Jiangong
6

Ich habe versucht, dies selbst herauszufinden, und dann festgestellt, dass das Problem darin besteht, dass dies eine Art Rückwärtssicht auf die Situation ist. Anstatt zu versuchen, Dinge von JavaScript an PHP zu übergeben, ist es in den meisten Fällen vielleicht am besten, umgekehrt vorzugehen. PHP-Code wird auf dem Server ausgeführt und erstellt den HTML-Code (und möglicherweise auch das Java-Skript). Dann lädt der Browser die Seite und führt das HTML- und Java-Skript aus.

Es scheint sinnvoll, solche Situationen anzugehen, indem Sie das PHP verwenden, um das gewünschte JavaScript und das gewünschte HTML zu erstellen, und dann das JavaScript auf der Seite verwenden, um das zu tun, was PHP nicht kann. Dies scheint Ihnen die Vorteile von PHP und JavaScript auf relativ einfache und unkomplizierte Weise zu bieten.

Eine Sache, die ich getan habe, um den Eindruck zu erwecken, dass Dinge von Ihrer Seite im laufenden Betrieb an PHP übergeben werden, ist die Verwendung des HTML-Image-Tags, um PHP-Code aufzurufen. Etwas wie das:

<img src="pic.php">

Der PHP-Code in pic.php würde tatsächlich HTML-Code erstellen, bevor Ihre Webseite überhaupt geladen wurde, aber dieser HTML-Code wird grundsätzlich im laufenden Betrieb aufgerufen. Der PHP-Code hier kann verwendet werden, um ein Bild auf Ihrer Seite zu erstellen, kann aber auch beliebige Befehle enthalten. Vielleicht ändert es den Inhalt einiger Dateien auf Ihrem Server usw. Der Vorteil davon ist, dass der PHP-Code von HTML ausgeführt werden kann und ich nehme JavaScript an, aber der Nachteil ist, dass die einzige Ausgabe, die es auf Ihre Seite setzen kann, eine ist Bild. Sie haben auch die Möglichkeit, Variablen über Parameter in der URL an den PHP-Code zu übergeben. Seitenzähler verwenden diese Technik in vielen Fällen.

Terry Prothero
quelle
5

Mit den im Code angezeigten Cookies können wir auch auf denselben / unterschiedlichen Seiten problemlos Werte übergeben (in meinem Fall verwende ich sie mit Facebook-Integration) -

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);
        });
    }
}

Und ich habe darauf zugegriffen (in jeder Datei) mit -

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

So habe ich es gemacht (ich musste eine lokale Zeitzone in PHP einfügen:

<?php
    ob_start();
?>

<script type="text/javascript">

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

<?php
    $offset = ob_get_clean();
    print_r($offset);
Visionssuche
quelle
2

Wird Ihre Funktion aufgerufen, die den versteckten Formularwert festlegt? Es ist nicht in diesem Beispiel. Sie sollten kein Problem damit haben, einen versteckten Wert zu ändern, bevor Sie das Formular an den Server zurücksenden.

Pest669
quelle
@perstilence, du hast recht, ich habe die Funktion nicht aufgerufen. Wissen Sie, wie man es in PHP nennt?
SUN Jiangong
hmm. Es sieht so aus, als ob Sie es aufrufen möchten, wenn jemand etwas in Ihrem Formular / einen onClick-Handler auswählt. Es macht keinen Sinn, es von PHP aus aufzurufen. Jemand wählt einen Formularwert aus, Ihre Funktion wird ausgelöst, aktualisiert einen versteckten Formularwert und macht sich dann auf den Weg zum PHP auf dem Formularbeitrag. Nein?
Pestilenz669
@pestilence, ich möchte jemanden ein Element in der Auswahlbox auswählen lassen, und wenn ich auf die Schaltfläche "Senden" klicke, wird ein Suchergebnis in einer Tabelle angezeigt. Wenn ich also im Backend das Element auswähle, wird sein Wert als Variable an eine MySQL-Abfrage in PHP übergeben. Das möchte ich tun. Aber anscheinend kann ich die Lösung nicht in Javascript finden. Hast du eine Ahnung?
SUN Jiangong
Ja, die Post- oder Get-Methode im Formular wird akzeptiert, wenn sie funktioniert.
SUN Jiangong
2

Ihr Code hat ein paar Probleme.

  • Sie definieren eine JavaScript-Funktion, func_load3 (), rufen sie jedoch nicht auf.
  • Ihre Funktion ist am falschen Ort definiert. Wenn es auf Ihrer Seite definiert ist, wurden die HTML-Objekte, auf die es verweist, noch nicht geladen. Der meiste JavaScript-Code prüft vor der Ausführung, ob das Dokument vollständig geladen ist, oder Sie können Ihren Code einfach über die Elemente hinaus verschieben, auf die er auf der Seite verweist.
  • Ihr Formular hat keine Möglichkeit, es einzureichen. Es benötigt eine Senden-Schaltfläche.
  • Sie überprüfen nicht, ob Ihr Formular gesendet wurde.

Es ist möglich, eine JavaScript-Variable in einer versteckten Variablen in einem Formular festzulegen, diese dann zu senden und den Wert in PHP zurückzulesen. Hier ist ein einfaches Beispiel, das dies zeigt:

<?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;
?>
user3822447
quelle
2

Wenn Ihre Seite zum ersten Mal geladen wird, führen Sie den PHP-Code zum ersten Mal aus und legen Sie das vollständige Layout Ihrer Webseite fest. Nach dem Seitenlayout wurde das Laden von JavaScript festgelegt. Jetzt interagiert JavaScript direkt mit DOM und kann das Layout bearbeiten, PHP kann die Seite jedoch nicht aktualisieren. Es gibt nur eine Möglichkeit, Ihre Seite zu aktualisieren und die Parameter in der Seiten-URL zu übergeben, damit Sie die Daten über PHP abrufen können. Daher verwenden wir AJAX, um Javascript mit PHP zu interagieren, ohne die Seite neu zu laden. AJAX kann auch als API verwendet werden. eine weitere Sache, wenn Sie die Variable bereits in PHP deklariert haben. Vor dem Laden der Seite können Sie sie mit Ihrem Javascript-Beispiel verwenden.

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

Der obige Code ist korrekt und wird funktionieren. Aber der folgende Code ist völlig falsch und wird niemals funktionieren.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Übergeben Sie den Wert von JavaScript über AJAX an PHP

    Dies ist der sicherste Weg, dies zu tun. weil HTML-Inhalte über Entwicklertools bearbeitet werden können und der Benutzer die Daten bearbeiten kann. Daher ist es besser, AJAX zu verwenden, wenn Sie Sicherheit für diese Variable wünschen. Wenn Sie ein Neuling bei AJAX sind, lernen Sie bitte AJAX, es ist sehr einfach.

Der beste und sicherste Weg, JavaScript-Variablen an PHP zu übergeben, ist AJAX

einfaches AJAX-Beispiel

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-Wert von Javascript zu PHP über versteckte Felder.

Andernfalls können Sie versteckte HTML-Eingaben in Ihrem Formular erstellen. mögen

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

Übergeben Sie dann über jQuery oder JavaScript den Wert an das ausgeblendete Feld. mögen

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

Wenn Sie jetzt das Formular senden, können Sie den Wert in PHP erhalten.

Sagte Mohd Ali
quelle
1
Danke dir. Sehr hilfreich. Mit der jQuery-Methode können Sie keine Daten übergeben, die während der Ausführung der Seite generiert werden. Sie können ein Eingabefeld nicht auf einen Wert setzen und es von PHP abholen? Dies ist eines der klarsten Ajax-Beispiele, die ich je gesehen habe. Ich freue mich darauf, es zu versuchen.
Locken
1

Möglicherweise können Sie die Methode jquery serialize () verwenden, damit alles auf einmal ausgeführt wird.

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

// Auf diese Weise können Sie den versteckten Wert auch auf der Serverseite erhalten.

Satyapriya Mishra
quelle
0

Diese offensichtliche Lösung wurde zuvor nicht erwähnt. Sie können auch Cookies verwenden, um Daten vom Browser zurück an den Server zu übertragen.

Setzen Sie einfach ein Cookie mit den Daten, die Sie mit Javascript im Browser an PHP übergeben möchten.

Dann lesen Sie einfach dieses Cookie auf der PHP-Seite.

Tim
quelle
. . . Möchten Sie ein Beispiel und vielleicht ein oder zwei relevante Links geben? (Siehe Antworten .)
Ashleedawg
0

Wir können JavaScript-Variablenwerte nicht direkt an den PHP-Code übergeben ... PHP-Code wird auf der Serverseite ausgeführt und weiß nichts darüber, was auf der Clientseite vor sich geht.

Daher ist es besser, AJAX zu verwenden, um den JavaScript-Wert in den PHP-Code zu analysieren.

Oder alternativ können wir dies mit Hilfe von COOKIES in unserem Code tun.

Danke & Prost.

Rohit Saini
quelle