Title: Save filter search directory
Last modified: January 3, 2023

---

# Save filter search directory

 *  Resolved [melchi2](https://wordpress.org/support/users/melchi2/)
 * (@melchi2)
 * [3 years, 7 months ago](https://wordpress.org/support/topic/save-filter-search-directory/)
 * Hello,
 * Happy New Year to the whole community, I embarked on a 2023 project to find a
   solution to save searches in the directory, I wanted to have your advice if at
   all times if possible, otherwise I will close the subject. I had thought of using
   an SQL database to do this and developing a script, to be honest I relied a lot
   on chat gpt. I admit to having used it lately to develop scripts with ultimate
   member, I admit I had good results. Not being a professional developer but a 
   simple enthusiast, it helps a lot, especially to learn. Here is the developed
   script:
 *     ```wp-block-code
       <?php
   
       // Connexion à la base de données
       $host = "localhost";
       $username = "XXXXX";
       $password = "XXXXXXX";
       $dbname = "XXXXXXXXX";
       $connection = mysqli_connect($host, $username, $password, $dbname);
   
       // Vérifier la connexion
       if (!$connection) {
         die("Erreur de connexion à la base de données: " . mysqli_connect_error());
       }
   
       // Récupérer les filtres de recherche à partir des paramètres de requête de l'URL
       $filter_gender = isset($_GET['filter_gender']) ? $_GET['filter_gender'] : '';
       $filter_member_type = isset($_GET['filter_member_type']) ? $_GET['filter_member_type'] : '';
       $filter_age_range = isset($_GET['filter_age_range']) ? $_GET['filter_age_range'] : '';
       $filter_country = isset($_GET['filter_country']) ? $_GET['filter_country'] : '';
       $filter_state = isset($_GET['filter_state']) ? $_GET['filter_state'] : '';
       $filter_city = isset($_GET['filter_city']) ? $_GET['filter_city'] : '';
       $filter_zip = isset($_GET['filter_zip']) ? $_GET['filter_zip'] : '';
       $filter_distance = isset($_GET['filter_distance']) ? $_GET['filter_distance'] : '';
       $filter_role = isset($_GET['filter_role']) ? $_GET['filter_role'] : '';
       $filter_tag = isset($_GET['filter_tag']) ? $_GET['filter_tag'] : '';
       $filter_show_more_filters = isset($_GET['filter_show_more_filters']) ? $_GET['filter_show_more_filters'] : '';
   
       // Échapper les caractères spéciaux dans les chaînes de requête pour éviter les injections SQL
       $filter_gender = mysqli_real_escape_string($connection, $filter_gender);
       $filter_member_type = mysqli_real_escape_string($connection, $filter_member_type);
       $filter_age_range = mysqli_real_escape_string($connection, $filter_age_range);
       $filter_country = mysqli_real_escape_string($connection, $filter_country);
       $filter_state = mysqli_real_escape_string($connection, $filter_state);
       $filter_city = mysqli_real_escape_string($connection, $filter_city);
       $filter_zip = mysqli_real_escape_string($connection, $filter_zip);
       $filter_distance = mysqli_real_escape_string($connection, $filter_distance);
       $filter_role = mysqli_real_escape_string($connection, $filter_role);
       $filter_tag = mysqli_real_escape_string($connection, $filter_tag);
       $filter_show_more_filters = mysqli_real_escape_string($connection, $filter_show_more_filters);
   
       // Enregistrer les filtres de recherche dans les variables de session
       $_SESSION['search_filters'] = array(
       'filter_gender' => $filter_gender,
       'filter_member_type' => $filter_member_type,
       'filter_age_range' => $filter_age_range,
       'filter_country' => $filter_country,
       'filter_state' => $filter_state,
       'filter_city' => $filter_city,
       'filter_zip' => $filter_zip,
       'filter_distance' => $filter_distance,
       'filter_role' => $filter_role,
       'filter_tag' => $filter_tag,
       'filter_show_more_filters' => $filter_show_more_filters
       );
   
       // Construire la requête SQL de sélection
       $sql = "SELECT * FROM users WHERE 1=1";
   
       // Appliquer les filtres de recherche à la requête SQL
       if ($filters['filter_gender']) {
         $sql .= " AND gender = '" . $filters['filter_gender'] . "'";
       }
       if ($filters['filter_member_type']) {
         $sql .= " AND member_type = '" . $filters['filter_member_type'] . "'";
       }
       if ($filters['filter_age_range']) {
         // Apply age range filter to results
         $age_range = explode('-', $filters['filter_age_range']);
         $min_age = intval($age_range[0]);
         $max_age = intval($age_range[1]);
         $current_year = intval(date('Y'));
         $min_birth_year = $current_year - $max_age;
         $max_birth_year = $current_year - $min_age;
         $sql .= " AND (YEAR(CURDATE()) - YEAR(member_dob) BETWEEN $min_age AND $max_age)";
       }
   
   
       // Appliquer le filtre de pays aux résultats
       if ($filters['filter_country']) {
         $sql .= " AND member_country = '" . $filters['filter_country'] . "'";
       }
   
       // Appliquer le filtre de région aux résultats
       if ($filters['filter_state']) {
         $sql .= " AND member_state = '" . $filters['filter_state'] . "'";
       }
   
       // Appliquer le filtre de ville aux résultats
       if ($filters['filter_city']) {
         $sql .= " AND member_city = '" . $filters['filter_city'] . "'";
       }
   
       // Appliquer le filtre de code postal aux résultats
       if ($filters['filter_zip']) {
         $sql .= " AND member_zip = '" . $filters['filter_zip'] . "'";
       }
   
       // Appliquer le filtre de distance aux résultats
       if ($filters['filter_distance'] && $filters['filter_zip']) {
         // Calculer la distance en kilomètres entre le code postal de l'utilisateur et chaque code postal de membre
         $sql .= " AND (3959 * ACOS(COS(RADIANS(member_lat)) * COS(RADIANS(:lat)) * COS(RADIANS(:lng) - RADIANS(member_lng)) + SIN(RADIANS(member_lat)) * SIN(RADIANS(:lat)))) <= :distance";
         $params[':lat'] = $user_lat;
         $params[':lng'] = $user_lng;
         $params[':distance'] = $filters['filter_distance'];
       }
   
       // Appliquer le filtre de rôle aux résultats
       if ($filters['filter_role']) {
         $sql .= " AND member_role = '" . $filters['filter_role'] . "'";
       }
   
       // Appliquer le filtre de tag aux résultats
       if ($filters['filter_tag']) {
         $sql .= " AND member_tags LIKE '%" . $filters['filter_tag'] . "%'";
       }
   
       // Exécuter la requête SQL et récupérer les résultats
       $result = mysqli_query($connection, $sql);
   
       if (mysqli_num_rows($result) > 0) {
       // Afficher les résultats de la requête
       while ($row = mysqli_fetch_assoc($result)) {
       // Afficher chaque résultat dans un bloc
       echo '<div class="search-result-item">';
       echo '<h3>' . $row['name'] . '</h3>';
       echo '<p>' . $row['bio'] . '</p>';
       echo '</div>';
       }
       } else {
       // Aucun résultat trouvé
       echo '<p>Aucun résultat trouvé</p>';
       }
   
       // Fermer la connexion à la base de données
       mysqli_close($connection);
   
       // Exécuter la requête SQL et récupérer les résultats
       $result = mysqli_query($connection, $sql);
   
       // Vérifier s'il y a des résultats de la requête
       if (mysqli_num_rows($result) > 0) {
         // Affichage des résultats de la requête
         while ($row = mysqli_fetch_assoc($result)) {
           // Afficher les données de l'utilisateur
           echo "ID: " . $row["id"]. " - Nom: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
         }
       } else {
         echo "Aucun résultat de recherche trouvé.";
       }
   
       // Fermer la connexion à la base de données
       mysqli_close($connection);
   
       ?>
   
       ?>
       ```
   

Viewing 1 replies (of 1 total)

 *  Plugin Support [andrewshu](https://wordpress.org/support/users/andrewshu/)
 * (@andrewshu)
 * [3 years, 7 months ago](https://wordpress.org/support/topic/save-filter-search-directory/#post-16341425)
 * Hello [@melchi2](https://wordpress.org/support/users/melchi2/)
 * Thank you for your enthusiasm.

Viewing 1 replies (of 1 total)

The topic ‘Save filter search directory’ is closed to new replies.

 * ![](https://ps.w.org/ultimate-member/assets/icon-256x256.png?rev=3160947)
 * [Ultimate Member – User Profile, Registration, Login, Member Directory, Content Restriction & Membership Plugin](https://wordpress.org/plugins/ultimate-member/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/ultimate-member/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/ultimate-member/)
 * [Active Topics](https://wordpress.org/support/plugin/ultimate-member/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/ultimate-member/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/ultimate-member/reviews/)

 * 1 reply
 * 2 participants
 * Last reply from: [andrewshu](https://wordpress.org/support/users/andrewshu/)
 * Last activity: [3 years, 7 months ago](https://wordpress.org/support/topic/save-filter-search-directory/#post-16341425)
 * Status: resolved