如何在动态网页中使用名称而不是 id

How to use names instead of id's in dynamic webpages

我刚开始学习 php 和 mysql,我可能已经领先于自己了。我想创建的是一个网页,人们可以在其中注册一个活动,到目前为止一切顺利,提交他们的名字、姓氏、年龄和电子邮件地址的表格正在运行,它实际上将信息发送到数据库.

接下来我要创建一个页面,我可以在其中显示所有提交的数据库记录(电子邮件地址除外)。这也有效,但我想尝试使用动态网址。

当我访问我的页面时 http://www.example.com/ppl.php?id=1 i get the information of the first database record displayed but i also wanted to see if i could get this to work with names instead of ids so i tried to edit my code and use http://www.example.com/ppl.php?name=john 这只会 return 一个错误,但是数据库中有几个叫 john 的人没有显示任何记录。

所以我想知道我想要的东西是否真的可行,以及如何让它与我当前的代码一起工作。

<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "event";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
    $id = $_GET['id'];
    $firstname = 'firstname';
    $lastname = 'lastname';
    $age = 'age';

$sql = "SELECT * FROM people WHERE id = $id";

$result = $conn->query($sql);

    echo "<table id='display' width='600' align='center'>";
    echo"<tr><td>&nbsp;Firstname</td> <td>&nbsp;Lastname</td> <td>&nbsp;Age</td>";

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {

        echo"<tr><td width='33%'>&nbsp;$row[$firstname]</td> <td width='33%'>&nbsp;$row[$lastname]</td> <td width='33%'>&nbsp;$row[$age] cm</td></tr>";


    }
} else {
    echo "0 results";

}
$conn->close();
?>

尝试更改查询:

$sql = "SELECT * FROM people WHERE id = $id";

收件人:

$name = $_GET['name'];
$sql = "SELECT * FROM people WHERE name LIKE '%$name%'";

然后为你找到的每一个 John 回显。

也可以考虑像这样使用 CSS。

<style>
    #display {
        width: 600px;
    }
    #display td {
        width: 33%;
    }
</style>

您应该寻找两个单独的 $_GET 键:idname

<?php
if (isset($_GET['id'])) {

    // logic to get row by ID

} elseif (isset($_GET['name'])) {

    // logic to get row by Name

} else {

    // logic if no $_GET keys are set

}

我建议 不要 使用 name 字段进行查找,因为它不是数据库中的主键 - 它可能不是唯一的。根据存储的数据,您的查询可能 return 多个结果。

Edit:要回答 where 的问题,将其放置在上面的代码示例中,请考虑将其放置在查询字符串所在的位置宣布。

<?php
if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $sql = "SELECT * FROM people WHERE id = $id";
} elseif (isset($_GET['name'])) {
    $name = $_GET['name'];
    $sql = "SELECT * FROM people WHERE name = '$name'";
}

从那里您可以保持相同的查询执行逻辑。但正如我所说,我建议不要使用 name 字段作为键,因为它可能不是唯一的。