好的我知道这是愚蠢的我做错了。但是我已经坚持了大约一个小时并且无法理解它。我真的只是开始进入PHP,所以原谅新的一面。基本上我正在显示MySQL数据库中的数据表。但我想要它,以便用户可以基本上“加入”“广告系列”,然后只有“加入”按钮显示他们尚未加入的广告系列。
<?php
//include db connect
include ("/db_con.php");
//campaign list function
function listCampaigns() {
//make connection global
global $con;
//set campaign variables
$campaignquery = mysqli_query($con, "SELECT * FROM campaigns");
while($row = mysqli_fetch_array($campaignquery )) {
$ccampaignid = $row['campaignid'];
$creator = $row['creator'];
$name= $row['name'];
$startdate = $row['startdate'];
//set campaign_bookmark variables
$userid = $_SESSION['userid'];
$bmquery = mysqli_query($con, "SELECT * FROM campaign_bookmarks WHERE userid = $userid");
while($bmrow = mysqli_fetch_array($bmquery)) {
$bmuserid = $bmrow['userid'];
$bmcampaignid = $bmrow['campaignid'];
}
//echo list in table
echo "<table border='1'>";
echo "<tr>";
//display join button if userid in campaign bookmarks does not match session userid
if($_SESSION['userid'] !== $bmuserid) {
echo "<form action='functions/campaign_bookmark.php' name='bookmarkCampaign' method='post'>
<input type='hidden' name='campaignid' value=" . $row['campaignid'] . ">
<input type='submit' value='Join' onclick='clicked();'>
</form>";
}
echo "</tr> <tr>";
echo "<td> Dungeon Master: </td>";
echo "<td>" . $creator . "</td>"; //campaign creator/DM name
echo "</tr> <tr>";
echo "<td> Campaign Name:</td>";
echo "<td>" . $name . "</td>"; //campaign name
echo "</tr> <tr>";
echo "<td> Start Date:</td>";
echo "<td>" . $startdate . "</td>"; //campaign start date
echo "</tr>";
echo "</table>";
} //end of outer while loop
} //end of listCampaigns
?>
如果用户未加入任何广告系列,则会显示加入按钮。当Join按钮显示时,它会通过campaign_bookmark.php
将数据正确地提交到数据库中。但是,一旦您加入了一个广告系列,那么所有这些广告系列的加入按钮都会消失。如果需要任何其他信息,请告诉我什么。任何帮助将非常感激。
答案 0 :(得分:1)
按钮总是消失的原因是因为上一个测试总是假,除了一个条件,前一个查询没有返回记录所以没有输入while循环。
首先设置
$userid = $_SESSION['userid'];
然后查询
$bmquery = mysqli_query($con, "SELECT * FROM campaign_bookmarks WHERE userid = $userid");
现在请注意新的userid
= $_SESSION['userid']
然后在循环内
$bmuserid = $bmrow['userid'];
所以现在$bmuserid
== $bmrow['userid']
== $_SESSION['userid']
这意味着这是假的
if($_SESSION['userid'] !== $bmuserid)
因此,无论如何都不会出现按钮,除非此查询不返回任何内容
$bmquery = mysqli_query($con, "SELECT * FROM campaign_bookmarks WHERE userid = $userid");
所以永远不会输入以下循环(使3个变量彼此相等的循环)
我不知道你应该如何修复它,你只需要重新思考这背后的逻辑,我只是指出它出错了。
PS:你的PHP代码真的需要一些清理,当html代码超过php然后考虑关闭php标签并将php嵌入到普通的html中,例如你的表可能变成这样的东西
<table border='1'>
<tr>
<?php if($_SESSION['userid'] !== $bmuserid): ?>
<?# notice you forgot to add a td here, this is invalid #?>
<form action='functions/campaign_bookmark.php' name='bookmarkCampaign' method='post'>
<input type='hidden' name='campaignid' value='<?= $row['campaignid']?>'>
<input type='submit' value='Join' onclick='clicked();'>
</form>
<? endif; ?>
</tr>
<tr>
<td> Dungeon Master: </td>
<td><?= $creator ?></td>
</tr>
<tr>
<td> Campaign Name:</td>
<td><?= $name ?></td>
</tr>
<tr>
<td> Start Date:</td>
<td><?= $startdate ?></td>
</tr>
</table>
在我看来,这是更具可读性
答案 1 :(得分:0)
这是值得考虑的事情......
SELECT *
FROM campaigns c
LEFT
JOIN campaign_bookmarks b
ON b.campaignid = c.campaignid
AND b.userid = $userid;
答案 2 :(得分:0)
我可能错了,但您正在执行一个SQL请求,根据userId选择所有广告系列,所以:
$bmuserid = $bmrow['userid'];
将为您提供当前用户的userId。所以你将永远拥有:
$bmuserid = $bmtow['userid'];
我建议您更改数据库结构并更改请求以直接选择所有未加入的广告系列。
答案 3 :(得分:0)
我可以看到按钮不会显示的唯一原因是,在您提交新的广告系列加入后,您的用户ID会在会话中被覆盖。