所以我有一个管理面板我正在创建用于测试目的只是为了获得经验而我正在尝试这样做当你登录时(使用PHP会话)你可以点击按钮配置文件,它会带你到你的个人资料并显示您的姓名,电子邮件,用户组。所有这些我都在我的数据库中,但我似乎无法显示它们。
这是我的代码
<?php
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
sec_session_start();
if (isset($_GET['username'])) {
$username = mysql_real_escape_string($_GET['username']);
if (ctype_alnum($username)) {
//check user exists
$check = mysql_query("SELECT username, email, usergroup FROM members WHERE username='$username'");
if (mysql_num_rows($check)===1) {
$get = mysql_fetch_assoc($check);
$username = $get['username'];
$email = $get['email'];
$usergroup = $get['usergroup'];
} else {
echo "<h2>User does not exist!</h2>";
exit();
}
}
}
?>
<html>
<head>
<title>test</title>
<body>
<php? echo $username; ?>
</body>
</html>
你有什么想法吗?
谢谢,
另外 - 我已将$ username定义为变量,但当我显示它并加载页面时,它只是说未定义变量:用户名
答案 0 :(得分:2)
很难确定实际错误发生的位置。我们来看看吧。
让我们从您的包含开始:
include_once 'includes/db_connect.php';
include_once 'includes/functions.php';
这是两个未知来源。很难说是否有问题。
如果您检查URI传递的用户名:
if (isset($_GET['username'])) {
这可能会导致错误(虽然它不太可能在你的情况下调用错误),因为如果你传递一个没有值的GET变量键(例如index.php?foo
导致isset($_GET['foo']) == true
,而{ {1}}。因此,使用!empty($_GET['foo']) == false
代替!empty()
非常方便。
检查用户名是否为字母数字:
isset()
自ctype_alnum()
"checks if all of the characters in the provided string [...] are alphanumeric"起,错误可能是通过传递非字母数字字符的用户名造成的。
您对字母数字检查没有if (ctype_alnum($username)) {
定义。考虑这样做,例如通过添加
else {}
您的MySQL提取似乎没问题,否则您的
if(ctype_alumn(...)) {
// ...
} else {
echo "<h2>Alphanumeric username required!</h2>";
exit();
}
会获取它。
最后,还要考虑为echo "<h2>User does not exist!</h2>";
exit();
检查添加其他案例,例如:像这样
isset($_GET['username'])
if (isset($_GET['username'])) {
// ...
} else {
echo "<h2>No username provided!</h2>";
exit();
}
用法 @Andy评论了使用var_dump()
转储有关var_dump()
的信息的建议。这是一个例子:
$_GET['username']
将打印出类似
的内容if (isset($_GET['username'])) {
var_dump($_GET['username']);
exit();
}