0

問題は次のとおりです。

SQL データベースに、既に次のように投票した人のニックネームを含む行 (有権者) を取得しました。

"Nickname1", "Nickname2", "Nickname3", 

しかし、この行を配列で使用して、ログインしているユーザーがすでに投票しているかどうかを確認しようとすると、次のようになります。

$voters = array($data['voters']);
if (!in_array($_SESSION['user'], $voters)) { // count his vote // } else { echo 'already voted' };

それは単に機能しません。ユーザーがすでに投票したが、とにかく試してみると、投票がカウントされ、投票者の行に再び追加されます。

私のコードの何が問題になっていますか? ありがとう

4

3 に答える 3

0

テーブルインテーブルシステムのようなものが必要です。そのためには、新しいテーブルが必要です。そのように:

 |question_id|voter|
  223      |nickname1
  223      |nickname3
  225      |nickname1

したがって、特定の質問に対する有権者の配列を取得できます。

于 2013-06-27T14:50:51.127 に答える
0

配列の上に配列を作成しているようです。

print_r($voters) が次のようなものを示している場合

Array
(
    [0] => "Nickname1", "Nickname2", "Nickname3"
)

配列を避けてみてください。

そうでなく、$data['voters'] がカンマ区切りの文字列である場合は、爆発関数を使用して配列を生成してみてください

$voters = explode(",", $data['voters']);
于 2013-06-27T14:51:43.637 に答える
0

複数の有権者を格納するために単一の行を使用する必要はありませんが、代わりに単一の有権者を格納するためにそれぞれ複数の行を使用する必要があるため、コードは間違っています。データベースの正規化について学ばないと、あなたの仕事は困難で実りのないものになるでしょう

とにかく、ここにあなたの解決策があります

$voters = explode(",",$data['voters']);
if (!in_array('"'.$_SESSION['user'].'"', $voters)) { // do something... }
于 2013-06-27T14:40:34.990 に答える