IF语句不分隔Empty或Isset

时间:2012-07-26 13:38:37

标签: php mysql if-statement isset

我创建了一个会员,人们可以在其中制作个人资料。我想做的是显示"创建个人资料"如果还没有创建一个"编辑个人资料"和"查看个人资料"如果它没有。我尝试使用if empty和if isset代码设置,但是不能区分谁拥有个人资料以及谁没有。

以下是相关代码:

    $colname_rs_Members_tbl = "-1";
if (isset($_SESSION['MM_Username'])) {
  $colname_rs_Members_tbl = $_SESSION['MM_Username'];
}
mysql_select_db($database_members_db_conn, $members_db_conn);
$query_rs_Members_tbl = sprintf("SELECT * FROM members_tbl WHERE username = %s", GetSQLValueString($colname_rs_Members_tbl, "text"));
$rs_Members_tbl = mysql_query($query_rs_Members_tbl, $members_db_conn) or die(mysql_error());
$row_rs_Members_tbl = mysql_fetch_assoc($rs_Members_tbl);
$totalRows_rs_Members_tbl = mysql_num_rows($rs_Members_tbl);

$first = $row_rs_Members_tbl['first_name'];
$last = $row_rs_Members_tbl['last_name'];
$profile_url_name = strtolower($first . $last);

$colname_rs_Actors_tbl = "-1";
if (isset($_SESSION['$profile_url_name'])) {
  $colname_rs_Actors_tbl = $_SESSION['$profile_url_name'];
}
mysql_select_db($database_profiles_db_conn, $profiles_db_conn);
$query_rs_Actors_tbl = sprintf("SELECT profile_url_name FROM actors_tbl WHERE profile_url_name = %s", GetSQLValueString($colname_rs_Actors_tbl, "text"));
$rs_Actors_tbl = mysql_query($query_rs_Actors_tbl, $profiles_db_conn) or die(mysql_error());
$row_rs_Actors_tbl = mysql_fetch_assoc($rs_Actors_tbl);
$totalRows_rs_Actors_tbl = mysql_num_rows($rs_Actors_tbl);

<p align="center"><?php if (isset($row_rs_Actors_tbl['profile_url_name'])) {echo '<a href="http://profiles.oneforestfilms.com/actors/add_profile.php">Create Actor Profile</a><br />';} else {echo '<a href="http://profiles.oneforestfilms.com/actors/edit_profile.php?profile_url_name=<?php echo $profile_url_name; ?>">Edit Actor Profile</a><br />
    <a href="http://profiles.oneforestfilms.com/actors/actor.php?profile_url_name=<?php echo $profile_url_name; ?>">View Actor Profile</a>';} ?></p>

现在我也试过这个:

<?php $profile = $row_rs_Actors_tbl['profile_url_name']; if (empty($profile)) {echo...

我也用isset尝试过。问题是,对于有个人资料的人来说,同样的事情就是为没有人的人展示。有没有人对此有答案?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您似乎非常关心,但还不够,关于验证用户是否有个人资料,因为您经常检查是否设置了$_SESSION变量,但是无论如何都要执行MySQL语句。

此外,行if (isset($_SESSION['$profile_url_name'])) {在单引号中有$profile_url_name - 这意味着它的值不会被使用;相反,它将文字用作“$ profile_url_name”。如果您实际上将$_SESSION索引命名为$_SESSION['$profile_url_name'],这可能会很好,但考虑到您实际上有一个名为$profile_url_name的变量,它看起来很奇怪。我认为它应该是$_SESSION['first_name last_name']

作为解决问题的开始,最好清理现有代码并更清楚地分离事物。尝试这样的事情:

<?php
$valid_user = false;
$row_rs_Members_tbl = '';
$row_rs_Actors_tbl = '';
$profile_url_name = '';
if (isset($_SESSION['MM_Username'])) {
    // first-check, success; we have a set username
    mysql_select_db($database_members_db_conn, $members_db_conn);
    $query_rs_Members_tbl = sprintf("SELECT * FROM members_tbl WHERE username = %s", GetSQLValueString($_SESSION['MM_Username'], "text"));
    $rs_Members_tbl = mysql_query($query_rs_Members_tbl, $members_db_conn) or die(mysql_error());
    $row_rs_Members_tbl = mysql_fetch_assoc($rs_Members_tbl);

    $profile_url_name = strtolower($row_rs_Members_tbl['first_name'] . $row_rs_Members_tbl['last_name']);
    if (isset($_SESSION[$profile_url_name])) {
        // there is a session-value set for this name; good chance we have a profile!
        mysql_select_db($database_profiles_db_conn, $profiles_db_conn);
        $query_rs_Actors_tbl = sprintf("SELECT profile_url_name FROM actors_tbl WHERE profile_url_name = %s", GetSQLValueString($_SESSION[$profile_url_name], "text"));
        $rs_Actors_tbl = mysql_query($query_rs_Actors_tbl, $profiles_db_conn) or die(mysql_error());

        if (mysql_num_rows($rs_Actors_tvl) > 0) {
            // w00t, we found a profile =]
            $row_rs_Actors_tbl = mysql_fetch_assoc($rs_Actors_tbl);
            $valid_user = true;
        }
    }
}
?>
<p align="center">
    <?php if ($valid_user === true) { ?>
        <a href="http://profiles.oneforestfilms.com/actors/add_profile.php">Create Actor Profile</a>
    <?php } else { ?>
        <a href="http://profiles.oneforestfilms.com/actors/edit_profile.php?profile_url_name=<?=urlencode($profile_url_name);?>">Edit Actor Profile</a>
        <br />
        <a href="http://profiles.oneforestfilms.com/actors/actor.php?profile_url_name=<?=urlencode($profile_url_name);?>">View Actor Profile</a>
    <?php } ?>
</p>

在上面的示例中,我删除了对$totalRows_*变量的引用,因为它们未被使用。另外,我将$_SESSION['$profile_url_name']替换为$_SESSION[$profile_url_name],以防万一。

相关问题