如何在动态网页中使用名称而不是 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> Firstname</td> <td> Lastname</td> <td> Age</td>";
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo"<tr><td width='33%'> $row[$firstname]</td> <td width='33%'> $row[$lastname]</td> <td width='33%'> $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
键:id
或 name
。
<?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
字段作为键,因为它可能不是唯一的。
我刚开始学习 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> Firstname</td> <td> Lastname</td> <td> Age</td>";
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo"<tr><td width='33%'> $row[$firstname]</td> <td width='33%'> $row[$lastname]</td> <td width='33%'> $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
键:id
或 name
。
<?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
字段作为键,因为它可能不是唯一的。