Recherche multi critéres

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche multi critéres

Re: Recherche multi critéres

par scorleon » 16 févr. 2017, 15:36

Merci beaucoup, je vais faire le test et je vous tiendrais au courant.

Re: Recherche multi critéres

par moogli » 15 févr. 2017, 13:34

exemple
<?php

$sql = 'select numero, sexe, annee FROM oiseau WHERE 1 = 1'; // 1=1 parce que sinon les and sont complexe a gérer, mais pas impossible, j'utilise donc un artifice courant pour faire simple et rapide
if(!empty($_POST['numero'])) '
    $sql .= ' and numero like \'%'. mysqli_real_escape_string($base,$_POST['numero']).'%\'';
}
if(!empty($_POST['sexe'])) '
    $sql .= ' and sexe =\''. mysqli_real_escape_string($base,$_POST['sexe']).'\'';
}
if(!empty($_POST['annee'])) '
    $sql .= ' and annee=\''. mysqli_real_escape_string($base,$_POST['annee']).'\'';
}
$sql .= ' ORDER BY id DESC';
 $query = mysqli_query($base, $req_rech); // pas de die !!!
if($query === false){
// gestion d'un message d'erreur
}else {
// c'est bon on utilise $query pour afficher
}

pour info cette ligne n'est pas utilie : unset($nb_resultats);

c'est fait de toute façon à la destruction du script (au pire le garbage collector s'en charge si le script est long) et tu n'es surement pas a la recherche d'optimisation mémoire ;)


@+

Re: Recherche multi critéres

par scorleon » 15 févr. 2017, 11:10

Bonjour,
Merci pour ta réponse, mais pour le moment, comme il est dans le code, j'ai simplement déclarer les variables.
Mon objectif est de faire une requête dynamique tout dépend du choix, mais je n'arrive pas.
désolé pour je suis encore débutant en PHP

Re: Recherche multi critéres

par moogli » 13 févr. 2017, 19:40

bonjour,

les variables utilisées dans le premier if n'existent !

je suppose qu'il s'agit des valeurs issues du formulaire ?
si oui il faut utiliser $_POST (ou $_GET suivant la méthode) qui va contenir toutes les données
la fonction empty sera utile pour éviter les erreurs.


@+

Recherche multi critéres

par scorleon » 13 févr. 2017, 16:14

Bonjour,
Je suis débutant dans le PHP et je souhaite faire un formulaire de recherche dans table "oiseau" qui contient trois colonnes "numero", "sexe", "annee".

Le problème est que je n'arrive pas à construire ma requête sql multicritère à partir du formulaire.
Merci pour votre aide.
<html>
<head>

</head>
<body>

<? php
$i=0;
	
if($annee>0) {

		$choix[$i++] = "annee ";
	switch($annee){
	
		case 1:
		$choix[$i++] = "2016";		
		break;
		
		case 2:
		$choix[$i++] = "2015";
		break;
		
		case 3:
		$choix[$i++] = "2014";
		break;
		
		case 4:
		$choix[$i++] = "2013";
		break;
		}
	}	
if($sexe){
   	$choix[$i++] = "sexe = '";
   	$choix[$i++] = $sexe."' ";
   
   }
// on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.

if(isset($_POST['requete']) && $_POST['requete'] != NULL) 	
	{
	// on crée une variable $requete pour faciliter l'écriture de la requête SQL, mais aussi pour empêcher les éventuels malins qui utiliseraient du PHP ou du JS, avec la fonction htmlspecialchars().
	$requete = htmlspecialchars($_POST['requete']); 
	$req_rech = "SELECT numero, sexe, annee FROM oiseau WHERE numero LIKE '%$requete%' ORDER BY id DESC";
	$query = mysqli_query($base, $req_rech) or die (mysqli_error($base)); // la requête, que vous devez maintenant comprendre ;)
	$nb_resultats = mysqli_num_rows($query); // on utilise la fonction mysqli_num_rows pour compter les résultats pour vérifier par après
	// si le nombre de résultats est supérieur à 0, on continue
	if($nb_resultats != 0) 		
		{
		// maintenant, on va afficher les résultats et la page qui les donne ainsi que leur nombre, avec un peu de code HTML pour faciliter la tâche.
	?>
<h3><p style="text-align: center">R&eacute;sultats de votre recherche.</p></h3>
<p style="color: red; text-align: center">Nous avons trouv&eacute; <? echo $nb_resultats; // on affiche le nombre de résultats 
if($nb_resultats > 1) { echo ' résultats'; } else { echo ' résultat'; } // on vérifie le nombre de résultats pour orthographier correctement. 
?>
 dans notre base de donn&eacute;es. Voici la liste que nous avons trouv&eacute;es :<br/>
<br/>

<?
 // début du tableau
    echo '<table bgcolor="#FFFFFF" align="center">'."\n";
        // première ligne on affiche les titres des colonnes
        echo '<tr>';
        echo '<td bgcolor="#669999" align="center"><b><u>Numero</u></b></td>';
        echo '<td bgcolor="#669999" align="center"><b><u>Sexe</u></b></td>';
		echo '<td bgcolor="#669999" align="center"><b><u>Ann&eacute;e</u></b></td>';
        echo '</tr>'."\n";
while($donnees = mysqli_fetch_array($query)) 
	{
	echo '<tr>';
        echo '<td bgcolor="#CCCCCC"  align="center"><i><b>'.$donnees['numero'].'</b></td>';
        echo '<td bgcolor="#CCCCCC"  align="center"><i>'.$donnees['sexe'].'</i></td>';
		echo '<td bgcolor="#CCCCCC"  align="center"><i>'.$donnees['annee'].'</i></td>';
        echo '</tr>'."\n";

	} 
	echo '</table>'."\n";// fin de la boucle
	} // Fini d'afficher les résultats ! Maintenant, nous allons afficher l'éventuelle erreur en cas d'échec de recherche et le formulaire.
else
	{ // de nouveau, un peu de HTML
	?>
	<div align="center">
	<p><h3>Pas de r&eacute;sultats</h3></p>
	<p style="color: red; text-align: center">Nous n'avons trouv&eacute; aucun r&eacute;sultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="test.php">R&eacute;essayez</a></p>
	</div>
	<?
	}// Fini d'afficher l'erreur ^^
	unset($nb_resultats); 
	mysqli_free_result($query);
	mysqli_close($base); // on ferme mysql, on n'en a plus besoin
	}
else
	{ // et voilà le formulaire, en HTML de nouveau !
?>

<p style="color: red; text-align: center">Tapez le num&eacute;ro de la bague  : <br /></p>
<div align="center">
	<form action="test.php" method="Post">
		<input type="text" name="requete" size="10"><br />
		<p>Male <input type="radio" name="sexe" value="M" <?php if($requete==1){if($sexe=="male"){echo " checked";}} ?>>
			Femelle <input type="radio" name="sexe" value="F" <?php if($requete==1){if($sexe=="femelle"){echo " checked";}} ?>>
		</p>
		<p>Annee <select name="annee" size="1">
								<option value="0">choisir</option>
								<option <?php if($flag==1 && $annee==1){echo " selected ";}?> value="1">2016</option>
								<option <?php if($flag==1 && $annee==2){echo " selected ";}?> value="2">2015</option>
								<option <?php if($flag==1 && $annee==3){echo " selected ";}?> value="3">2014</option>
								<option <?php if($flag==1 && $annee==4){echo " selected ";}?> value="3">2013</option>
							</select></p>
		<input type="submit" value="Ok">
	</form>
</div>
<?
}
// et voilà, c'est fini !
?>
</body>
</html>