JavaScript変数をPHPに渡すにはどうすればよいですか?


150

フォームの非表示の入力を使用して、JavaScript変数をPHPに渡したいのですが。

しかし$_POST['hidden1']into の値を取得できません$salarieid。何か問題がありますか?

これがコードです:

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

2
js変数の値をcookieに保存し、後でphp cookieでその変数にアクセスできます。
shasi kanth 2013

2
@shasikanth -あなたができることをやる、しかしクッキーは、ページが表示される二時まで設定されません。そしてその時、それは最初のページビューからの値になります-それは常に後ろにあります。クッキーは動的に情報をサーバーに返すメカニズムではありません。フォームをPOSTするか、Ajax呼び出しを行うなど、ページを更新するために他のことを行う必要があります。そして、これらのいずれかを行っている場合、Cookieを使用する理由はありません。使用しているメカニズムで情報を渡すだけです。また、この質問で意図したものではなく、ページが消えた後もcookieは存続します。
ToolmakerSteve '16年

回答:


90

現在のページのJavaScriptコードから現在のページのPHPコードに変数値を渡すことはできません... PHPコードはサーバー側で実行され、クライアント側で何が行われているのか何も知りません。

GETメソッドやPOSTメソッドを使用してフォームを送信するなど、別のメカニズムを使用してHTMLフォームからPHPコードに変数を渡す必要があります。

<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、ここでPOSTメソッドを使用してフォームを送信しましたが、なぜ機能しないのかわかりません。なぜなのかご存知ですか?そして、それを解決する方法は?
SUN Jiangong

@sergey、それで私はajaxを使う必要がありますか?実際、私はそれに慣れています。
SUN Jiangong

実際、私は過去1レベルの選択ボックスであなたの方法を使用しました。しかし、今は3チェーンの選択ボックスを作成したので、メソッドを使用できません。
SUN Jiangong

この時点で:はい、AJAXテクノロジーを使用する必要があります。実現に問題がある場合は、私がお手伝いできると思います。
セルゲイクズネツォフ

3
@MadaraUchiha OPはすでにmysql_関数を使用しています。この質問に完全に書き直して回答することは目的ではありません。
ジャック

26

クッキーに保存してください:

$(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=/";
}

そしてそれをPHPで読んでください:

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

それはきれいな解決策ではありませんが、それは機能します。


2
やっと!機能する溶出液!私は今、分離のために何時間も探していて、ゲームを作っており、最高のスコアをデータベースに送信したいのですが、今すぐ修正しました!乾杯!
Cid-El

1
実際、それは素晴らしいソリューションです!PHPからJavaScriptへの移行は簡単です。JavaScriptからPHPへの変換は簡単ではありません。クッキーの使用はシンプルでエレガントです。いいえbs .. !! 当然のクッキーオフクライアントターンあれば,,, ..デフォルトでハンドルに問題のthats
JamesAD-0

$ _COOKIE ["height"]を使用して名前と値を取得する方法を教えてください。ありがとう。私のために働いていません。
Zacの2017

4
すべての賛成投票にもかかわらず、これは良い解決策ではありません。理由:次回、ブラウザがページをリクエストするまで、Cookieはサーバーに表示されません。その常に「1つ後ろ」。ブラウザーでページを初めて開いたときは、Cookieはまったくありません。これは受け入れられますか?次にブラウザでページを開いたときに、最初からCookieが存在します。以下のために一定の値、例えば、この例のように、それは許容できるかもしれません(最初に動作していないにもかかわらず!)。次に、現在の日時などの動的な値を考えます。phpは今ではなく、前の日時を表示します。ajaxを使用します。
ToolmakerSteve '16年

20

JavaScriptからPHPに変数を渡す方法はいくつかあります(もちろん、現在のページではありません)。

あなたは出来る:

  1. ここに記載されているフォームで情報を送信します(ページが更新されます)
  2. Ajaxで渡します(これについてはいくつかの投稿があります)(ページを更新する必要はありません)
  3. 次のように、XMLHttpRequestリクエスト(ページの更新なし)を介してHTTPリクエストを作成します。

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

これはもっと見栄えがよく、すべての変数をループするように作成できると確信しています-しかし、初心者が理解しやすいように、基本的には保持しています。


