PHP: $row 未定义变量
PHP: $row undefined variable
我的问题是我想显示我数据库中的用户配置文件的详细信息。出于某种原因,它一直给我 'Undefined variable: row'.
的错误
此外,我可以使用此代码显示用户用户名和用户 ID。 (HTML 代码)
所以我不太确定缺少什么或者我做错了什么。
希望你能帮助我。
提前谢谢你:)
PHP 代码 - 数据库连接 & SQL 查询
<?php
$id = session_id();
if ($id == "") {
session_start();
}
if (!isset($_SESSION['username'])) {
header("Location: login.php");
} //redirects to the login page if the user is not logged in
if($_POST){
try {
$host = '127.0.0.1';
$dbname = 'webdev_2014376';
$user = 'root';
$pass = '';
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
} catch(PDOException $e) {echo 'Error';}
///////////////////////////////////////////////////////////////////////////////
$sqlQuery = "SELECT * FROM users WHERE UserID = :UserID LIMIT 1";
$statement = $DBH->prepare($sqlQuery);
$status = $statement->execute();
if (!$status) {
die("Could not retrieve user");
}$row = $sqlQuery->fetch(PDO::FETCH_ASSOC);
if(isset($row)){
$_SESSION['id'] = $row['UserID'];
$_SESSION['username'] = $row['Username'];
$_SESSION['firstname'] = $row['FirstName'];
$_SESSION['lastname'] = $row['LastName'];
$_SESSION['email'] = $row['Email'];
$_SESSION['birthday'] = $row['Birthday'];
$_SESSION['phonenumber'] = $row['PhoneNumber'];
}
}
?>
HTML 代码
<body>
<div class="container container_12">
<div class="header grid_12">
<div class="headerTitle grid_6 alpha">
<h1>Facebook Again!</h1>
</div>
<?php
if (isset($_SESSION['username'])) {
echo '<div class="headerNav grid_6 omega">';
echo '<ul>';
echo '<li class="grid_1 alpha"><a href="index.php">Home</a></li>';
echo '<li class="grid_2 push_1"><a href="profile.php?UserID='.($_SESSION['id']).'">'. ($_SESSION['username']) . '</a></li>';
//echo '<li class="grid_2 push_1"><a href="profile.php?UserID=11">' . ($_SESSION['Username']) . '</a></li>';
echo '<li class="grid_2 omega push_1"><a href="logout.php"><span class="glyphicon glyphicon-log-in"></span> Logout</a></li>';
echo '</ul>';
echo '</div>';
}
else {
echo '<div class="headerNav grid_6 omega">';
echo '<ul>';
echo '<li class="grid_2 alpha"><a href="login.php">Login</a></li>';
echo '<li class="grid_2 omega"><a href="register.php">Register</a></li>';
echo '</ul>';
echo '</div>';
}
?>
</div>
<div class="profile grid_12">
<div class="profPic grid_3 suffix_1 alpha">
<img src="images/profile/RTZ.jpg" style="width: 300px; height: 300px;">
</div>
<div class="profText prefix_1 grid_7 omega">
<?php
echo "<h1>Profile of " . $_SESSION['username'] . "</h1>";
echo '<tr>';
echo '<td class="vedHeaders">First Name: </td>' . '<td class="vedOutput">' . $_SESSION['firstname'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Last Name: </td>' . '<td class="vedOutput">' . $row['LastName'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Email: </td>' . '<td class="vedOutput">' . $row['Email'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Birthday: </td>' . '<td class="vedOutput">' . $row['Birthday'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Phone Number: </td>' . '<td class="vedOutput">' . $row['PhoneNumber'] . '</td><br/>';
echo '</tr>';
?>
</div>
</div>
</body>
在 HTML 代码中,您使用 $row['LastName']
而它应该是 $_SESSION['lastname']
(其他变量也是如此)。 $row
仅在您处理 POST
数据并执行 SQL 查询时设置,在未提交表单的情况下打开页面时不会设置。
使用 $_SESSION 而不是 $row,并注意索引,因为在 $_SESSION 数组中你有小写字母: $_SESSION['lastname'] $_SESSION['email'] 等等, - 数组键区分大小写。
使用 $_SESSION
而不是 $row
。
我认为问题在于您寻找 isset($row)
。因为该行将始终设置为 post 但是如果数据库中有一个条目,您将得到一行,否则您将得到 false。
然后您尝试像访问数组一样访问 "false"。
我认为这里的问题是您需要先启动会话,然后再检查是否设置了会话 ID,请尝试启动会话,然后在之后验证会话变量:
session_start();
if (!isset($_SESSION['username'])) {
header("Location: login.php");
}
我的问题是我想显示我数据库中的用户配置文件的详细信息。出于某种原因,它一直给我 'Undefined variable: row'.
的错误
此外,我可以使用此代码显示用户用户名和用户 ID。 (HTML 代码)
所以我不太确定缺少什么或者我做错了什么。
希望你能帮助我。
提前谢谢你:)
PHP 代码 - 数据库连接 & SQL 查询
<?php
$id = session_id();
if ($id == "") {
session_start();
}
if (!isset($_SESSION['username'])) {
header("Location: login.php");
} //redirects to the login page if the user is not logged in
if($_POST){
try {
$host = '127.0.0.1';
$dbname = 'webdev_2014376';
$user = 'root';
$pass = '';
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
} catch(PDOException $e) {echo 'Error';}
///////////////////////////////////////////////////////////////////////////////
$sqlQuery = "SELECT * FROM users WHERE UserID = :UserID LIMIT 1";
$statement = $DBH->prepare($sqlQuery);
$status = $statement->execute();
if (!$status) {
die("Could not retrieve user");
}$row = $sqlQuery->fetch(PDO::FETCH_ASSOC);
if(isset($row)){
$_SESSION['id'] = $row['UserID'];
$_SESSION['username'] = $row['Username'];
$_SESSION['firstname'] = $row['FirstName'];
$_SESSION['lastname'] = $row['LastName'];
$_SESSION['email'] = $row['Email'];
$_SESSION['birthday'] = $row['Birthday'];
$_SESSION['phonenumber'] = $row['PhoneNumber'];
}
}
?>
HTML 代码
<body>
<div class="container container_12">
<div class="header grid_12">
<div class="headerTitle grid_6 alpha">
<h1>Facebook Again!</h1>
</div>
<?php
if (isset($_SESSION['username'])) {
echo '<div class="headerNav grid_6 omega">';
echo '<ul>';
echo '<li class="grid_1 alpha"><a href="index.php">Home</a></li>';
echo '<li class="grid_2 push_1"><a href="profile.php?UserID='.($_SESSION['id']).'">'. ($_SESSION['username']) . '</a></li>';
//echo '<li class="grid_2 push_1"><a href="profile.php?UserID=11">' . ($_SESSION['Username']) . '</a></li>';
echo '<li class="grid_2 omega push_1"><a href="logout.php"><span class="glyphicon glyphicon-log-in"></span> Logout</a></li>';
echo '</ul>';
echo '</div>';
}
else {
echo '<div class="headerNav grid_6 omega">';
echo '<ul>';
echo '<li class="grid_2 alpha"><a href="login.php">Login</a></li>';
echo '<li class="grid_2 omega"><a href="register.php">Register</a></li>';
echo '</ul>';
echo '</div>';
}
?>
</div>
<div class="profile grid_12">
<div class="profPic grid_3 suffix_1 alpha">
<img src="images/profile/RTZ.jpg" style="width: 300px; height: 300px;">
</div>
<div class="profText prefix_1 grid_7 omega">
<?php
echo "<h1>Profile of " . $_SESSION['username'] . "</h1>";
echo '<tr>';
echo '<td class="vedHeaders">First Name: </td>' . '<td class="vedOutput">' . $_SESSION['firstname'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Last Name: </td>' . '<td class="vedOutput">' . $row['LastName'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Email: </td>' . '<td class="vedOutput">' . $row['Email'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Birthday: </td>' . '<td class="vedOutput">' . $row['Birthday'] . '</td><br/>';
echo '</tr>';
echo '<tr>';
echo '<td class="vedHeaders">Phone Number: </td>' . '<td class="vedOutput">' . $row['PhoneNumber'] . '</td><br/>';
echo '</tr>';
?>
</div>
</div>
</body>
在 HTML 代码中,您使用 $row['LastName']
而它应该是 $_SESSION['lastname']
(其他变量也是如此)。 $row
仅在您处理 POST
数据并执行 SQL 查询时设置,在未提交表单的情况下打开页面时不会设置。
使用 $_SESSION 而不是 $row,并注意索引,因为在 $_SESSION 数组中你有小写字母: $_SESSION['lastname'] $_SESSION['email'] 等等, - 数组键区分大小写。
使用 $_SESSION
而不是 $row
。
我认为问题在于您寻找 isset($row)
。因为该行将始终设置为 post 但是如果数据库中有一个条目,您将得到一行,否则您将得到 false。
然后您尝试像访问数组一样访问 "false"。
我认为这里的问题是您需要先启动会话,然后再检查是否设置了会话 ID,请尝试启动会话,然后在之后验证会话变量:
session_start();
if (!isset($_SESSION['username'])) {
header("Location: login.php");
}