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

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

新規登録して質問してみよう
ただいま回答率
85.35%
onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

button

HTMLで用いる<button>タグです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

653閲覧

JavaScriptで複数定義した関数のうち、意図したものをbutton onClickで呼び出せない。

M.I.

総合スコア3

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

button

HTMLで用いる<button>タグです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/09/19 04:43

前提・実現したいこと

回答の正誤判定を行うページを作ろうと考えています。
プログラムは以下のサイトを参考に作っており、このサイトに記載されているものは問題なく動きました。
https://www.kodomonokagaku.com/miraiscience/support/index.html
問題を解き終わり、最後のページ(リンク先でいうところのrecord.html)で各問題の採点結果を表示させるものを作成したいと考えています。
そして、その結果をMySQLを使ってデータベースに蓄積していくものを作りたいです。
皆様のお力添えをよろしくお願いいたします。

発生している問題・エラーメッセージ

どの選択肢を選んだかにかかわらず、関数incorrect3()が呼び出され、$_SESSION["a"]=3となってしまいます。

該当のソースコード

php

1<?php 2session_start(); 3?> 4 5<script> 6 function correct(){ 7 <?php 8 $_SESSION["a"]=0; 9 ?> 10 location.href = "quiz2.php"; 11 } 12 13 function incorrect1(){ 14 <?php 15 $_SESSION["a"]=1; 16 ?> 17 location.href = "quiz2.php"; 18 19 } 20 function incorrect2(){ 21 <?php 22 $_SESSION["a"]=2; 23 ?> 24 location.href = "quiz2.php"; 25 } 26 function incorrect3(){ 27 <?php 28 $_SESSION["a"]=3; 29 ?> 30 location.href = "quiz2.php"; 31 } 32</script> 33 34<html> 35<body> 36<h1>第1問</h1> 37<p>問題文</p> 38<button onClick="incorrect1();">回答1</button> 39<button onClick="incorrect2();">回答2</button> 40<button onClick="incorrect3();">回答3</button> 41<button onClick="correct();">回答4</button> 42</body></html>

試したこと

incorrect3()で代入する値を4に変更すると、$_SESSION["a"]=4となる。
関数定義の順を変えてみると、どの回答を選んでも最後に定義された関数が呼び出されることが判明。

補足情報(FW/ツールのバージョンなど)

PHPのバージョン 7.1.x
レンタルサーバーxfree上で動作

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHPは画面表示前に実行されます。
「押したときの」を持たせたいなら、現状のコードを生かすとしたら、
セッション使うよりクエリストリングつけてquiz2.phpに飛ばすのが現実的と思います。

js

1location.href = "quiz2.php?a=1";

php

1<?php 2$a = filter_input(INPUT_GET,"a");

filter_input

投稿2021/09/19 04:47

編集2021/09/19 06:53
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

M.I.

2021/09/19 07:37

教えていただいた方法で無事に解決しました。 早速ご回答いただきありがとうございました!
m.ts10806

2021/09/19 08:35

「サーバー」「クライアント」もそうですが、「リクエスト」「レスポンス」もおさえておいてください。 それぞれがどういうタイミングでどこで実行されて何をしているのか押さえておく必要があります。
M.I.

2021/09/21 14:09

それぞれの処理のタイミングは今後も重要になりそうです。 そのあたりを一回確認しておこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問