新しいフォームを送信するたびに、db配列を取得してjavascriptに渡す方法はどうでしょうか。次に、JavaScriptの変数も変更されます。どうやって?助けて。:(
Vincent

3
Ajaxは実際にはXMLHttpRequestであり、後者は単なる技術用語です。
Alex C.

14

これが実際の例です:PHPの同じページでJavaScript変数の値を取得します。

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

<?php
echo "<script>document.writeln(p1);</script>";
?>

1
私はこのコンセプトを試し、実際に機能しましたが、次のようにすると、<?php var x = <script> document.writeln(p1); </ script> ";?>の場合、xをエコーし​​ますが、機能しません。別の方法がありますか?
Juna serbaserbi 2015年

3
このように試すことができます<script> var p1 = "success"; </ script> <?php $ x = "<script> document.writeln(p1); </ script>"; echo $ x; ?>
Arslan Tabassum

3
この場合のphpは、単にJavaScriptを文字列としてページにエコーします。JavaScriptがPHPに渡されていません。
Ben

はい、それは私たちがする必要があることです...時には同じページのPHPでJavaScript値を使用する必要があり、ページを更新する必要がありません...そしてそれは魅力のように動作します.. :)
Arslan Tabassum

1
@ArslanTabassumいいえ、コメントを誤解しています。php はp1の値を見ることはありませんPHPではなくjavascriptecho "<script>document.writeln(p1);</script>";javascript変数p1を使用します。ブラウザがHTMLページを構築しているときに、ブラウザで実行しているJavaScript関数です。document.writeln
ToolmakerSteve、

6

PHPは、ページがユーザーに送信される前にサーバーで実行されます。JavaScriptは、受信されるとユーザーのコンピューターで実行されるため、PHPスクリプトはすでに実行されています。

JavaScript値をPHPスクリプトに渡す場合は、XMLHttpRequestを実行してデータをサーバーに送信する必要があります。

詳細については、次の前の質問を参考にしてください。Ajaxチュートリアル

サーバーにフォーム値を渡すだけでよい場合は、通常のフォームポストを実行することもできます。同じことを行いますが、ページ全体を更新する必要があります。

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

[送信]をクリックすると、ページが送信され、送信されたデータが印刷されます。


1
@Zurahn、はい、多分私はXMLHttpRequestを使用しようとするので、javascriptを使用して同じページのphpスクリプトにjavascript値を渡すことができませんか?私はたくさん検索しましたが、誰かがフォームの隠し入力でそれを行うことができると言います。このソリューションをさらに試す必要がありますか?
SUN Jiangong

6

私はこれを自分で理解しようとしていたところ、問題はこれが状況を逆に見る方法の一種であることに気づきました。ほとんどの場合、JavaScriptからphpに物事を渡そうとするのではなく、逆に移動するのが最善の方法です。PHPコードはサーバー上で実行され、htmlコード(および場合によってはjavaスクリプトも)を作成します。次に、ブラウザがページをロードし、htmlおよびjavaスクリプトを実行します。

このような状況に対処する賢明な方法は、PHPを使用してJavaScriptと必要なhtmlを作成し、ページでJavaScriptを使用してPHPで実行できないことを実行することです。これは、PHPとJavaScriptの両方の利点をかなり単純で簡単な方法で提供するようです。

ページからオンザフライでPHPに渡すように見せた1つのことは、HTMLイメージタグを使用してPHPコードを呼び出すことです。このようなもの:

<img src="pic.php">

pic.phpのPHPコードは、実際にはWebページがロードされる前にHTMLコードを作成しますが、そのHTMLコードは基本的にオンザフライで呼び出されます。ここのphpコードは、ページに画像を作成するために使用できますが、それ以外にも好きなコマンドを含めることができます。多分それはあなたのサーバー上のいくつかのファイルの内容などを変更します。これの利点は、phpコードがhtmlから実行できることであり、私はJavaScriptを想定していますが、欠点は、それがあなたのページに置くことができる唯一の出力が画像。また、URLのパラメーターを介してPHPコードに変数を渡すオプションもあります。多くの場合、ページカウンターはこの手法を使用します。


5

次のように、コードに示されたCookieを使用して、同じページでも別のページでも値を簡単に渡すことができます(私の場合、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);
        });
    }
}

そして、私はそれを使って(任意のファイルで)それにアクセスしました-

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

5

これが私のやり方です(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);

2

隠しフォームの値を設定する関数が呼び出されていますか?この例にはありません。フォームをサーバーに送信する前に、非表示の値を変更しても問題はありません。


