{"id":16021,"date":"2025-03-08T17:34:15","date_gmt":"2025-03-08T15:34:15","guid":{"rendered":"https:\/\/www.beseit.net\/?p=16021"},"modified":"2025-03-12T21:01:38","modified_gmt":"2025-03-12T19:01:38","slug":"autocompletar","status":"publish","type":"post","link":"http:\/\/www.beseit.net\/?p=16021","title":{"rendered":"Autocompletar"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">flux<\/h2>\n\n\n\n<p><strong>Usuari tecleja \u2192 onkeyup= cercar_bd(); \u2192 AJAX envia &#8216;cercar&#8217; \u2192 PHP te dades+cercar, processa i retorna #resultats \u2192 JavaScript mostra el resultat<\/strong><\/p>\n\n\n\n<p>Tot el proc\u00e9s de consulta es fa de manera asincr\u00f2nica a trav\u00e9s d&#8217;AJAX, la qual cosa permet que la p\u00e0gina no es recarregui completament i els resultats es mostrin din\u00e0micament sense interrupcions. Aix\u00f2 fa que l&#8217;experi\u00e8ncia de l&#8217;usuari sigui m\u00e9s fluida.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/autocompletar\n\u2502\u2500\u2500 \/css\n\u2502   \u251c\u2500\u2500 style.css\n\u2502\u2500\u2500 \/js\n\u2502   \u251c\u2500\u2500 script.js\n\u2502\u2500\u2500 index.html\n\u2502\u2500\u2500 cercar.php\n\u2502\u2500\u2500 db_config.php\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">cercar.php<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\nif (isset($_POST&#91;'cercar'])) {\n    $paraula = $conn->real_escape_string($_POST&#91;'cercar']);\n    error_log(\"Paraula rebuda: \" . $paraula); \/\/ Registra la paraula rebuda per la crida AJAX\n\n    $sql = \"SELECT catala FROM catala_iec WHERE catala LIKE '$paraula%' LIMIT 5\";\n    $result = $conn->query($sql);\n\n    $respostes = array();\n    \n    if ($result->num_rows > 0) {\n        while ($row = $result->fetch_assoc()) {\n            $respostes&#91;] = htmlspecialchars($row&#91;'catala']);\n        }\n    } else {\n        $respostes&#91;] = \"No s'han trobat resultats.\";\n    }\n    \n    \/\/ Retornem les dades en format JSON\n    echo json_encode($respostes);\n    error_log(\"Resposta JSON enviada: \" . json_encode($respostes)); \/\/ Registra la resposta enviada en format JSON\n}\n\n$conn->close();\n?><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><br><br><br><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">index.html<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"ca\">\n&lt;head>\n    &lt;meta charset=\"UTF-8\"\/>\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n    &lt;title>Autocompletar&lt;\/title>\n    &lt;link rel=\"stylesheet\" href=\"styles.css\">\n    &lt;script src=\"js\/jquery.min.js\">&lt;\/script>\n&lt;\/head>\n&lt;body>\n\n    &lt;h1>Cercador &amp; autocompletat&lt;\/h1>\n\n    &lt;!-- Formulari de cerca -->\n    &lt;form id=\"cercaForm\" method=\"POST\" action=\"cercar.php\">\n        &lt;div class=\"search-container\">\n            &lt;input \n                type=\"text\" \n                id=\"cercar\"\n                name=\"cercar\" \n                onkeyup=\"mostrarAutocompletar()\" \n                placeholder=\"Cerca...\" \n                autofocus\n            >\n            &lt;button type=\"submit\">Cercar&lt;\/button>\n        &lt;\/div>\n    &lt;\/form>\n\n    &lt;!-- Contenidor de l'autocompletat -->\n    &lt;div id=\"resultats_autocompletar_container\">\n        &lt;ul id=\"resultats_autocompletar\">\n            &lt;!-- Resultats din\u00e0mics via JavaScript -->\n        &lt;\/ul>\n    &lt;\/div>\n   \n    &lt;script src=\"js\/scripts.js\" defer>&lt;\/script>\n&lt;\/body>\n&lt;\/html>\n\n\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">CSS<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>body {\n    font-family: Arial, sans-serif;\n    text-align: center;\n    margin: 50px;\n}\n\ninput {\n    padding: 10px;\n    width: 300px;\n    font-size: 16px;\n    margin-bottom: 10px;\n}\n\n#resultats {\n    margin-top: 20px;\n    border: 1px solid #ddd;\n    width: 300px;\n    margin-left: auto;\n    margin-right: auto;\n    text-align: left;\n    padding: 10px;\n}\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><mark style=\"background-color:rgba(0, 0, 0, 0);color:#e41515\" class=\"has-inline-color\"><code>js\/script.js<\/code> (AJAX per a la cerca)<\/mark><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>$(document).ready(function () {\n    $(\"#cercar\").on(\"keyup\", function () {\n        var paraula = $(this).val();\n        console.log(\"Tecla premuda: \" + paraula);\n\n        if (paraula.length > 0) {\n            $.ajax({\n                url: \"cercar.php\",\n                type: \"POST\",\n                data: { cercar: paraula },\n                success: function (resposta) {\n                    console.log(\"Resposta AJAX rebuda\");\n                    var resultats = JSON.parse(resposta);\n                    var htmlResultats = resultats.map(function (item) {\n                        return \"&lt;li class='resultat'>\" + item + \"&lt;\/li>\";\n                    }).join(\"\");\n                    $(\"#resultats_autocompletar\").html(htmlResultats);\n                },\n                error: function () {\n                    console.error(\"Error en la crida AJAX.\");\n                }\n            });\n        } else {\n            $(\"#resultats_autocompletar\").html(\"\"); \/\/ Esborra els resultats si no hi ha text\n        }\n    });\n\n    \/\/ Afegir esdeveniment de clic per als elements de resultat\n    $(document).on(\"click\", \".resultat\", function () {\n        var paraulaSeleccionada = $(this).text();\n        console.log(\"Paraula seleccionada: \" + paraulaSeleccionada);\n        $(\"#cercar\").val(paraulaSeleccionada);\n    });\n});\n\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">db_config.php<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$host = \"localhost\";\n$user = \"root\";       \/\/ Canvia-ho si cal\n$pass = \"beseit00\";           \/\/ Canvia-ho si cal\n$dbname = \"polidic_cat\"; \/\/ Nom de la teva BD\n\n$conn = new mysqli($host, $user, $pass, $dbname);\n\n\/\/ Comprovar la connexi\u00f3\nif ($conn->connect_error) {\n    die(\"Error de connexi\u00f3: \" . $conn->connect_error);\n}\n?>\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>flux Usuari tecleja \u2192 onkeyup= cercar_bd(); \u2192 AJAX envia &#8216;cercar&#8217; \u2192 PHP te dades+cercar, processa i retorna #resultats \u2192 JavaScript mostra el resultat Tot el proc\u00e9s de consulta es fa de manera asincr\u00f2nica a trav\u00e9s d&#8217;AJAX, la qual cosa permet &hellip; <a href=\"http:\/\/www.beseit.net\/?p=16021\">Continua llegint <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":8179,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-16021","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bloc-de-notes"],"_links":{"self":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16021","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=16021"}],"version-history":[{"count":16,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16021\/revisions"}],"predecessor-version":[{"id":16071,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/posts\/16021\/revisions\/16071"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=\/wp\/v2\/media\/8179"}],"wp:attachment":[{"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=16021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=16021"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.beseit.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=16021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}