私は立ち往生していると思います。誰かがここで私を助けてくれることを本当に願っています。
ということで、PHPとJSでクイズアプリみたいなものを作ろうと思っています。これは、ユーザーに 4 つの回答が可能な画像が与えられ、その画像に何が写っているかを推測するというものです。ユーザーは、クリックした回答に基づいて x ポイントを受け取り、写真と回答などを含む次のページにリダイレクトされます。ユーザーが次のページにスキップする可能性もあります。ただし、問題は次のとおりです。
ユーザーが特定の質問に既に回答しているかどうかを確認するにはどうすればよいでしょうか。この質問がすでに回答されている場合は、次のページにリダイレクトできます。基本的に、これはカンニングからの保護のようなものであり、ユーザーは同じ質問からより多くのポイントを得ることができなくなります.
私は現在、すべてのページの列を作成し、そこに値を保存し、ユーザーが特定のページにアクセスしようとしたときにそれらを比較し、保存された値に基づいてリダイレクトするというMySQLソリューションにこだわっています。それが唯一の解決策ですか?
私の英語が下手で申し訳ありませんが、私の質問を理解していただければ幸いです。:)
4 に答える
MySQL dbを使用する必要がある場合があるため、永続的なソリューションですが、ページごとに新しい列を作成する必要はありません。1つの列と行データをJSONオブジェクトにして、参照し続けることができます。
{page1:'done'}
保存しようとすると、次のようになります。
{page1:'done',page2:'done'}
これには、json_encodeおよびjson_decodephp関数を使用できます。
あなたは、そのユーザーがログインおよびログアウトできると述べました。したがって、すでにユーザーのデータベースがあり、特定のユーザーがすでに回答した質問を何らかの方法で保存したいと思いますが、そのような情報をMySQLデータベースに保存する適切な方法はわかりません。
さて、私が間違っていたら申し訳ありませんが、私の仮定が正しければ、保存したいデータを保存する方法がいくつかあります。たとえば、ユーザーを含むテーブルに別の列を追加できます。この列には、ユーザーが最後に回答した質問が含まれます。また、ユーザーが次の質問に答えるたびにその値を更新できます。
つまり、4つの質問がある場合、列は空になります。質問のあるページにアクセスすると、データベースを調べます。このユーザーが最後に回答した質問は何ですか。このユーザーは質問に回答しなかったため、列はまだ空なので、最初の質問をすることができます。彼が答えた場合は、値1で列を更新できます。次に同じユーザーが質問のあるページにアクセスしたときに、データベースをもう一度調べて同じ列を調べ、値1を取得します。最初の質問をし、ユーザーに次の質問をすることができます。
質問が特定の順序で行われず、ランダムに提示できる場合は、他の可能な解決策があります。参照テーブルを作成します。新しいテーブルを作成できます。このテーブルには、user_id、question_id、およびその質問への回答の3つの列が含まれます(回答も保存する必要がある場合)。これで、ユーザーが質問を生成するページを開くたびに、質問のあるテーブルを調べて、ユーザーが回答していないすべての質問を選択できます。だからあなたはこのようなことをします:
SELECT *
FROM questions_table
WHERE question_id NOT IN
(SELECT question_id
FROM questions_answered_by_users
WHERE user_id=$currentUserId)
恒久的な解決策であり、唯一の解決策はある種のデータベース(mysql、xml、ファイルなど)サーバー側であると思います。別の方法ですが、だまされる可能性があるのは Cookie です。訪問したページの json_encode を使用して json を作成し、それらを 30 日間有効な Cookie に保存します。これは、Cookie を削除するか、別のブラウザを開くことでごまかすことができます。
各質問の一意の値をセッション変数に保存します。そのセッション変数が存在する場合は、次のページにリダイレクトします。
// init.php
session_start();
// question1.php
require 'init.php';
if (isset($_SESSION['question1'])
header('location: http://mysite.com/question2.php');
else
$_SESSION['question1'] = TRUE;
// put the question code here