@perstilence、そうです、私は関数を呼び出しませんでした。あなたはそれをphpで呼び出す方法を知っていますか?
SUN Jiangong、

うーん。誰かがフォーム/ onClickハンドラで何かを選択したときにそれを呼び出したいようです。PHPから呼び出しても意味がありません。誰かがフォームの値を選択すると、関数が実行され、非表示のフォームの値が更新されて、フォームポストのphpに移動します。番号?
pestilence669

@ pestilence、selectboxでアイテムを選択させたいのですが、submitボタンをクリックすると、検索結果がテーブルに表示されます。したがって、バックエンドでアイテムを選択すると、その値がphpのmysqlクエリに変数として渡されます。これが私がやりたいことです。しかし、私はJavaScriptで解決策を見つけることができないようです。手がかりはありますか?
SUN Jiangong

はい、フォームのpostメソッドまたはgetメソッドが機能する場合は受け入れられます。
SUN Jiangong、

2

あなたのコードにはいくつかの問題があります。

  • JavaScript関数func_load3()を定義しますが、それを呼び出さないでください。
  • 関数が間違った場所で定義されています。ページで定義されている場合、参照先のHTMLオブジェクトはまだ読み込まれていません。ほとんどのJavaScriptコードは、実行前にドキュメントが完全に読み込まれているかどうかを確認します。または、ページ内で参照している要素を越えてコードを移動することもできます。
  • フォームに送信する手段がありません。送信ボタンが必要です。
  • フォームが送信されたかどうかは確認しません。

フォームの非表示変数にJavaScript変数を設定して送信し、その値をPHPで読み取ることができます。これはこれを示す簡単な例です:

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

あなたのページが最初にPHPコードをロードしたとき、最初に実行され、あなたのウェブページの完全なレイアウトを設定します。ページレイアウトの後、JavaScriptロードを設定します。JavaScriptはDOMと直接対話してレイアウトを操作できますが、PHPではページを更新する必要がありません。PHP経由でデータを取得できるように、ページを更新してページURLのパラメーターを渡す方法しかありません。したがって、AJAXを使用して、ページをリロードせずにJavaScriptとPHPを対話させます。AJAXはAPIとしても使用できます。PHPですでに変数を宣言している場合は、もう1つ注意してください。ページがロードされる前に、JavaScriptの例で使用できます。

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

上記のコードは正しく、機能します。しかし、以下のコードは完全に間違っており、機能しません。

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • JavaScriptからAJAX経由でPHPに値を渡す

    これは、最も安全な方法です。HTMLコンテンツは開発者ツールを介して編集でき、ユーザーはデータを操作できるためです。したがって、その変数に対するセキュリティが必要な場合はAJAXを使用することをお勧めします。AJAXの初心者の場合は、AJAXが非常に簡単であることを確認してください。

JavaScript変数をPHPに渡す最も安全な方法は、AJAXを使用することです。

簡単な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);
            }
            });
  • 隠しフィールドを介してjavascriptからphpに値を渡します。

それ以外の場合は、フォーム内に非表示のHTML入力を作成できます。お気に入り

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

次に、jQueryまたはjavaScriptを介して、非表示フィールドに値を渡します。お気に入り

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

これでフォームを送信すると、PHPで値を取得できます。


1
ありがとうございました。非常に役立ちます。jQueryメソッドでは、ページの実行時に生成されるデータを渡すことができませんか?入力フィールドに値を設定して、それをphpで取得することはできませんか?これは、私が見た中で最も明確なAjaxの例の1つです。やってみるのが楽しみです。
カール

1

jquery serialize()メソッドを使用して、すべてが一度にできるようになるかもしれません。

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

//これにより、サーバー側でも非表示の値を取得できます。


0

この明らかに解決策は前に言及されていません。Cookieを使用して、ブラウザからサーバーにデータを返すこともできます。

ブラウザでJavaScriptを使用して、PHPに渡すデータをCookieに設定するだけです。

次に、このCookieをPHP側で読み取るだけです。


。。。例を挙げて、関連するリンクを1つまたは2つ挙げますか?(回答方法を参照してください。)
ashleedawg

0

JavaScript変数の値を直接PHPコードに渡すことはできません... PHPコードはサーバー側で実行され、クライアント側で何が行われているのかは何も知りません。

したがって、AJAXを使用してJavaScript値をphpコードに解析する方が適切です。

または、コードのCOOKIESを使用してこれを行うこともできます。

よろしくお願いいたします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.