我在尝试在$ _GET的个人资料页面上显示用户名时遇到问题,会话已创建,但无法在个人资料页面上显示用户名。
<?php include("template/header.php");
include("requires/connection.php"); ?>
<?php
if(isset($_GET['u'])) {
$username = mysqli_real_escape_string($_GET['u']);
if(ctype_alnum($username)) {
// Check user exists
$check = mysqli_query("SELECT username FROM users WHERE username='$username'");
if(mysqli_num_rows($check)===1) {
$get = mysqli_fetch_assoc($check);
$username = $get['username'];
}
else {
echo "<h2>User doesn't exist</h2>";
exit();
}
}
}
?>
<div class="profile-content-container">
<h1>Profile <?php echo "$username"; ?></h1>
<p>Welcome</p>
</div><!-- end of profile-content-container -->
<div class="profileMenu">
<div id="leftsideMenu">
<ul>
<li><a href="home.php">Home</a></li>
<li><a href="profile.php">My Profile</a></li>
<li><a href="#"></a></li>
<li><a href="#"></a></li>
<li><a href="logout.php">Logout</a></li>
</ul><!-- end of menu -->
</div><!-- end of leftsideMenu -->
</div><!-- end of profileMenu -->
<?php include("template/footer.php"); ?>
答案 0 :(得分:2)
mysqli_real_escape_string()
和mysqli_query()
函数都要求将DB连接作为第一个参数传递;你的没有。
mysqli_real_escape_string($con, $_GET['u'])
^^^^^ see that?
所以...
$username = mysqli_real_escape_string($con, $_GET['u']);
^^^^^ add the db connection variable
和查询
mysqli_query($con, "SELECT ...
^^^^^ see that?
我在这里使用了$con
,因为没有迹象表明您使用哪个变量来分配连接。
参考文献:
旁注:您可能想要更改此
if(mysqli_num_rows($check)===1)
到
if(mysqli_num_rows($check) >0 )
我在某些情况下看到===1
失败了。
另一件事,改变这段代码
$get = mysqli_fetch_assoc($check);
$username = $get['username'];
to,并使用while
循环
while($get = mysqli_fetch_assoc($check)){
// or mysqli_fetch_array
$username = $get['username'];
}
另外,您的数据库连接应该基于mysqli_
,而不是mysql_
或PDO,这对我们来说也是最不为人知的。
参考文献:
将or die(mysqli_error($con))
添加到mysqli_query()
以检查错误。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
您的代码显示了一个GET数组;不知道从哪里填充,确保它已设置而不是空。
如果使用表单,请确保不暗示POST方法。
如果您的表单使用POST方法,那么您应该使用POST而不是GET。如果您正在使用表单,请确保该元素具有“name”属性。
同样,如果你正在使用带有POST方法的表单,或者其他什么,请确保它有一个name属性。
即:
<input type="text" name="u">
修改强>
这部分将抛出一个未定义的变量通知:
<h1>Profile <?php echo "$username"; ?></h1>
因此,请使用条件语句:
<h1>Profile
<?php
if(isset($username) && !empty($username)) {
echo $username;
}
else{
echo "Username is empty or not set somewhere.";
}
?>
</h1>
<h1>Profile <?php echo $username ? $username : ""; ?></h1>
或
<h1>Profile <?php echo $username ? $username : "It is empty"; ?></h1>
或
<h1>Profile <?php echo !empty($_GET['u']) ? $_GET['u'] : ""; ?></h1>
或
<h1>Profile <?php echo !empty($_GET['u']) ? $_GET['u'] : "It is empty."; ?></h1>
正如您在评论中所说,您使用的?u="username"
应该在没有引号?u=username
的情况下阅读,或者作为示例?u=john
没有引号,并且可能区分大小写。因此john
可能与John
的大写“J”不同。