PHP-If语句,需要一个更好的解决方案来完成这个简单的任务


PHP - If statement, need a better solution for this simple task

我正在创建一个目录列表,并且正在努力引导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

你知道为什么会这样吗?会话var保持不变,但是id变量正在循环?

我要注意的第一件事是,if语句使用的是=,而不是==,因此对于任何$lstId,它都会返回true。查看是否更改此项:

$_SESSION['accountNum'] = $lstId

到此:

$_SESSION['accountNum'] == $lstId

并不能解决眼前的问题。

当然有一个问题如下:

$_SESSION['accountNum'] = $lstId

应该是

$_SESSION['accountNum'] == $lstId

目前,每次运行if语句时,您都会将$_SESSION[‘accountNum’]设置为等于$lstId,因此它自然会匹配,并假设用户正确登录+拥有该列表。