Php 如何使用foreach和if语句只验证一次用户更新数据库表

Php 如何使用foreach和if语句只验证一次用户更新数据库表,php,Php,在保存论坛问题的MySQL数据库表中,我有一个字段,该字段还保存了喜欢或不喜欢该问题的用户ID,例如,当单击按钮时,更新列likes,格式为1、2、3、4、5等。。。我想验证一下,用户只能喜欢/不喜欢一个问题一次,因为我是php新手,我希望使用foreach和if语句检查用户ID是否已经在数据库列中,喜欢/不喜欢如果不更新,如果可用echo错误 如果我使用第一个代码,尽管数据存在于数据库中,但我什么也得不到 $nocast = htmlentities($_SESSION['user']['id

在保存论坛问题的MySQL数据库表中,我有一个字段,该字段还保存了喜欢或不喜欢该问题的用户ID,例如,当单击按钮时,更新列likes,格式为1、2、3、4、5等。。。我想验证一下,用户只能喜欢/不喜欢一个问题一次,因为我是php新手,我希望使用
foreach
if
语句检查用户ID是否已经在数据库列中,喜欢/不喜欢如果不更新,如果可用
echo
错误

如果我使用第一个代码,尽管数据存在于数据库中,但我什么也得不到

$nocast = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
$likes = ("$row[likes]");
$dislikes = ("$row[dislikes]");
foreach($likes as $voters)
    if($likes == $nocast)
        echo("you already voted");
exit;
如果我使用第二个,我得到了我想要的,但问题是我不能直接输入数字

$nocast = htmlentities($_SESSION['user']['id'], ENT_QUOTES, 'UTF-8');
$likes = ("1, 2, 3, 4, 5");
foreach($likes as $voters)
    if($likes == $nocast)
        echo("you already voted");
exit;

我不需要创建两个表,如果这是错误的,怎么做?欢迎任何建议。

由于一个用户可以对多个问题进行投票,而一个问题可以由多个用户投票,因此您具有多对多关系。因此,您最好使用两个表。

访问数组键的基本语法错误:

$likes = ("$row[likes]");
这应该是:

$likes = $row['likes'];

这就留下了一个问题:这个变量是否真的包含了您想要的数组,如果没有看到更多的代码,我们就无法判断这个问题。运行
var\u dump($likes)
很快就会显示给您。

如果字段是逗号分隔的,您还需要
分解()
字符串到一个数组中,然后再遍历它。@IMSop我不能真正理解您的意思“var\u dump($likes);”@疯狂的程序员,要买什么?将该行添加到脚本中,PHP会告诉您变量中包含的内容。如果它是一个具有所需值的数组,那么很好;如果没有,那么您需要更改一些内容,例如使用explode将项目从字符串中分离出来,正如showdev所说。@IMSop好的,我很好,这里也没有什么帮助,我的用户id是
id
int(11)not NULL AUTO_INCREMENT,当我将id传输到其他也要求其id为
id
int(11)的字段时NOTNULL AUTO_INCREMENT,我应该在什么数据类型中保留用户id以避免重复输入