質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.04%

javascriptのイベント結果をPHPで変数としてうまく扱えていない?

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,239

isacRu

score 60

javascriptを使ってセレクトボックスにonChangeを付けて、同期的に値を取得に成功しました。そしてその値をPHPで変数として保持することもできたのですが、その変数を条件式に入れるとうまく判定してくれません。

<!DOCTYPE html>
<html>
<head>
    <title>ユーザー編集画面</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf8">

    <script type="text/javascript" language="javascript">
      function onButtonClick() {
          selindex = document.form1.Select1.value;
          target = document.getElementById("output");
          target.innerHTML = selindex;
      }
    </script>
</head>
<body>
<div>

<h1>ユーザー編集</h1>
<form name="form1">
<select class="select-box01" id="Select1" onChange="onButtonClick()">
  <option value="pass">パスワード変更</option>
  <option value="mail">メールアドレス変更</option>
  <option value="name">名前変更</option>
</select>
</form>

<?php
  $value = "<a id='output'>pass</a>";
  //echo "<h1>".$value."</h1>";

  echo "a".$value."b";
  if($value == "apassb"){
    echo "dfd";
  }

  switch ($value) {
    case 'pass':

      echo "<input type='password' name='pass' placeholder='Password'/>";
      echo "<input type='password' name='repeat_pass' placeholder='Repeat Password'/>";

      break;

    case 'mail':

      echo "<input type='email' name='mail' placeholder='Email'>";

      break;

    case 'name':

      echo "<input type='text' name='last_name' placeholder='姓'/>";
      echo "<input type='text' name='first_name' placeholder='名'/>";

      break;

    default:break;
  }
?>
<form method='POST'>
<input type="submit" name="create_user" class="login login-submit" value="変更">
</form>
</div>
</body>
</html>

上記のソースではセレクトボックスの値を同期的に取得し、取得した値に応じて変更対象が変わるということをしているつもりです。ですが、switch文の条件式の判定がないので、取得した値の間にaとbを入れて確かめてみたのですが、最初の値がしっかりapassbとありました。なぜ値が合っているのにもかかわらず、条件式の判定がきかないかわかる方ご教授お願いします。

[補足]
なぜPOST送信を使わないのか??
→POST送信を使えば必ずsubmitボタンが必要だと考えています。セレクトボックスで選択してからボタンをわざわざ押すのは少々手間だし、面倒と感じたから、javascriptを使ってセレクトボックスの値を動的にとりたかった。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

PHPを実行する場合、動作の順番として、

  1. サーバでPHPが実行される
  2. PHPを実行した結果がブラウザに転送される
  3. ブラウザがHTMLを解釈して、描画やJavaScriptの実行を行う

というようになっています。そのため、「通信を行わずにJavaScriptでPHPの動作を制御する」なんてことは不可能です

ただし、「通信」といってもフォームからのPOSTだけではなく、XMLHTTPRequestを使って、JavaScriptから(ユーザーの操作なしに)通信を行うこともできます(こうした手法をAjaxといいます)。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/19 20:07

    ご回答ありがとうございます。
    結局、PHPを使わずにjavascriptで直接使ったやり方で成功しました。

    キャンセル

+1

注:回答ではありません

ここの部分が気になりました。

$value = "<a id='output'>pass</a>";
  //echo "<h1>".$value."</h1>";

  echo "a".$value."b";
  if($value == "apassb"){
    echo "dfd";
  }

引用テキスト最初の値がしっかりapassbとありました

と書いていますが、ブラウザ上ではapassbかもしれませんが、実際にはタグがありますよね。
なので、$valueの値はa<a id='output'>pass</a>bではないでしょうか?

サーバーの処理、クライアントの処理、それぞれを明確に意識して作らないと訳わからないことになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/19 15:33

    失礼しました。
    $valueはechoしてるだけでしたね。
    なので$valueの値は、<a id='output'>pass</a> ですね。

    キャンセル

  • 2016/07/19 16:11

    なるほど!!でもやっぱり納得がいきません。echoした値が全然違うのに・・・

    キャンセル

  • 2016/07/19 16:19

    最初に書きましたが、これは回答ではありません。
    そもそもブラウザ側で動的に書き換えたHTMLをPHP側で取得できません。
    なぜなら処理順序が、PHP→ブラウザ、だからです。
    ブラウザからPHPを呼び出しても、動的に変更したHTMLを引き継ぐわけではありません。
    また$valueに入れている"<a id='output'>pass</a>"もPHP上では単なる文字列です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る