PHP MySQL 用户资料页面

问题描述

我有一个 PHP 登录/注册系统,它运行良好。我还有一个 profile.PHP 页面,用于显示当前登录用户的信息。现在,我想这样做,如果用户登录并转到 profile.PHP,他们将看到自己的个人资料页面以及他们的信息,但是如果用户导航到 profile.PHP?id=2 页面,他们必须查看 ID 为 2 的配置文件。差不多完成了,但是当我更改 id?=2 时,只有 ID 更改。知道为什么它不起作用吗?

profile.PHP 代码

<?PHP
   session_start();
   // If the user is not logged in redirect to the login page...
   if (!isset($_SESSION['loggedin'])) {
       header('Location: /admin/index.PHP');
       exit;
   }
   $DATABASE_HOST = 'localhost';
   $DATABASE_USER = 'root';
   $DATABASE_PASS = '';
   $DATABASE_NAME = 'PHPlogin';
   $con = MysqLi_connect($DATABASE_HOST,$DATABASE_USER,$DATABASE_PASS,$DATABASE_NAME);
   if (MysqLi_connect_errno()) {
    exit('Failed to connect to MysqL: ' . MysqLi_connect_error());
   }

   $stmt = $con->prepare('SELECT username,realname,password,email,second_email,sex,age,country,city,timestamp FROM accounts WHERE id = ?');

   $stmt->bind_param('i',$_SESSION['id']);
   $stmt->execute();
   $stmt->bind_result($username,$realname,$password,$email,$second_email,$sex,$age,$country,$city,$timestamp);
   $stmt->fetch();
   $stmt->close();
   if (isset($_GET['id']) && $_GET['id'] != "") {
    $id = $_GET['id'];
   } else {
    $id = $_SESSION['user_id'];
   }

   $MysqLi = $con;

if ($MysqLi->connect_errno) {
echo "<p>MysqL error no {$MysqLi->connect_errno} : {$MysqLi->connect_error}</p>";
exit();

}

## query database

# fetch data from MysqL database
$sql = "SELECT * FROM accounts WHERE id = {$id} LIMIT 1";
if ($result = $MysqLi->query($sql)) {
$user = $result->fetch_array();
} else {
echo "<p>MysqL error no {$MysqLi->errno} : {$MysqLi->error}</p>";
exit();
}
require_once($_SERVER['DOCUMENT_ROOT'].'/admin/includes/header.PHP');
if ($result->num_rows == 1) {
echo "
        <section class='prfileMenu tabcontent' id='Profiles'>
            <div class='profile_header'>
                <span class='page_title'>Profile Page</span>
                <hr class='page_title_hr'>  
            <div>
            <div class='profile-container-wrapper'>
                <div class='prof-datas-title'>Basic Infos</div>
                <div class='profile-datas-container'>
                <table>
                    <tr>
                        <td>Username:</td>
                        <td id='profileUsername'>{$username}</td>
                        <td>
                            <a class='prov-delete-prof'>Delete</a>
                            <a class='edit-data'>Edit</a>
                        </td>
                    </tr>
                    <tr>
                        <td>User ID:</td>
                        <td>{$id}</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Priority:</td>
                        <td id='priority'>unkNow</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Joined:</td>
                        <td>{$timestamp}</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Status:</td>
                        <td><span class='prof-status'>active<span></td>
                        <td></td>
                    </tr>
                </table>
                </div>
            </div>
            <div class='profile-container-wrapper'>
                <div class='prof-datas-title'>General</div><br>
                <div class='profile-datas-container'>
                <table>
                    <tr>
                        <td>Real Name:</td>
                        <td>{$realname}</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Email:</td>
                        <td>{$email}</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Second Email:</td>
                        <td>".$second_email."</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Age:</td>
                        <td>".$age."</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Sex:</td>
                        <td>".$sex."</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Country:</td>
                        <td>".$country."</td>
                        <td></td>
                    </tr>
                    <tr class='exception-border'>
                        <td>City:</td>
                        <td>".$city."</td>
                        <td></td>
                    </tr>
                </table>
                </div>
            </div>
            <div class='profile-container-wrapper'>
                <div class='prof-datas-title'>Security</div>
                <div class='profile-datas-container'>
                <table>
                    <tr>
                        <td>New Email:</td>
                        <td>Changes to this email address are delayed by 1 week.</td>
                        <td class='edit-data'>Get</td>
                    </tr>
                    <tr>
                        <td>New Password</td>
                        <td>unkNown</td>
                        <td class='edit-data'>Get</td>
                    </tr>
                    <tr>
                        <td>New Passkey:</td>
                        <td>Unavailable</td>
                        <td class='edit-data'>Get</td>
                    </tr>
                    <tr>
                        <td>2FA:</td>
                        <td>disabled</td>
                        <td></td>
                    </tr>
                </table>
                </div>
            </div>
            <div class='profile-container-wrapper'>
                <div class='prof-datas-title'>Advanced</div>
                <div class='profile-datas-container'>
                <table>
                    <tr>
                        <td>Activation Code:</td>
                        <td>6058bf4fa2c2a</td>
                        <td></td>
                    </tr>
                    <tr>
                        <td>Beta Program:</td>
                        <td>disabled</td>
                        <td class='edit-data'>Enable</td>
                    </tr>
                </table>
                </div>
            </div>
        </section>
    </main>

";
} else {
echo "
    <section class='prfileMenu tabcontent' id='Profiles'>
        <div class='profile_header'>
            <span class='page_title'>Error: 404</span>
            <hr class='page_title_hr'>  
        <div>
            <div class='centered-tag'>
                <h1 class='error-blank'>404</h1>
                <p>Page not found</p>
                <span>The page you're looking for may have been removed,renamed,or temporarily unavailable. </span>
                <div class='forbidden-backto-button-container'>
                    <a>Back to Dashboard</a>
                </div>
            </div>
        </div>
        </div>
    </section>
    </main>
";
}
?>
<script src='/admin/includes/assets/js/adminrank.js'></script>
<script src='/admin/includes/assets/js/productivity_meter.js'></script>
<?PHP
require_once($_SERVER['DOCUMENT_ROOT'].'/admin/includes/footer.PHP'); ?>

解决方法

您必须将 $id 绑定到您的查询并在它之前检查 $_GET["id"] 是否存在

     if (isset($_GET['id']) && $_GET['id'] != "") {
    $id = $_GET['id'];
   } else {
    $id = $_SESSION['user_id'];
   }
$stmt = $con->prepare('SELECT username,realname,password,email,second_email,sex,age,country,city,timestamp FROM accounts WHERE id = ?');
   $stmt->bind_param('i',$id);
   $stmt->execute();
   $stmt->bind_result($username,$realname,$password,$email,$second_email,$sex,$age,$country,$city,$timestamp);
   $stmt->fetch();
   $stmt->close()

;