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:
<?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)
Viewing 1 replies (of 1 total)
- The topic ‘Save filter search directory’ is closed to new replies.