【问题标题】:PHP: $row undefined variable [closed]PHP:$行未定义变量[关闭]
【发布时间】:2016-04-06 01:14:21
【问题描述】:

我的问题是我想显示我的数据库中的用户配置文件的详细信息。出于某种原因,它不断给我“未定义变量:行”的错误。



此外,我可以使用此代码显示用户用户名和用户 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>

【问题讨论】:

  • 现在的问题是,会话是否在所有使用会话的页面中启动?您的第二段代码并不意味着它是。
  • 嗨,所有代码都在一页中。以及我已经开始的所有不同页面 :)
  • php.net/manual/en/pdo.error-handling.php --- php.net/manual/en/function.error-reporting.php 是检查错误的好工具。还可以查看您的 HTML 源代码并使用 var_dump()
  • 需要注意的重要一点是;而将行的列分配给提取是字母大小写。 UserIDuserid 等不同。如果您的列名是小写的。
  • "嗨,我刚刚尝试了您的建议 $statement->bindParam(':UserID', $UserID); 仍然无法正常工作 – Marky B 2 分钟前" - 您的问题中没有任何内容可以支持分配$UserID 的位置(错误报告会给您带来一些关于它的信息,未被分配)。请将您的问题更新为 additional edit stackoverflow.com/posts/34557030/edit 在您原来的问题下,不要覆盖您原来的帖子,而是作为 “这是我的(新)当前代码...”.

标签: php html mysql database row


【解决方案1】:

在您使用的 HTML 代码中,$row['LastName'] 应该是 $_SESSION['lastname'](其他变量也是如此)。 $row仅在处理POST数据并进行SQL查询时设置,在未提交表单打开页面时不设置。

【讨论】:

  • 顺便说一句,感谢您编辑问题,我是新来的。但我已经尝试过你的建议,但它对我不起作用。 ://
  • 会话变量被命名为lastname,而不是LastName。显示时需要使用与分配时相同的会话变量。
  • 您还错过了在$statement-&gt;execute() 之前对$statement-&gt;bindParam() 的调用,因此:UserID 没有任何价值。这是复制错误还是真实脚本中的错误?
  • @Barmar ^ 真(好收获)。但是,不确定他们是否在第二段代码 (HTML) 中开始了会话。我在他们的问题下发表了评论,但没有得到回应。
  • @Fred-ii- 我认为第二个正文是同一个脚本的一部分。
【解决方案2】:

我认为问题在于您正在寻找isset($row)。因为该行将始终设置在帖子上,但是如果数据库中有条目,您将获得一行,否则您将获得错误。

然后你尝试像数组一样访问“false”。

【讨论】:

    【解决方案3】:

    使用 $_SESSION 而不是 $row,并注意索引,因为在 $_SESSION 数组中你有小写:$_SESSION['lastname'] $_SESSION['email'] 等等, - 数组键区分大小写.

    【讨论】:

      【解决方案4】:

      我认为这里的问题是您需要在检查是否设置了会话 ID 之前启动会话,尝试启动会话然后验证会话变量:

      session_start();
      
      if (!isset($_SESSION['username'])) {
          header("Location: login.php");
      }
      

      【讨论】:

      【解决方案5】:

      使用$_SESSION 而不是$row

      【讨论】:

      • 我希望我能早 10 分钟这么说。是的,我做到了。
      • "使用 $_SESSION 而不是 $row" - 具体在哪里?给出解释将使所有人受益,包括“哪个”人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多