我创建了一个会员,人们可以在其中制作个人资料。我想做的是显示"创建个人资料"如果还没有创建一个"编辑个人资料"和"查看个人资料"如果它没有。我尝试使用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尝试过。问题是,对于有个人资料的人来说,同样的事情就是为没有人的人展示。有没有人对此有答案?提前谢谢。
答案 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]
,以防万一。