有谁知道为什么 html 在我搜索时会重复?

Does anyone know why the html duplicates when im searching?

提问人:jorge garcia 提问时间:11/17/2023 最后编辑:ADysonjorge garcia 更新时间:11/17/2023 访问量:45

问:

我正在做一个搜索页面,我在其中放置一个输入并根据输入中的数据,它在数据库中搜索类似的文章并显示在框中。但是当我搜索某些内容时,页面中会出现另一个标题和输入。 重复的标头和输入

我试着问chatgpt,但它帮不了我。我也搜索过,但找不到类似的东西。

<?php
session_start();
if ($_SESSION["user"] == "" || $_SESSION["premium"] == "") {
    header("Location: index.php");
    exit();
}

$valorInput = isset($_GET["valor"]) ? $_GET["valor"] : "";

include "dbconnect.php";

$resultados = array();

if (!empty($valorInput)) {
    if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        $stmt = $conn->prepare("SELECT name, description, link, imagelink, price FROM Articulos WHERE description LIKE ?");
        $param = "%$valorInput%";
        $stmt->bind_param("s", $param);
        $stmt->execute();
        $result = $stmt->get_result();

        while ($row = $result->fetch_assoc()) {
            $resultados[] = '<div class="template">
                <img src="' . $row['imagelink'] . '" alt="' . $row['description'] . '">
                <p>' . $row['name'] . '</p>
                <p>' . $row['description'] . '</p>
                <p>Precio: ' . $row['price'] . '</p>
            </div>';
        }

        $stmt->close();
        echo implode('', $resultados);
        exit();
    }
}

$conn->close();
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="css/inicio.css">
    <title>Buscador de Productos</title>
</head>
<body>

    <header>    
        <h1>Buscador de Productos</h1>
    </header>

    <div id="search-container">
        <input type="text" id="search-box" oninput="actualizarVariable()" placeholder="Buscar productos...">
        <div id="search-results" class="search-results-container"></div>
    </div>

    <div id="result-container" class="container">
        <?php 
        for($i = 0; $i < 6; $i++) {
            echo '<div class="template">
            <img src="imagen1.jpg" alt="';
            echo $valorInput;
            echo '">
            <p>Descripción del Producto 1</p>
            </div>';
        }
        ?>
    </div>

    <script>
        function actualizarVariable() {
            var valorInput = document.getElementById("search-box").value;
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                    document.getElementById("result-container").innerHTML = this.responseText;
                }
            };
            xhttp.open("GET", "inicio.php?valor=" + valorInput, true);
            xhttp.send();
        }
    </script>
    <script src="script.js"></script>
</body>
</html>
javascript php html

评论

1赞 TSCAmerica.com 11/17/2023
您应该将查询数据库的 PHP 代码分开,并将搜索结果返回到不同的 PHP 文件中。这样,AJAX 请求将只获取搜索结果,而不是整个页面内容。
0赞 Chris Haas 11/17/2023
据我所知,它不符合规范,它只是jQuery等框架和其他框架碰巧做的事情,所以检查它不起作用。HTTP_X_REQUESTED_WITH
0赞 pcalkins 11/17/2023
您的 xhttp.open 和 xhttp.send 命令在每个 readyStatechange 上运行...我不确定你想要那个。您还将返回整个页面...连同剧本...您应该将 POST 发送到端点(php 页面),该端点仅返回填充“result-container”所需的数据/http。
0赞 ADyson 11/17/2023
删除子句(但将代码保留在子句中)。if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])

答: 暂无答案