我正在试着为一家商店做一个网站。 在products页面上,我显示从数据库加载的所有产品的一般信息。 我想创建一个单独的页面,将显示不同的文本和图像的基础上的产品,用户点击(我希望用户到这个页面,当他们点击任何产品)。 这可能吗?还是每次添加产品时我都需要编写一个新页面?
<?php
$sql = "SELECT * FROM products;";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
};
if ($resultCheck > 0) {
while($row = mysqli_fetch_assoc($result)){
echo "<div class='productCard'>";
echo '<img src="data:image/jpeg;base64,'.base64_encode($row['image']).'"/>';
echo "<h1>" .$row["name"]. "</h1>
<h1>" .$row["stock"]. "</h1>
</div>";
}
} else {
echo "0 results";
}
?>
它不仅是可能的,而且是非常常见的功能,并且在许多PHP教程中都有涉及。 您可能已经使用过一个或多个没有涉及此功能的教程,但是我们总是鼓励您探索更多的教程和示例。
在较高的层次上,您实际上要做的是让每个链接包含一个您想要显示的记录的标识符。 例如,echo
的一部分可能包含如下内容:
echo '<a href="product.php?id=' . $row['id'] . '">Click here</a>';
这将产生如下内容:
<a href="product.php?id=123">Click here</a>
(有不同的方法可以实现。单引号与双引号,heredoc语法等等。我个人也喜欢保持HTML的规范,这意味着客户端的双引号。但是您选择的任何方式向客户端发送标记都是可以的。)
当用户单击该链接时,查询字符串参数id=123
跟随用户到达该product.php
页面。 然后在该页的代码中,您将从$_get
数组中读取值:
$id = $_GET['id'];
(在请求中提交的其他类型的数据存在其他数组。URL查询字符串参数是$_get
的一部分。)
然后在数据库查询中使用该值。 查询本身可能如下所示(借用自这里关于SQL注入的一个问题的出色回答,对于初学者来说,这个问题绝对值得一读):
$stmt = $conn->prepare('SELECT * FROM products WHERE id=?');
$stmt->bind_param('i', $id); // 'i' specifies the variable type => 'integer'
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// Do something with $row
}
不同的数据库技术以不同的方式将值绑定到查询。 但是作为一个初学者,现在是时候养成绑定值而不是连接字符串的习惯了。 这就是前面提到的关于SQL注入的问题/答案成为非常有用的知识的地方。
在该循环中(即使只有一条记录,但您可能需要进行一些检查以确保只有一条或至少一条记录,否则会做出相应的响应),您可以显示有关该记录的数据,就像您已经在主页上对多条记录所做的那样。
您可以为此使用查询字符串变量(也称为GET-variables)。 例如,在您的链接中,您可以将?id=5
添加到您的链接中,这样它就变成了类似于mysite.com/products?id=5
的内容。 然后可以使用$_get['id']
获取用户在URL中的任何id。
https://www.php.net/manual/en/reserved.variables.get.php
欢迎来到StackOverflow! 您可以使用a
链接将用户重定向到带有id参数的产品的详细信息。
您可以通过$_get
:
例如,这是您的代码“products.php”:
<?php
$sql = "SELECT * FROM products;";
$result = mysqli_query($conn, $sql);
$resultCheck = mysqli_num_rows($result);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
};
if ($resultCheck > 0) {
while($row = mysqli_fetch_assoc($result)){
echo "<a href='product.php?id=$row["id"]'><div class='productCard'>";
echo '<img src="data:image/jpeg;base64,'.base64_encode($row['image']).'"/>';
echo "<h1>" .$row["name"]. "</h1>
<h1>" .$row["stock"]. "</h1>
</div>";
}
} else {
echo "0 results";
}
?>
在文件product.php中:
<?php
$id = $_GET["id"];
... and then just use this variable $id for select product
?>
要小心SQL注入:
我建议使用mysqli_real_escape_string()函数或其他函数,并使用准备好的语句