我正在创建一个目录列表,并且正在努力指导一个php if语句来触发正确的事件。
该语句控制两个段落的显示。
看起来像这样:
if ($userIsLoggedIn && $_SESSION['accountNum'] == $lstId)
{
$pageContent .= "
<span class='editListing'><a href='/listings/edit/basic/index.php'>Edit Listing...</a></span>
";
} else {
$pageContent .= "
<span class='editListing'>Your Listing? <a href='/listings/edit/basic/index.php'>Login to edit...</a></span>
";
}
$userIsLoggedIn
是一个检查用户是否已登录网站的功能。 (当用户登录网站时,他们的帐号将作为会话变量存储。)
变量$ lstId可以解释如下:
while ($row = mysql_fetch_array($data)) {
$lstId = $row['id'];
...
它位于mysql表中的任何特定行的字段id的值。
现在,假设用户搜索返回2个结果的字符串。每个结果都保存在一个容器中,循环使容器重复,每个行结果都是匹配的。
容器内部是if语句生效的地方。
我基本上想要做的是,对于每个列表,用户会被提示“您的列表?登录进行编辑”如果用户选择此链接,他们将被定向到登录页面,一旦登录他们就是能够编辑与其用户帐户相关的商家信息。
但我遇到的问题是,$lstId
似乎是返回的任何行的任何id,因此基本上,当用户登录网站时,“编辑列表”段落显示在每个包含的结果,甚至是与其帐户无关的结果。如果用户点击此链接,则会将其定向到可以编辑自己的商家信息的页面。
我的目标是,“编辑列表”这一段只会出现在包含自己列表的结果中。在所有其他商家信息中,该段落将保留为“您的商家信息,登录进行修改”。
以下是用于生成每个结果的完整html:
if ($tempVar == 0) {
$pageContent .= "
<div class='searchResultS'>
";
if ($total_pgs > 1)
{
$pageContent .= "
<p>$paginator</p>
";
}
}
$pageContent .= "
<div class='searchResult'>
<div class='searchResultWrapper'>
";
if ($lstPage !== "")
{
$pageContent .= "
<span class='moreDetails'><a href='/listings/$lstPage.php'>More Details...</a></span>
";
}
$pageContent .= "
<h3>$lstName</h3>
";
if ($userIsLoggedIn && $_SESSION['accountNum'] == $lstId)
{
$pageContent .= "
<span class='editListing'><a href='/listings/edit/basic/index.php'>Edit Listing...</a></span>
";
} else {
$pageContent .= "
<span class='editListing'>Your Listing? <a href='/listings/edit/basic/index.php'>Login to edit...</a></span>
";
}
$pageContent .= "
<br style='clear:both; height:0; font-size: 1px; line-height: 0px;' />
<div class='bizDesc'>
<p><span class='listHeadings'>Description:</span> $lstDesc</p>
</div>
<div class='bizAddr'>
<p><span class='listHeadings'>Street:</span> $lstAddress</p>
<p><span class='listHeadings'>Town:</span> $lstArea</p>
<p><span class='listHeadings'>Province:</span> $lstProvince</p>
<p><span class='listHeadings'>Post Code:</span> $lstPostcode</p>
<p><span class='listHeadings'>GPS Co-Ords:</span> $lstGps</p>
</div>
<div class='bizCont'>
<p><span class='listHeadings'>Contact:</span> $lstContact</p>
<p><span class='listHeadings'>Tel:</span> $lstTel</p>
<p><span class='listHeadings'>Cell:</span> $lstCell</p>
<p><span class='listHeadings'>Fax:</span> $lstFax</p>
<p><span class='listHeadings'>Skype:</span> $lstSkype</p>
<p><span class='listHeadings'>eMail:</span> <a href='mailto: $lstEmail?subject=Your listing on bergbiz.co.za'>$lstEmail</a></p>
</div>
</div>
</div><!-- end .searchResult -->
";
$tempVar ++;
}
如果有人对此有任何意见,建议或见解,如果您能与我分享一些内容,将不胜感激!
谢谢!
编辑:
代码直接放在循环中的if语句之后:
$td = $_SESSION['accountNum'];
echo"session var is $td";
echo"lst id is $lstId";
输出:
session var is 10005lst id is 10003session var is 10005lst id is 10004session var is 10005lst id is 10002session var is 10005lst id is 10005
为什么它会像这样出现? session var保持不变,但是id变量是循环的吗?
答案 0 :(得分:2)
我要注意的第一件事是你的if语句使用=而不是==,所以对于任何$ lstId它都会返回true。看看是否改变了这个:
$_SESSION['accountNum'] = $lstId
到此:
$_SESSION['accountNum'] == $lstId
无法解决当前问题。
答案 1 :(得分:0)
当然有一个问题如下:
$_SESSION['accountNum'] = $lstId
应该是
$_SESSION['accountNum'] == $lstId
目前,每次运行if语句时,你都要将$ _SESSION ['accountNum']设置为等于$ lstId,所以自然它会匹配并假设用户已正确登录并拥有该列表。