我正在创建一个简单的彩票脚本。
这个想法是,在一次彩票中可能会有几个中奖者,我很难检查新的中奖者是否是已经中奖的人。
我把这种数据存储在数据库中。
list[longtext]-包含参赛者列表的列(用空格或逗号分隔)winner[longtext]-包含本次彩票中奖者列表的列(用空格分隔)
我的循环:
//$won_this is person who won in this round
$old_winners = $draw[winner];
$czy = strpos($old_winners, "$won_this");
while($czy == FALSE)
{
$add_winner = $won_this;
}
$sql = "update `draws` set `winner`= concat(winner, ' $add_winner') where code='$draw['number']'";
mysql_query($sql) or die(mysql_error());
我的循环不起作用。它将永远循环,或者根本不循环。我不知道该怎么写。
我如何创建一个循环,当一个获胜者被复制时运行,并一直工作到找到新的获胜者?
我要做的第一件事是将旧的赢家转换成一个数组:
$winners = explode(' ', $draw['winner']);
然后我会在数组中添加新的赢家:
$winners[] = $won_this;
最后,我会在数组上调用array_unique
以确保唯一性,然后将数组转换回要插入数据库的字符串:
$winners_string = implode(' ', array_unique($winners));
$stmt = $connection->prepare("update `draws` set `winner`= ? where code = ?");
// Use bing_param('si'...) if $draw['number'] is an integer, not a string
$stmt->bind_param('ss', $winners_string, $draw['number']);
$stmt->execute();
尽管理想情况下,正如你的问题评论中所提到的,有更好的方法来存储数据,例如,有一个带有draw_number
列和winner
列的新表,只需为每个获胜者添加一个新行。
$czy始终为false,因此此脚本中不会发生任何事情。它总是错误的,因为您使用了错误的语法来搜索数组。更改您的解决方案以检查您的阵列Michael示例是否正确。试试