wake-up-neo.com

Greifen Sie auf eine JavaScript-Variable zu PHP

Ich muss auf eine JavaScript - Variable mitPHPzugreifen. Hier ist eine abgespeckte Version des Codes, den ich gerade ausprobiere, was nicht funktioniert:

<script type="text/javascript" charset="utf-8">
    var test = "tester";
</script>

<?php
    echo $_GET['test'];
?>

Ich bin sowohl für JavaScript als auch für PHP völlig neu.

UPDATE: OK, ich denke ich habe das zu sehr vereinfacht. Ich versuche, ein Formular zu erstellen, das einen Twitter-Status aktualisiert, wenn es gesendet wird. Ich habe das Formular in Ordnung, aber ich möchte auch Geolocation-Daten hinzufügen. Wie kann ich auf diese Informationen mit PHP zugreifen, wenn ich das Formular absende?

26
Chris Armstrong

Die kurze Antwort lautet Sie können nicht.

Ich kenne keine PHP - Syntax, aber ich kann Ihnen sagen, dass PHP auf dem Server ausgeführt wird und JavaScript auf dem Client (im Browser) ausgeführt wird.

Sie machen ein $ _GET, mit dem Sie Formularwerte abrufen :

Die integrierte $ _GET-Funktion wird verwendet, um Werte in einem Formular mit method = "get" zu erfassen.

Mit anderen Worten, wenn Sie auf Ihrer Seite Folgendes hatten:

<form method="get" action="blah.php">
    <input name="test"></input>
</form>

Ihr $ _GET-Aufruf würde den Wert in diesem Eingabefeld abrufen.

Wie kann man also einen Wert aus JavaScript abrufen?

Nun, Sie könnten den Javascript-Wert in ein ausgeblendetes Formularfeld stecken ...

<script type="text/javascript" charset="utf-8">
    var test = "tester";
    // find the 'test' input element and set its value to the above variable
    document.getElementByID("test").value = test;
</script>

... elsewhere on your page ...

<form method="get" action="blah.php">
    <input id="test" name="test" visibility="hidden"></input>
    <input type="submit" value="Click me!"></input>
</form>

Wenn der Benutzer dann auf Ihre Submit-Schaltfläche klickt, gibt er/sie eine "GET" -Anforderung an blah.php ab und sendet den Wert in "test" mit.

33
Pandincus

Da JavaScript eine clientseitige Sprache und PHP eine serverseitige Sprache ist, müssen Sie die Variable physisch in das PHP -Skript verschieben, indem Sie entweder die Variable in das Seitenaufrufen von PHP - Skript (script.php? Var = test), das wirklich nichts mit JavaScript zu tun hat oder indem die Variable bei jeder Änderung der Variablen über einen AJAX/AHAH-Aufruf an PHP übergeben wird.

Wenn Sie den zweiten Weg gehen wollten, würden Sie XMLHttpRequest oder meine Vorlieben sehen. JQuerys Ajax ruft: http://docs.jquery.com/Ajax

4
Decipher

_GET greift auf Abfrage-String-Variablen zu, test ist keine Querystring-Variable (PHP verarbeitet den JS in keiner Weise). Sie müssen umdenken. Sie könnten eine PHP-Variable $ test erstellen und so etwas tun:

<?php
$test = "tester";
?>
<script type="text/javascript" charset="utf-8">
    var test = "<?php echo $test?>";
</script>

<?php
    echo $test;
?>

Natürlich weiß ich nicht, warum Sie das wollen, also bin ich mir nicht sicher, welche Lösung das Beste ist.

BEARBEITEN: Wie bereits erwähnt, benötigen Sie, wenn die JavaScript-Variable wirklich auf dem Client generiert wird, AJAX oder ein Formular, um sie an den Server zu senden.

2

Wenn Sie dem Benutzer Daten anzeigen, führen Sie eine Umleitung durch:

<script language="JavaScript">
    var tester = "foobar";
    document.location="http://www.Host.org/myphp.php?test=" + tester;
</script>

oder ein iframe:

<script language="JavaScript">
    var tester = "foobar";
    document.write("<iframe src=\"http://www.Host.org/myphp.php?test=" + tester + "\"></iframe>");
</script>

Wenn Sie keine Benutzerausgabe benötigen, erstellen Sie einen iframe mit width = 0 und height = 0.

2
Hawkcannon

versuchen Sie, dies zu Ihrer js-Funktion hinzuzufügen: 

    var outputvar = document.getElementById("your_div_id_inside_html_form");
    outputvar.innerHTML='<input id=id_to_send_to_php value='+your_js_var+'>';

Später in html:

    <div id="id_you_choosed_for_outputvar"></div>

dieses Div enthält die Js-Variable, die durch ein Formular an eine andere JS-Funktion oder an PHP weitergeleitet wird. Denken Sie daran, es in Ihrem HTML-Formular zu platzieren! . Diese Lösung funktioniert gut für mich.

In Ihrem speziellen Geolocation-Fall können Sie der Funktion showPosition (Position) Folgendes hinzufügen:

    var outputlon = document.getElementById("lon1");
    outputlon.innerHTML = '<input id=lon value='+lon+'>';
    var outputlat = document.getElementById("lat1");
    outputlat.innerHTML = '<input id=lat value='+lat+'>';  

später fügen Sie diese div zu Ihrem HTML-Formular hinzu:

<div id=lat1></div>
<div id=lon1></div>

In diesen div werden Breiten- und Längengrade als Eingabewerte für Ihr PHP-Formular angezeigt. Sie sollten sie besser mit css ausblenden (wenn nur die Markierung auf einer Karte angezeigt wird), um zu verhindern, dass Benutzer sie vor dem Senden ändern und festlegen Ihre Datenbank akzeptiert Float-Werte mit der Länge 10,7.

Hoffe das wird helfen.

2
cosphi

Nun, das Problem mit dem GET ist, dass der Benutzer den Wert selbst ändern kann, wenn er einige Kenntnisse hat. Ich habe dies so geschrieben, dass PHP die Zeitzone von Javascript abrufen kann: 

// - index.php

<?php
  if (!isset($_COOKIE['timezone'])) {
?>
<html>
<script language="javascript">  
  var d = new Date(); 
  var timezoneOffset = d.getTimezoneOffset() / 60;
  // the cookie expired in 3 hours
  d.setTime(d.getTime()+(3*60*60*1000));
  var expires = "; expires="+d.toGMTString();
  document.cookie = "timezone=" +  timezoneOffset + expires + "; path=/";
  document.location.href="index.php"
</script>
</html>
<?php
} else {
  ?>

  <html>
  <head>
  <body>

  <?php 
  if(isset($_COOKIE['timezone'])){ 
    dump_var($_COOKIE['timezone']); 
  } 
}
?>
1
kyle

JS ist browserbasiert, PHP ist serverbasiert. Sie müssen ein Browser-basiertes Request/Signal generieren, um die Daten vom JS in das PHP zu laden. Werfen Sie einen Blick in Ajax .

0
Leonidas

Ich schaue mir das an und denke, wenn Sie nur Variablen in PHP in ein Formular bringen können, warum nicht einfach ein Formular erstellen und eine verborgene Eingabe in das Ding einfügen, damit es nicht auf dem Bildschirm angezeigt wird, und dann den Wert von Dein Javascript in die versteckte Eingabe und POST das in den PHP? Es wäre sicher viel weniger stressig als andere dieser Sachen, richtig?

0
Robin Joy Wirth