• Resolved melchi2

    (@melchi2)


    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.