0

プロフィールを作成できるメンバーシップを作成しました。私がやりたいのは、まだ作成されていない場合は「プロファイルの作成」を表示し、作成されていない場合は「プロファイルの編集」と「プロファイルの表示」を表示することです。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 でそれを試しました。問題は、プロファイルを持っていない人と同じものが表示されることです。誰もこれに対する答えを持っていますか? 前もって感謝します。

4

1 に答える 1

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]

于 2012-07-26T14:01:55.360 に答える