web-dev-qa-db-ja.com

PHPからJavaScript変数にアクセスする

[〜#〜] php [〜#〜]JavaScript変数にアクセスする必要があります。以下は、私が現在試しているコードの簡略版ですが、動作していません:

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

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

私はJavaScriptとPHPの両方に完全に慣れていないので、アドバイスをいただければ幸いです。

[〜#〜] update [〜#〜]:OK、私はそれをあまりにも単純化したと思います。私がやろうとしているのは、送信されたときにTwitterのステータスを更新するフォームを作成することです。フォームは正常に機能していますが、位置情報データも追加したいです。 Javascript(具体的にはGoogle Geolocation API)を使用して場所を取得しているため、フォームを送信するときにPHPでその情報にアクセスするにはどうすればよいですか?

27
Chris Armstrong

短い答えは、できません

PHP構文は知りませんが、サーバーで実行されるPHPとクライアントで実行されるJavaScriptブラウザ)。

フォーム値の取得 に使用される$ _GETを実行しています。

組み込みの$ _GET関数は、method = "get"を使用してフォームの値を収集するために使用されます。

言い換えれば、あなたのページに次のものがあった場合:

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

$ _GET呼び出しは、その入力フィールドの値を取得します。

JavaScriptから値を取得する方法は?

さて、javascriptの値を非表示のフォームフィールドに貼り付けることができます...

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

次に、ユーザーが送信ボタンをクリックすると、「GET」リクエストをblah.phpに発行し、「test」の値を送信します。

34
Pandincus

JavaScriptはクライアント側の言語であり、PHPはサーバー側の言語であるため、変数を物理的にPHPスクリプトにプッシュする必要があります。 PHPスクリプト(script.php?var = test)のページロードの変数。これはJavaScriptとはまったく関係ありません。または、変数をPHPは、変数が変更されるたびにAJAX/AHAH呼び出しを介して。

2番目のパスに進みたい場合は、XMLHttpRequest、または私の好みであるjQuerys Ajax呼び出しを見てください: http://docs.jquery.com/Ajax

4
Decipher

_GETはクエリ文字列変数にアクセスします。テストはクエリ文字列変数ではありません(PHPはJSを処理しません)。あなたは再考する必要があります。 php変数を$ testにして、次のようなことを行うことができます。

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

<?php
    echo $test;
?>

もちろん、なぜこれが必要なのかわかりませんので、最善の解決策はわかりません。

編集:他の人が指摘したように、JavaScript変数が実際にクライアントで生成される場合、サーバーに送信するためにAJAXまたはフォームが必要になります。

2

ユーザーにデータを表示する場合は、リダイレクトを実行します。

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

またはiframe:

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

ユーザー出力が不要な場合は、width = 0およびheight = 0のiframeを作成します。

2
Hawkcannon

これをjs関数に追加してみてください:

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

後でHTMLで:

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

このdivには、フォームを介して別のjs関数またはphpに渡されるjs varが含まれます。忘れずにhtmlフォームに配置してください。この解決策はうまく機能しています。

特定のジオロケーションの場合、関数showPosition(position)に次を追加してみてください。

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

後でこれらのdivをHTMLフォームに追加します。

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

これらのdivでは、PHPフォームの入力値として緯度と経度を取得します。送信する前にユーザーがそれらを変更して設定するのを避けるために、css(使用する場合はマップ上にマーカーのみを表示)を使用して非表示にした方が良いでしょうデータベースが長さ10,7のfloat値を受け入れるようにします。

これが役立つことを願っています。

2
cosphi

GETの問題は、ユーザーが知識を持っている場合、ユーザーが自分で値を変更できることです。 PHPがJavascriptからタイムゾーンを取得できるように、これを書きました。

//-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はブラウザベースです。PHPはサーバーベースです。ブラウザベースのリクエスト/信号を生成して、JSからPHPにデータを取得する必要があります。 Ajax

0
Leonidas

私はこれを見て、フォームのPHPに変数を取得できるだけであれば、フォームを作成して物に非表示の入力を入れて画面に表示されないようにしてから、あなたのjavascriptを隠された入力に入れ、POST phpに入れますか?この他のものよりもはるかに手間が少ないでしょう?

0
Robin Joy Wirth