Comment modifier mon code de liste simple à multiple ?
                    
        
     
             
                    geekat
    
        
    
                    Messages postés
            
                
     
             
            242
        
            
                                    Statut
            Membre
                    
                -
                                     
geekat Messages postés 242 Statut Membre -
        geekat Messages postés 242 Statut Membre -
        Bonsoir,
Je suis entrain de modifier mon code qui permet de faire une recherche sur plusieurs critères, mes listes étaient simples (1 seule option à sélectionner à la fois), je dois les modifier en listes de selection multiples ( 1 ou plusieurs options à sélectionner à la fois).
J'ai modifié cette liste, je peux désormais sélectionner plusieurs options. Mais pour faire la recherche je ne sais pas comment le modifier.
Code de la liste multiple :
                
            
                
    
    
    
        Je suis entrain de modifier mon code qui permet de faire une recherche sur plusieurs critères, mes listes étaient simples (1 seule option à sélectionner à la fois), je dois les modifier en listes de selection multiples ( 1 ou plusieurs options à sélectionner à la fois).
J'ai modifié cette liste, je peux désormais sélectionner plusieurs options. Mais pour faire la recherche je ne sais pas comment le modifier.
<?php
/* Code pour une liste simple */
$thematique=(!empty($_POST['thematique']))?($_POST['thematique']):NULL; 
if( !empty($_POST['thematique']) )
   $criteres[]="thematique LIKE '{$_POST['thematique']}'";
$strWhere = isset($criteres) && count($criteres)>0 ? " WHERE " . implode(' AND ', $criteres) : '';
$sql="SELECT * FROM categorisation " . $strWhere ;
sth = $bdd->prepare($sql);
$sth->execute();
/* Afficher les résultats */
$result = $sth->fetchAll();
?>
<div id="liste_structure"> La liste des structures correspondant aux critères : </div>
<?php 
if(count($result)){
foreach( $result as $donnees ){
   // echo $donnees['id_struct'].'<br>';
   $id_struct=$donnees['id_struct'];
  
  $sql2="SELECT * FROM structure WHERE id_struct='$id_struct' AND famille_contact='Piste de recherche'";
 
  $sth = $bdd->prepare($sql2);
 $sth->execute();
 /* Afficher les résultats */
 $result = $sth->fetchAll();
 
 foreach( $result as $donnees ){
  $contact=$donnees['nom_contact'];
  $struct=$donnees['id_struct'];
?> 
 <div id="liens">
  <a href="recherche-contact?nom_contact=<?php echo $contact; ?>"> <?php echo $contact.'<br>'; ?></a>
 </div> 
<?php
         }
       }
    }
    else {
     echo "<br> Aucun résultat trouvé !";
     }
Code de la liste multiple :
         <select id="thematique" name = "thematique[]" multiple="multiple"  >	
	        <option value="1">Guerre d'Espagne</option>
		<option value="2">MIE</option>
		<option value="3">Migration  </option>	
		<option value="4">Réunification familiale</option>	 
                <option value="5">WWII</option>
	</select>            
            
        A voir également:         
- Comment modifier mon code de liste simple à multiple ?
- Modifier liste déroulante excel - Guide
- Code ascii - Guide
- Modifier dns - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Modifier code pin - Guide
1 réponse
                        
                    Salut,
Une solution simple et rapide est d'utiliser l'opérateur de comparaison sql IN et la fonction php implode :
Pour éviter les injections sql, il faut également échapper les caractères réservés. Puisque tu n'utilises que des entier, tu peux simplement utiliser intval() pour éviter les injections sql, autrement il faudrait utiliser la méthode PDO::quote() ou une requête préparée avec des paramètres.
Soit :
Bonne journée
    
                Une solution simple et rapide est d'utiliser l'opérateur de comparaison sql IN et la fonction php implode :
if(!empty($_POST['thematique'])) {
    $criteres[] = "thematique IN (" . implode(',', $_POST['thematique']) . ")";
}
Pour éviter les injections sql, il faut également échapper les caractères réservés. Puisque tu n'utilises que des entier, tu peux simplement utiliser intval() pour éviter les injections sql, autrement il faudrait utiliser la méthode PDO::quote() ou une requête préparée avec des paramètres.
Soit :
if(!empty($_POST['thematique'])) {
    $criteres[] = "thematique IN (" . implode(',', array_map('intval', $_POST['thematique'])) . ")";
}
Bonne journée
 
    
    
    
    
Si tu veux trouver les éléments commun entre deux tableau, tu peux utiliser la fonction php array_intersect() mais je ne comprend bien le rapport avec ta requête.
Le rapport avec la requête, c'est juste un exemple où :
thematique = 1|6 et $_POST['thematique'] = 3|4|6
Je vais essayer cette fonction merci.