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

您的代码是错误的,因为您不必使用单行来存储多个选民,而是应该有多行来存储单个选民。了解数据库规范化,否则您的工作将是艰辛而徒劳的

无论如何,这是你的解决方案

$voters = explode(",",$data['voters']);
if (!in_array('"'.$_SESSION['user'].'"', $voters)) { // do something... }
于 2013-06-27T14:40:34.990 回答
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'] 是用逗号分隔的字符串,请尝试使用 explode 函数生成一个数组

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