Page 1 sur 1

Barre de recherche avec Ajax

Posté : 15 juil. 2021, 00:14
par homnislash
Bonjour,

j'essaie de faire une barre de recherche avec ajax. Je n'arrive pas à faire fonctionner mon système de pagination. Je poste mon code au cas où quelqu'un saurait m'aider à l'améliorer :

j'ai deux fichiers .php : search-ajax.php avec l'input et gethint.php qui sélectionne les données dans la bdd avec PDO et affiche avec une boucle.

L'idée est d'afficher une liste de patients.

Désolé le code est probablement brouillon à ce stade, il s'agit d'un grand chantier, fait à l'aide de tutos : :(

Code : Tout sélectionner

<html> <head> <link href="styles.css" rel="stylesheet"> <script> function showHint(str) { if (str.length == 0) { document.getElementById("txtHint").innerHTML = ""; return; } else { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("txtHint").innerHTML = this.responseText; } }; xmlhttp.open("GET", "gethint.php?q=" + str + "&page=", true); xmlhttp.send(); } } </script> </head> <body> <?php var_dump($a); ?> <p><b>Start typing a firstname in the input field below:</b></p> <form action=""> <label for="fname">First name:</label> <input type="text" id="fname" name="fname" onkeyup="showHint(this.value)"> </form> <p>Suggestions: <span id="txtHint"></span></p> </body> </html>
et le deuxième fichier :

Code : Tout sélectionner

<?php //determiner sur quelle page on se trouve if (isset($_GET['page']) && !empty($_GET['page'])) { $currentPage = (int) strip_tags($_GET['page']); } else { $currentPage = 1; } ?> <?php include 'dbconnect.php'; ?> <?php // get the q parameter from URL $q = $_REQUEST["q"]; $hint = ""; $bdd = new PDO("mysql:host=$servername;dbname=hospitalE2N", $username, $password); $patients = $bdd->query('SELECT * FROM patients ORDER BY id DESC'); //determiner le nbre de patients par page $parPage = 2; $premier = ($currentPage * $parPage) - $parPage; //determiner nbre total de patients $sqlPagin = 'SELECT COUNT(*) AS nb_patients FROM `patients`;'; //préparer requete $queryPagin = $bdd->prepare($sqlPagin); //executer $queryPagin->execute(); //recup nombre de patients $resultPagin = $queryPagin->fetch(); $nbPatients = (int) $resultPagin['nb_patients']; //calcul du nbre de pages total $pages = ceil($nbPatients / $parPage); $_GET['pages'] = $pages; echo "get".$_GET['page'].$currentPage; echo "<br />nbre de pages : ".$pages; if(isset($_GET['q'])) { $q = htmlspecialchars($_GET['q']); //calcul premier patient de la page $patients = $bdd->query('SELECT * FROM patients WHERE firstname LIKE "%'.$q.'%" ORDER BY id DESC LIMIT '.$premier.', '.$parPage.''); } ?> <?php $hint = $patients->fetchAll(); // Output "no suggestion" if no hint was found or output correct values var_dump($hint); foreach($hint as $row) { echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td><td><a href='profil-patient.php?id=".$row["id"]."'>"."Voir le profil"."</a><form action='deletePatient.php?id=".$row["id"]."' method='post'><input type='submit' value='delete patient'></form></td></tr>"; } echo $hint === "" ? "no suggestion" : $hint; echo "<nav> <ul class='pagination'> <li class='page-item'";?> <?= ($currentPage == 1) ? 'disabled' : '' ?><?php echo"'> <a href='' class='page-link'>Precedent</a> </li>";?> <?php for($page = 1; $page<$_GET['pages']; $page++): ?> <?php echo "<li class='page-item";?> <?= ($currentPage == $page) ? 'active' : '' ?><?php echo "'> <a href='./search-ajax.php?page=";?><?=$page?><?php echo "' class='page-link'>";?><?= $page ?><?php echo "</a> </li>"; ?> <?php endfor ?> <?php echo "<li class='page-item";?> <?= ($currentPage == $pages) ? 'disabled' : '' ?><?php echo "'> <a href='' class='page-link'>Suivant</a> </li> </ul> </nav>";?>


Merci pour votre aide,

bonne journée

Re: Barre de recherche avec Ajax

Posté : 15 juil. 2021, 00:40
par or 1
mieux vaut faire la pagination en javascript, avec par exemple :
https://datatables.net/
donc la requête sql renvoie tous les résultats, et c'est le javascript qui affiche x résultats.

Re: Barre de recherche avec Ajax

Posté : 15 juil. 2021, 08:06
par homnislash
Merci pour ton message or 1 mais je souhaite me passer de jquerry !
Je précise que dans ma logique actuelle le nombre total de pages est toujours basé sur le nombre total de patients dans la table et non le nombre de patients de la recherche actuelle :?
(Le calcul se fait ligne 36 de gethint.php)

Je pense avoir du mal a comprendre quelle url je dois mettre dans les href, car je crains de perdre la requête de la recherche à chaque fois aussi.

Je pense qu'il faut que j'arrive à passer la variable $page (de la boucle for) vers le xmlhttp ligne 16 de l'autre fichier, mais je ne vois pas comment faire !