提问者:小点点

当你点击不同的链接时,有没有办法改变页面上的某些元素?


我正在试着为一家商店做一个网站。 在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";
            }

        ?>

共3个答案

匿名用户

它不仅是可能的,而且是非常常见的功能,并且在许多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()函数或其他函数,并使用准备好的语句