问题在于:
我的sql数据库中有一行(选民),其中包含已经投票的人的昵称:
"Nickname1", "Nickname2", "Nickname3",
但是,如果我尝试在数组中使用此行来检查登录用户是否已经投票:
$voters = array($data['voters']);
if (!in_array($_SESSION['user'], $voters)) { // count his vote // } else { echo 'already voted' };
它根本不起作用。如果用户已投票但无论如何都要尝试,他的投票将被计算在内,并且他会在我的选民行中再次加入。
我的代码出了什么问题?感谢
答案 0 :(得分:0)
您的代码错误,因为您不必使用单行来存储多个选民,而是您应该分别拥有多行来存储单个选民。了解数据库规范化或您的工作将是艰难而无效的
无论如何,这是你的解决方案
$voters = explode(",",$data['voters']);
if (!in_array('"'.$_SESSION['user'].'"', $voters)) { // do something... }
答案 1 :(得分:0)
您需要一个桌上式系统。对于它,你需要一个新的表。像那样:
|question_id|voter|
223 |nickname1
223 |nickname3
225 |nickname1
因此,您可以获得一系列选民以获得特定问题。
答案 2 :(得分:0)
您似乎正在数组上创建一个数组。
如果print_r($选民)显示类似
的内容Array
(
[0] => "Nickname1", "Nickname2", "Nickname3"
)
尝试避开阵列。
如果没有,$ data ['选民']是用逗号分隔的字符串,请尝试使用explode函数生成数组
$voters = explode(",", $data['voters']);