【问题标题】:Display one row from SQL database using PHP使用 PHP 从 SQL 数据库中显示一行
【发布时间】:2016-11-22 03:43:18
【问题描述】:

我有一个名为“members”的数据库和一个名为“users”的表。我希望在用户注册时获取一个 id,然后该 id 用于仅显示表中的一个用户详细信息,而不是表中的所有行。 这是我的注册码:

    <?php
    $con = mysql_connect("localhost","root","");
    if (!$con)
    {
      die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("members", $con);

    $sql="INSERT INTO users (name, email, address, dob, password)
    VALUES('$_POST[name]','$_POST[email]','$_POST[address]','$_POST[dob]','$_POST[mypassword]')";

    if (!mysql_query($sql,$con))
    {
      die('Error: ' . mysql_error());
    }

    {
      header ("Location: sign_in.php");
      exit;
    }

    mysql_close($con)
    ?>

这是我的显示表代码:

    <?php

    // Create connection
    $conn = new mysqli("localhost", "root", "", "members");
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $sql = "SELECT name, email, address, dob FROM users";
    $result = $conn->query($sql);

    if ($result->num_rows > 0) {
        echo "<table><tr><th>Name</th><th>Email</th><th>Address</th>       <th>DOB</th></tr> id-";
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo "<tr><td>".$row["name"]."</td><td>".$row["email"]."</td><td>".$row["address"]."</td><td>".$row["dob"]."</td></tr>";
        }
        echo "</table>";
    } else {
            echo "<p>No Details</p><style>p{color: #336699; font-size: 20pt; font-family: Gulim; font-weight: bold; align: center; padding: 10px; position: absolute; top: 80; left: 560; z-index: 2; border-spacing: 0px;}</style> ";
    }
    $conn->close();
    ?>

【问题讨论】:

标签: php mysql select html-table


【解决方案1】:

'users' 表中是否有像 ID 这样的列名?如果没有,则首先创建一个名为“ID”的列并设置为自动递增。

然后在查询中运行循环并获取 id

【讨论】:

    【解决方案2】:

    在每个页面的最开始,开始一个会话:

    session_start();
    

    这将允许您跨浏览器和服务器之间的所有请求保存和检索有关用户浏览会话的数据。

    创建新帐户时,请获取新 ID。我在这里假设您的 users 表有一个主 ID。

    $sql="INSERT INTO users ...";
    
    if (!mysql_query($sql,$con)) die('Error: ' . mysql_error());
    
    //Must have called session_start() already. This data
    //will be accessible from other pages
    $_SESSION['userID'] = mysql_insert_id(); 
    
    header ("Location: sign_in.php");
    exit;
    

    在另一个页面(显示用户详细信息的页面)上,您检索用户的 id 并使用它来获取该用户的记录:

    session_start();
    ...
    //TODO: make sure the user is signed in before you proceed!
    
    //Retrieve the user's id from storage
    $userID = $_SESSION['userID'];
    ...
    
    //this assumes that the primary id column is named id.  Adjust if needed
    $sql = "SELECT name, email, address, dob FROM users WHERE id=$userID"
    ...
    

    这个查询的结果应该只有 1 行。您可以使用它来填充您的 HTML

    补充说明

    1. 正如其他人告诉您的那样,请考虑放弃 mysql_ 函数。它们已从最新的 PHP 中删除,因此它们是死代码。
    2. 绝对要了解准备好的陈述。将用户提供的值直接插入您的 SQL 查询中是非常糟糕的安全性(请参阅您的 INSERT 查询)。您对 SQL 注入持开放态度,并且可以轻松接管您的数据库。

    【讨论】:

    • 感谢@BeetleJuice,我认为我在正确的轨道上,但无法完全弄清楚。无论如何,如果您愿意帮助我完成最后的润色,我可以直接与您联系?
    • 如果您在解决原始问题时遇到问题(如何在用户注册后在新页面上选择并仅显示数据库中的 1 行),请在此处进行澄清。如果您还有其他问题(例如:将mysql 转换为mysqli 或尝试使用准备好的语句时出错),请打开一个新问题。不客气。如果我的回答引导您找到最初问题的解决方案,请务必选择它。编码愉快。
    • 我已经添加了你给我的所有代码,它只是显示“其他”内容,它似乎正在获取一些不存在的东西。我的“用户”表有一个主 ID,但它仍然无法正常工作
    猜你喜欢
    • 2013-08-12
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多