Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau Candidat au Club Avatar de area2000
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : octobre 2019
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Moteur de recherche avec filtre checkboxe et pagination des résultats
    Bonjour,

    Je fais quelque code mais je suis encore loin d’être pro.
    J'ai crée une page de recherche dans ma BD et je souhaiterai associé le moteur de recherche avec checkbox, et faire le pagination des resulats.
    Actuellement, le moteur de recherche, ça marche mais les filtres checkboxe ne fonctionne pas et la pagination je ne connais pas comment faire le précédent, suivant, début, fin pour ne avoir toute les numéros de pages.
    Merci vos aides.
    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
    define("ROW_PER_PAGE",5);
    require_once('db.php');
    ?>
    <html>
    <head>
    <link type="text/css" href="css/style_table.css" rel="stylesheet" />
    <style>
     
    .button_link {color:#FFF;text-decoration:none; background-color:#428a8e;padding:10px;}
    #keyword{border: #CCC 1px solid; border-radius: 4px; color:#28AB4F; padding: 10px;background:url("demo-search-icon.png") no-repeat center right 7px;}
    .btn-page{margin-right:2px;padding:5px 10px; border: #CCC 1px solid; background:#FFF; border-radius:4px;cursor:pointer; border-color:#28AB4F}
    .btn-page:hover{background:#3CFF76;}
    .btn-page.current{background:#28AB4F; color:#FFF}
    </style>
    </head>
    <body>
    <?php
    if (isset($_GET['nb_ligne']))			$nb_ligne = $_GET['nb_ligne']; 			else $nb_ligne='nb_ligne';
    if (isset($_GET['genrex']))		$genrex = $_GET['genrex']; 	else $genrex='genrex';
     
     
    	$search_keyword = '';
    	if(!empty($_POST['search']['keyword'])) {
    		$search_keyword = $_POST['search']['keyword'];
    	}
    	$sql = 'SELECT * FROM liste WHERE genre="'.$genrex.'" and nom LIKE :keyword OR prenom LIKE :keyword OR num_cin LIKE :keyword OR mat LIKE :keyword
    			 OR lot LIKE :keyword OR quartier LIKE :keyword OR commune LIKE :keyword OR tel1 LIKE :keyword OR genre LIKE :keyword
    			 ORDER BY mat ASC ';
     
    	/* Pagination Code starts */
    	$per_page_html = '';
    	$page = 1;
    	$start=0;
    	if(!empty($_POST["page"])) {
    		$page = $_POST["page"];
    		$start=($page-1) * ROW_PER_PAGE;
    	}
    	$limit=" limit " . $start . "," . ROW_PER_PAGE;
    	$pagination_statement = $pdo_conn->prepare($sql);
    	$pagination_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
    	$pagination_statement->execute();
     
    	$row_count = $pagination_statement->rowCount();
    	if(!empty($row_count)){
    		$per_page_html .= "<div style='text-align:center;margin:5px 0px;'>";
    		$page_count=ceil($row_count/ROW_PER_PAGE);
    		if($page_count>1) {
    			for($i=1;$i<=$page_count;$i++){
    				if($i==$page){
    					$per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page current" />';
    				} else {
    					$per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page" />';
    				}
    			}
    		}
    		$per_page_html .= "</div>";
    	}
     
    	$query = $sql.$limit;
    	$pdo_statement = $pdo_conn->prepare($query);
    	$pdo_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
    	$pdo_statement->execute();
    	$result = $pdo_statement->fetchAll();
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    <table cellspacing='0' cellpadding='0' border='1' align='center' width='900'>
    <tr>
    	<td align="left" valign="top">
    			<table border-radius="4" cellpadding="0" cellspacing="0">
    			<tr>
    				<td align="center" bgcolor="bleu">&nbsp;<br><b>Homme</b><br><input type="radio" style='border-radius:0px;width:100px;height:20px;' name="genrex" value="HOMME"><br>&nbsp;</td>
    				<td align="center" bgcolor="bleu">&nbsp;<br><b>Femme</b><br><input type="radio" style='border-radius:0px;width:100px;height:20px;' name="genrex" value="FEMME"><br>&nbsp;</td>
    				<td align="center" bgcolor="bleu">&nbsp;<br><b>Tous</b><br><input type="radio" style='border-radius:0px;width:100px;height:20px;' name="genrex" checked="checked" value=""><br>&nbsp;</td>
    				<td valign="top" align="center" bgcolor="bleue" width="200">&nbsp;<br><b> Nbre Ligne</b>&nbsp;&nbsp;<input type="number" style='border-radius:1px;width:40px;height:30px;' name="nb_ligne" value="10" min= "5" step="5" required>
    			</tr>
    		</table>
    	</td>
    	<td>
    		<form name='frmSearch' action='' method='post'>
    		<div style='text-align:right;margin:0px 0px;'><input type='text' 
    		style='border-radius:0px;width:200px;height:40px;font-size:12pt;font-family:Verdana,Arial sans-serif;color:#28AB4F;font-weight:bold;'
    		 name='search[keyword]' placeholder ='Recherche' value="<?php echo $search_keyword; ?>" id='keyword' maxlength='25'></div>
    		<BR>
    	</td>
    </tr>
    </table>
    <table class='hoverTable' cellspacing='0' cellpadding='2' border='1' align='center' bordercolor='green' width='900' >
            <tr align='center'>
                    <th width='80'>Matricule</th>
    				<th width='80'>Genre</th>
                    <th width='200'>Nom</th>
                    <th width='250'>Prenom</th>
    				<th width='150'>CIN</th>
    				<th width='100'>Contact</th>
     
            </tr>
    	<?php
    	if(!empty($result)) { 
    		foreach($result as $row) {
    	  echo "<tr>";
    			echo "<td align='center'>".$row['mat']."</td>";
    			echo "<td>".$row['genre']."</td>";
    			echo "<td>".$row['nom']."</td>";
    			echo "<td>".$row['prenom']."</td>";
    			echo "<td align='center'>".$row['num_cin']."</td>";
    			echo "<td align='center'>".$row['tel1']."</td>";
     
    	  echo "</tr>";
    		}
    	}
    	?>
    </table>
    <?php echo $per_page_html; 
    ?>
    </form>
    </body>
    </html>

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    septembre 2007
    Messages
    8 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : septembre 2007
    Messages : 8 337
    Points : 14 519
    Points
    14 519
    Par défaut
    Bonjour et Bienvenue sur DVP.

    1. Les balises HTML sont bancales:
      • Les balises table et form s'entrelacent
      • Les boutons radio sont en dehors de la balise form
    2. Pour l'exécution de la première requête, inutile de ramener toutes les données si ce n'est que pour compter, un select count suffira.
    3. Il y a trop de combinaison LIKE et OR dans la requête, c'est très lourd. Je conseille de voir l'index FullText.
    4. Pour la colonne genre de la table, j'imagine qu'il n'y a que deux valeurs possible (HOMME, FEMME), si c'est le cas, inutile de l'ajouter dans la requête dans le cas où l'utilisateur sélectionne 'Tous', en plus ce n'est pas la clause OR qui devrait être utilisée mais AND.


    A+.

  3. #3
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 16 037
    Points : 32 843
    Points
    32 843
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    avril 2007
    Messages
    8 492
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2007
    Messages : 8 492
    Points : 16 151
    Points
    16 151
    Par défaut
    Pourquoi vouloir récupérer ton filtre genre (*) en $_GET ? il suffit de les mettre dans le même form que le champ de recherche et les récupérer dans $_POST.

    (*) Au passage, tu as des radios et pas des checkboxes, la différence étant qu'un groupe de checkboxes peut retourner plusieurs valeurs (et aucune peut être cochée) alors qu'un groupe de radio ne retourne qu'une seule valeur (et la seule façon de "décocher" une radio est de passer par du JS ou un bouton reset)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. Moteur de recherche avec Excel dans des onglets ?
    Par jufabref dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2008, 14h51
  2. Réponses: 4
    Dernier message: 21/11/2007, 23h27
  3. [MySQL] Moteur de recherche avec accents
    Par NiX31 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/01/2007, 13h27
  4. moteur de recherche avec requete sql
    Par hottnikks_79 dans le forum ASP
    Réponses: 4
    Dernier message: 03/08/2006, 04h58
  5. Réponses: 6
    Dernier message: 04/11/2005, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo