PHP - 如果声明,需要更好的解决方案来完成这个简单的任务

时间:2012-01-06 12:41:11

标签: php loops if-statement while-loop

我正在创建一个目录列表,并且正在努力指导一个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变量是循环的吗?

2 个答案:

答案 0 :(得分:2)

我要注意的第一件事是你的if语句使用=而不是==,所以对于任何$ lstId它都会返回true。看看是否改变了这个:

$_SESSION['accountNum'] = $lstId

到此:

$_SESSION['accountNum'] == $lstId

无法解决当前问题。

答案 1 :(得分:0)

当然有一个问题如下:

$_SESSION['accountNum'] = $lstId

应该是

$_SESSION['accountNum'] == $lstId

目前,每次运行if语句时,你都要将$ _SESSION ['accountNum']设置为等于$ lstId,所以自然它会匹配并假设用户已正确登录并拥有该列表。