javascript関数の戻り値でphpの条件分岐

このQ&Aのポイント
  • javascriptの関数の戻り値を使って、phpの条件分岐を行いたい場合について質問します。
  • 具体的には、funcJS()というjavascriptの関数の戻り値の値によって、phpの処理を行うかどうかを判断したいです。
  • 試した方法として、phpの変数に戻り値を格納する方法や、javascriptの変数に戻り値を格納する方法を試しましたがうまくいきませんでした。他によい方法があれば教えてください。
回答を見る
  • ベストアンサー

javascript関数の戻り値でphpの条件分岐

こんばんは。 またまたプログラミングで詰まってしまいました・・・。 <?php    echo "<script> funcJS(); </script>"; //javascriptの関数。戻り値true/false    if(funcJS()の戻り値がtrueかどうか){       <~phpの処理~>     } ?> のようなプログラムがあったとして、funcJS()の戻り値の値によって、『phpの処理』を行うかどうかを決定したいのですがそのアルゴリズムが思いつきません。 色々と試行錯誤はやってみて、 (1)phpの変数にfuncJS()の戻り値を格納して、if文で条件分岐  $value = "<script> funcJS(); </script>";   しかし、これは$valueに戻り値を入れることができませんでした。 (2)javascript変数に戻り値を格納して、javascript内のif文で条件分岐 <?php    echo "<script> var value=funcJS(); </script>"; //javascriptの関数。戻り値true/false    echo "<script> if(value == 'true'){ </script>";       <~phpの処理~>    echo "<script> } </script>"; ?>  これも"}"がないと怒られてしまいました。 自分で思いつく限りは試してみたのですが、他に方法が思い浮かばず頭を抱えている状態です。 何か良い方法を知っている方、思いついた方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ky072
  • ベストアンサー率60% (85/140)
回答No.1

PHP の実行が完了した後、 出力(HTMLページ)がネットワーク経由でブラウザに送られます。 その後、受信した HTML を解析して、ブラウザが JavaScript を実行します。 ですから、ブラウザ側で実行される JavaScript の結果を、 PHP の実行時に遡ってサーバ側で取得することは原理的に不可能です。 JavaScript の実行後、Ajax 等の技術でサーバに結果を送り戻すとか、 あるいは JavaScript の funcJS() を PHP で書くとか、 全く別のアプローチが必要です。 具体的に何をしたいのかがわかれば、 良い方法が出てくるかもしれませんよ。

hayu-14
質問者

お礼

御回答ありがとうございます。 やはり、一旦サーバに結果を送信するのが無難なようですね。 >あるいは JavaScript の funcJS() を PHP で書くとか、 その手がありましたか。。。 ちらっと調べてみたところ出来ないことはなさそうだったので、こちらも検討してみます。

その他の回答 (1)

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 サーバ上でPHPが実行され、出力されたHTML(JavaScript)をブラウザ上で実行します。 よってブラウザに渡された後に実行されるJavaScriptの戻り値をPHPにて拾うのは無理です。 (一度サーバ上に送信する必要があります) >のようなプログラムがあったとして この前提条件にあるプログラムが無理なものになっています。 JavaScriptによって処理された戻り値を一度PHPに送信してそのPHP内で条件分岐し、処理を記述する必要があります。 PHPはサーバで処理されブラウザにHTML(JavaScript)を送る ブラウザに送られたHTML(JavaScript)を基にJavaScriptを実行する この基本を頭に置いた上で設計すると良いです。

hayu-14
質問者

お礼

御回答ありがとうございます。 なるほど、やはり一度phpに送信するしかないのですね。 それを念頭に置いて、もう一度設計し直してみることにします。

