如何在HTML/PHP修改密码表单中展示已登录用户的头像
修复方案
核心问题
你当前代码只走else分支的根本原因是页面顶部未启动session:PHP的$_SESSION全局变量需要在所有内容输出前调用session_start()才会生效,未启动时isset($_SESSION['username'])永远返回false,自然只会执行else逻辑。
其他优化点
- 冗余判断简化:无需为每个用户名写三种大小写的匹配条件,统一转为小写后匹配即可,减少重复代码
- 安全问题修复:密码输入框应使用
type="password"避免明文展示输入内容,同时移除重复的id属性(HTML要求id全局唯一) - 逻辑补全:原有代码在用户名匹配不到预设列表时不会输出任何头像,新增默认分支兜底
修正后完整代码
<?php // 必须放在页面最顶部,所有HTML输出之前,不能有任何空格、换行在这句前面 session_start(); ?> <div class="container"> <h1>CHANGE YOUR PASSWORD</h1> <div class="contact-form"> <div class="profile-pic"> <?php if (isset($_SESSION['username']) && !empty($_SESSION['username'])){ // 统一转小写+去前后空格,避免大小写、空格导致匹配失败 $username = strtolower(trim($_SESSION['username'])); switch ($username) { case 'admin': ?> <img src="profile_pics/4.png" alt="User Icon"/> <?php break; case 'muhammad azeem': ?> <img src="profile_pics/1.png" alt="User Icon"/> <?php break; case 'muhammad adnan': ?> <img src="profile_pics/2.png" alt="User Icon"/> <?php break; case 'saleem raza': ?> <img src="profile_pics/3.png" alt="User Icon"/> <?php break; case 'abdul raheem': ?> <img src="profile_pics/5.png" alt="User Icon"/> <?php break; // 新增默认分支,匹配不到预设用户名时显示默认头像 default: ?> <img src="images/1.png" alt="User Icon"/> <?php } } else{ ?> <img src="images/1.png" alt="User Icon"/> <?php } ?> </div> <div class="signin"> <form action="process_change_password_form.php" method="POST"> <input type="password" name="current_password" class="user" value="Current Password" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Current Password';}" id="current_pwd" required> <input type="password" name="new_password" class="user" value="New Password" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'New Password';}" id="new_pwd" required> <input type="password" name="confirm_new_password" class="user" value="Confirm New Password" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Confirm Password';}" id="confirm_pwd" required> <input type="submit" value="Change Password" name="submit" /> </form> </div> </div> </div> </body> </html>
内容的提问来源于stack exchange,提问作者Irfan Haider
相关产品推荐
相关产品推荐

