есть ли способ изменить определенные элементы на странице, когда вы нажимаете на разные ссылки? - PullRequest
0 голосов
/ 20 июня 2020

Пытаюсь создать сайт для магазина. На странице продуктов я отображаю общую информацию обо всех продуктах, загруженных из базы данных. Я хочу создать отдельную страницу, на которой будут отображаться разные текст и изображение в зависимости от того, какой продукт нажимает пользователь (я хочу, чтобы пользователи переходили go на эту страницу, когда они нажимают на любой из продуктов). Возможно ли это, или мне нужно кодировать новую страницу каждый раз при добавлении продукта?

        <?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 ]

2 голосов
/ 20 июня 2020

Это не только возможно, это очень распространенная функциональность, которая описана во многих PHP руководствах. Возможно, вы уже использовали одно или несколько руководств, которые не охватывают эту функцию, но вам всегда предлагается изучить больше руководств и примеров.

На высоком уровне вам, по сути, нужно иметь каждое ссылка включает идентификатор записи, которую вы хотите отобразить. Например, часть вашего echo может включать что-то вроде этого:

echo '<a href="product.php?id=' . $row['id'] . '">Click here</a>';

Что даст что-то вроде:

<a href="product.php?id=123">Click here</a>

(Есть разные способы сделать это. по сравнению с двойными кавычками, синтаксисом heredo c и т.д. c. Лично я предпочитаю сохранить HTML как spe c, что означает двойные кавычки на стороне клиента. Но в любом случае разметка для клиента в порядке.)

Когда пользователь нажимает на ссылку, параметр строки запроса 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 инъекции становится чрезвычайно полезным знанием.

Внутри этого l oop (даже если есть только одна запись, хотя вы можете захотеть провести некоторые проверки, чтобы убедиться, что только один или хотя бы один и ответьте соответствующим образом в противном случае) вы можете отображать данные об этой записи, аналогично тому, как вы уже это делаете для нескольких записей на своей главной странице.

0 голосов
/ 20 июня 2020

Для этого можно использовать переменные строки запроса (также известные как GET-переменные). Например, в вашей ссылке вы можете добавить, например, ?id=5 к вашей ссылке, чтобы она стала чем-то вроде mysite.com/products?id=5. Затем вы можете использовать $_GET['id'], чтобы получить любой идентификатор, который пользователь имеет в своем URL-адресе.

https://www.php.net/manual/en/reserved.variables.get.php

0 голосов
/ 20 июня 2020

Добро пожаловать в stackoverflow! Вы можете использовать ссылки a, чтобы перенаправить пользователя к деталям продукта с параметром id.

Вы можете сделать это с помощью $_GET:

Например, это ваш код «Продукты. 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 () или другую функцию и использовать подготовленные операторы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...