関連するQ&A

  • PHP内でJavaScriptの処理は可能?

    PHP内変数 $flag をJavaScriptで参照し、条件処理を行っています。 JavaScriptの処理は onClick() のタイミングで行います。 ソースの概要は以下のようになります。 1.ログインしているか見る(flagでチェック、1はログイン中…) 2.flagのデータ取得、条件処理。 3-1. flagが1以外なら、true処理 3-2. flagが1なら、false処理  ・  ・ と、こんな処理を行いたいのですが…上手く出来ません。 ソースは以下になります。PHP側の変数 "$flag" までの取得は上手く出来たのですが、 JavaScript側の処理で、つまづいてます…。 で、表題にもあるようにPHP内でJavaScriptの処理は可能でしょうか? アルゴリズム的に、アドバイスなどありましたらご教授ください。 以下が主要部分のソースになります。 <?php echo("<script Language='JavaScript'> "+ "<!-- "+ "function check(){ "+ "if($flag != '1'){ "+ "return true; "+ "} "+ "else{ "+ "header('Location: ./error.html'); "+ "exit(); "+ "return false; "+ "} "+ "} "+ "//--> "+ "</script> "); echo(" <a href='test.html'><img src='botton.gif' onClick='check()' "> アドバイスお願い致します。

    • 締切済み
    • PHP
  • jQueryの$.postの戻り値による条件分岐

    jQueryの$.postにてPHPファイルをリクエストしています。 Ajax→PHPの処理後、Ajaxに処理が戻る際にPHPからAjaxに 値を受け渡し、さらにその値によってAjaxの処理を条件分岐させたい場合 どのような記述になるのでしょうか。 PHPからの戻り値は単なるテキストかtrue/falseで考えています。 それとも、そもそも$.postでは戻り値を処理する、 といった事はできないのでしょうか。

    • ベストアンサー
    • AJAX
  • Javascriptでconfirmの戻り値を取得したい

    こんにちは。 Javascriptで独自confirmを表示し「はい・いいえ」で、後の処理を実行させたいのですが、無限ループに陥ってブラウザでscriptを停止するよう求められてしまいます。 var bb = dojoDialogConfirm("ログアウトしてよろしいですか?"); while(true) {  inv = setInterval("", 1000);  if (bb && bb == true) {   window.location = 'logout.action';   clearInterval(inv);   break;  } else if (bb = false) {   clearInterval(inv);   break;  } } window.confirmのようにJavascriptは待たないので、bbの戻り値(true or false)を取得する前にScriptは走り、bbにtrue falseどちらかが、入力された時点で処理を実行させているつもりなのですが。 どこが悪いのでしょうか?よろしくお願いします。

  • Javascriptの関数をPHPで作りましたが戻値を得る方法がわかりません。

    はじめまして。xpにxamppの環境で利用してます。 PHPをjavascriptの関数に出来ると知り、 geturl.php <?php header("Content-type: application/x-javascript"); echo "function picturl() {"; ~ MySQLを特定の条件で検索し、画像の保存先URLを$urlへ格納 ~ echo "}"; ?> showpict.html <html> <head> <meta http-equiv="content-type" content="text/html;charset=shift_jis"> <title>photo</title> <script type="text/javascript" src="geturl.php"></script> <script type="text/javascript"> ~以下でたとえば、  var url = picturl(); とすれば url に 値が入るかと思って作成して見ました。 PHPの$urlには、 ./data/001.png のような値が入ります。 私が参考にしたPHP文では戻値は変数ではなく生のテキストで echo "document.write(\"文章\")"; となっており、これは実行できました。 変数を使用して上記のような値を求めようとしたところ、 echo "document.write(\"$url\")"; echo "retuen $url"; などを試してみましたがうまくいきません。 この様な方法では利用できないものなのでしょうか?。 それともecho文が以外の方法で行うものなのでしょうか?。 よろしくご協力のほどお願いいたします。

    • ベストアンサー
    • PHP
  • javascriptで2箇所のphpの関数を取得したいのです。

    javascriptで2箇所のphpの関数を取得したいのです。 見よう見まねでやっている初心者です。よろしくお願いします。 javascriptにてphpの関数をよびだしてhtmlのinput type="text"に値を出力しようとしています。 2か所のphp を下記のようにhtmlに書いて取得しようとしたのですがどちらか一方しか取得できません。 なんとか両方を読み込めるようにできないでしょうか?分かりにくい質問かと思いますので例を書いて見ましたのでどうかよろしくお願いいたします。 (例) <script type="text/javascript" src="../data/zzz.php?aaa=abc" ></script> <script type="text/javascript" src="../../../data/xxx.php?bbb=abc" ></script> 上記のように書いても片方しか取得しないようです。 以下../dataのzzz.phpのphpです。 <?php $aaa = $_GET['aaa']; header("Content-type: application/x-javascript"); echo "window.onload = function () {"; if ($aaa== 'abb') {echo "document.getElementById(\"xxx\").value=100;","document.getElementById(\"yyy\").value=1;";} elseif ($aaa == 'abc') {echo "document.getElementById(\"tanka\").value=120;","document.getElementById(\"yyy\").value=2;";} echo "}"; ?> 以下../../../dataのxxx.phpのphpです。(例) <?php $bbb = $_GET['bbb']; header("Content-type: application/x-javascript"); echo "window.onload = function () {"; if ($bbb== 'abb') {echo "document.getElementById(\"zzz\").value=50;","document.getElementById(\"vvv\").value=10;";} elseif ($bbb == 'abc') {echo "document.getElementById(\"tanka\").value=51;","document.getElementById(\"vvv\").value=20;";} echo "}"; ?> 以上2か所のディレクトリのphpを取得したいのですが、これはできない事なのでしょうか?ちがうディレクトリから取得しなければ更新作業が大変になってしまうのです。どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで取得したデータの扱い

    653と申します。宜しくお願いいたします。 現在、PHPとJavaScript, HTMLを用いてDBを検索するアプリケーションを 作成中です。 ------------------------------------------------------- <?php <省略> $val1 = [あるselect文で検索されたユニークのデータ]; $val2 = [あるselect文で検索されたユニークのデータ(※上記select文と異なる)]; echo($valu1); echo($valu2);  <省略> ?> <script language="javascript"> <!-- Begin alert(<?=$value1?>); alert(<?=$value2?>); <省略> // End --> </script> <以下省略> ------------------------------------------ 上記のようなソースを書きました。 PHP内のecho関数で画面に表示させると $value1 ⇒ '950'、$value2⇒ '410'と出るとします。 この値は実際にDBに格納されているデータと同じ為、正常値と みなします。 しかしJavaScriptないのAlertで表示させると $value1 ⇒ '950'、$value2⇒ '299'と出てしまいます。 この(特に$value2)データの内容が変わってしまうのは なぜでしょうか? $value1, $value2の順番を替えても同じ結果になります。 PHPで取得したデータを格納した変数をJavaScript内で 使用するには何か特別な使用方法などがあるのでしょうか? もしくは上記の使い方が間違っているのでしょうか? ずっと悩んでます・・・(泣)

  • PHPの変数をJavaScriptに渡したい

    PHPの中にJavaScritの確認ダイアログを表示しています。 PHPの変数をJavaScript内でも使いたいのですが、どのようにすればよいのでしょうか? <?php $number=$_POST["number"]; if(isset($_POST["delete"])) { //選択したデータの削除 //削除の確認 print("<script language='JavaScript'>"); print("res=confirm('削除してもよいですか');"); print("if(res==false) location.href='delete.php?number=$number';"); print("</script>"); ?> また、<?php  ?>内でJavaScriptを使っているのでprint文でJavaScript文を書いていますが、あまりスマートではありません。 これ以外の記述方法はあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP
  • シェルからPHPを実行したときの戻り値について

    PHPについては、かなり初心者です。 とんちんかんな質問をするかもしれませんが、 ご容赦ください。 今、linux系のOSで、 シェルスクリプトからPHPを実行する処理を作っています。 「/usr/local/bin/php xxxx.php」 という感じです。 この戻り値を、「$?」で取得すると、 正常に終了した場合は「0」、 処理が落ちた場合は「255」 が表示されるようなのですが、 この戻り値について、0、255以外の値を戻したいと思っています。 PHP内部で、特定の条件に当てはまった場合は、「2」をreturnしたいと思っています。 そのreturn値を使って、シェルスクリプトでif文で、判定処理を行いたいのです。 シェルスクリプト側で、PHPでの処理結果を変数に受ける方法があれば、 必ずしも「$?」を使う必要はないのですが・・・、 「$?」で「2」を取得できるのが一番理想です。 何か方法をご存知の方がいらっしゃいましたら、 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPとJavaScriptの連携

    PHPとJavaScriptの連携に困っています。以下のようにフラグを立てテキストボックスに代入しています。 frm.newdata.value = '<?php if(条件) $flg = true; echo $newdata; ?>' そしてフラグがてばメッセージを出します。 <?php if($flg) echo 'alert("このデータは登録済みです");'; ?> ところがフラグ($flg)を共有化したいのですが、上下で別物扱いになります。上の処理では代入をしているのでechoでメッセージまでは出せません。 対応策ご存じであれば教えてください。

    • ベストアンサー
    • PHP