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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

652閲覧

【Laravel5.7】独自のページネーションを作成したい

kawase18

総合スコア11

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/02/25 04:06

Laravel勉強で問題集のWebアプリケーションを作成したく考えています。
実現できるそうでできないので、質問させていただきます。

以下のような画面レイアウトで[前へ]および[次へ]を押した際、
radioボタンのどれが選択されていたか記憶しつつページを遷移させたいです。

【画面レイアウト例】(問題が50問あるとする)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■
問題1
かわうそは動物ですか?

○ YES
○ No

[前へ][次へ]
■■■■■■■■■■■■■■■■■■■■■■■■■■■■

GETかPOSTで値をもたせてやっていけばできそうですが、
実現できるコードまでたどりつけない状態です。

ヒントかサイトを教えていただけると幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

50問のYes/No程度であれば大したデータ量ではないので、一々画面を切り替えずにJavaScriptで表示だけ切り替えていけばいかがでしょう。

確認画面も必要なく、最後にすべて表示させてPOSTするだけですみます。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script type="text/javascript"> $(function() { $(".view").hide(); $("#view1").show(); $(".view").click(function() { $(this).hide(); $(this).next("div").show(); }); $("#prev").click(function() { var current = $(".view:visible"); current.hide(); current.prev("div").show(); }); $("#next").click(function() { var current = $(".view:visible"); current.hide(); current.next("div").show(); }); }); </script> <form> <div class="view" id="view1"> 問題1 かわうそは動物ですか? <input type="radio" name="q1" value="1"><label>YES</label> <input type="radio" name="q1" value="0"><label>No</label> </div> <div class="view" id="view2"> 問題2 カモノハシは哺乳類ですか? <input type="radio" name="q2" value="1"><label>YES</label> <input type="radio" name="q2" value="0"><label>No</label> </div> <div class="view" id="view3"> 問題3 コウモリは鳥ですか? <input type="radio" name="q3" value="1"><label>YES</label> <input type="radio" name="q3" value="0"><label>No</label> </div> <input type="button" id="prev" value="前へ"><input type="button" id="next" value="次へ"> </form>

投稿2019/02/25 05:07

編集2019/02/25 05:22
kunai

総合スコア5405

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

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

m.ts10806

2019/02/25 05:10

細かいツッコミで申し訳ないのですが、idの命名で数値始まりはご法度かと・・・(動かないというわけではないでしょうけどコーディングルール的に)
kunai

2019/02/25 05:21

すみません、仰る通りなのですが、初心者の方っぽいのでわかりやすいかなと書いてました。 逆にこれでいいと覚えてしまうと問題なので、編集しておきます。 ご指摘ありがとうございます。
kawase18

2019/02/25 05:22

ご回答ありがとうございます。 なるほど!このやり方はいいかもしれません。 1問の問題文が100文字、選択肢もそれぞれ50文字あったとしたら初期ページ読み込み時に時間がかかりそうですが、どうなのでしょうか。。。
kunai

2019/02/25 05:27

文字コードにもよりますが、1文字4byteで考えても、50問 x ( 100文字(問題文) + 50文字(選択肢文言) ) x 4byte = 30,000byte = 30KBなので、その程度なら大して問題ないですよ。 エンジニアを目指すなら、こういう計算は自分で考えるようにして下さい。(エンジニア知識として必要なのは1文字何byteか、という所だけですので) やろうとするなら、ajax的に、最初に画面1を表示している間に裏で通信して2つ目・3つ目・・と読み込んで行く方法もあるっちゃあります。
m.ts10806

2019/02/25 05:31

kunaiさん ご対応ありがとうございます。
kunai

2019/02/25 05:31

ちなみにこの方法だとソースコード的には1ページで完結しているので、JavaScript内で$( "input:checked" ).length で「何問チェック済みか」がすぐにわかるので、「○%完了」とか「あと○問」とかの表示も簡単に出せるメリットもあります。
kawase18

2019/02/25 05:32

なるほど。勉強になります。
guest

0

これはページネーションとは違う要件に思います。

全体をformで囲って送信していけばいいだけです。
buttonタグにもnameやvalueが設置できますが、submitにして同じnameを与えておけば、
押したボタンのvalueのみが送信されます。

そこで「今何問目か」と「どれが選択されたか」と「次へが押されたor前へが押された」を送信してくことで対応が可能です。

「○問目の答えで送信されたのはXX」というのを持っておくためには下記のいずれかの方法で実現可能と思います。

  • セッションに持っておく
  • LocalStorageなどクライアント側で記録する(問題量次第ではCookieとかでも可)
  • 「未完(答えあわせ前)の問題グループ」として都度答えをDBに更新

「何問目か」がわかって「次」「前」どちらがおさえれたか分かっていれば、リダイレクトすればいいだけなので、こちらは簡単ですね。いわゆるページネーションとはちょっと違った形です。

投稿2019/02/25 04:44

m.ts10806

総合スコア80850

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

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

kawase18

2019/02/25 05:19

ご回答ありがとうございます。 PHP初心者なので、文法調べづつコーディングしてみます。
m.ts10806

2019/02/25 05:30

はい。私も似たような仕組みを自作したことがあって、その際は3番目でDBに都度更新していくような仕組みにしました。 やり方は1つではないです。 がんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問