IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Tri de tableau dynamique [MySQL]


Sujet :

PHP & Base de données

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    +1 et merci pour ta franchise, je me sens moins seule. Je priais en cachette pour que javascript passe de mode... et puis son influence n'a fait que s'accroître.


    C'est très exactement le genre de problématiques qui n'a aucun intérêt en PHP, et exige un script côté navigateur client, donc ajax ou javascript.
    Alors après, on peut, parce qu'on a vraiment du mal (comme tout le monde) avec le changement, vouloir tailler des carottes en forme de radis, mais au bout d'un moment, on comprend en profondeur qu'il y a des technos dédiées et qu'il faut savoir quand et comment les utiliser à bon escient.
    Si tu débutes en PHP et HTML, eh bien perfectionne-toi déjà dans PHP... C'est difficile de tout apprendre en même temps.
    Les clients web sont très exigeants en matière d'ergonomie, d'autant plus qu'ils ne se rendent pas compte de ce que ça comporte derrière.
    Tu peux très bien dire : bon, moi, je débute. Vous aurez une application qui fonctionnera, sans bug, mais pas une ergonomie très branchée... Je verrai ça plus tard.

    @Jreaux : j'ai un jeune copain qui est extrêmement compétent en informatique et qui me dit que l'on va se passer très bientôt totalement de SQL, s'il a raison, ça rendra mon métier si triste ! C'est la partie que je préfère !
    Mais bon, les modes tournent parfois. Dans les années 2000, javascript était pour les gamins qui voulaient s'initier en posant des alertes rigolotes partout. Autant dire que ça n'était pas perçu avec un gros avenir.
    Oui je sais venant de la bouche d'un débutant qui n'est pas très compétent ça peut paraître culotté ahah malgrès le fait que je demande beaucoup d'aide et que je ne proportionne pas trop le niveau nécessaire pour chaque tâche, je comprends bien qu'être développeur WEB peu importe le langage implique beaucoup d'apprentissage avant et c'est pour ça que j'essaye de comprendre grâce au code qu'on m'aide à compléter, actuellement je suis en 2 ème année d'info et malheureusement dans mon cursus c'est du 100% logiciel (C,C++, etc) et ça me chagrine un peu car le peu de code que je sais faire en WEB me donne envie de continuer et d'en apprendre plus.. J'ai bien conscience que ça peut paraître chiant de voir chaque semaine un nouveau sujet de ma part mais c'est que je tiens vraiment à finir cette plateforme et apprendre les bases du PHP grâce à ça même si allez suivre des cours serait beaucoup mieux je préfère apprendre par la pratique même si j'ai énormément de mal dans ce langage !

    En tout cas sans jreaux je pense que je n'aurais pas fais 1/4 de ce que j'ai actuellement lol..
    Et même si parfois il paraît un peu agacé etc je comprends totalement sa frustration de voir un débutant demander de l'aide sans essayer ou sans considérer la charge de travail qu'il a lui effectué afin d'avoir le niveau qu'il a actuellement sauf que pas du tout j'essaye de mon côté et je n'y arrive pas donc je finis par venir demander sur le forum parce-que je sais que pour vous c'est facile comme tout de résoudre mes soucis et ça peut paraître bête mais je préfère réellement apprendre par la pratique en essayant de comprendre le code plutôt que passer 1 semaine sur un problème et ne plus en voir le bout..

  2. #22
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par StrangerThings Voir le message
    ...J'ai tenter d'adapter un peu le code j'ai pas trop compris le système des -99 ..?
    C'est bien là le problème: tu ne prends pas le temps de comprendre...

  3. #23
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Bah enfête j'ai bien compris que -99 c'était quand le critère était desactivé mais pas grand chose de plus ahah..

  4. #24
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par StrangerThings Voir le message
    ...J'ai bien conscience que ça peut paraître ch... de voir chaque semaine un nouveau sujet de ma part...
    Bien au contraire !
    TANT que c'est un NOUVEAU sujet !

    ...je comprends totalement sa frustration de voir un débutant demander de l'aide sans essayer...
    Pas du tout.

    Mais COMPRENDS que TU dois PRENDRE LE TEMPS d'ASSIMILER et COMPRENDRE ce qu'on te dis, les codes qu'on te donne,...

    Prends le TEMPS de :
    • relire toute la discussion,
    • TESTER les codes
    • faire tes propres TESTS, tes propres RECHERCHES,
    • ...

    Et REVIENS poster sur cette discussion dans QUELQUES JOURS, PAS dans quelques minutes !

  5. #25
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Oups jreaux tu vas me tuer lol..
    Malgrès ça j'ai très bien compris ce que tu tentes de m'expliquer depuis si longtemps

    J'ai tenter quelque chose de simple et compréhensible pour moi je voulais juste savoir si c'était probable de réussir en passant par ce genre de syntaxe ?

    Voici le code php qui lui m'affiche un tableau vide donc il doit pas manquer grand chose à mon avis car il agit bien dessus ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!empty($_GET['Sexe'])) {
        $Sexe = $_GET['Sexe'];
     
        $sql_requete .= " WHERE Sexe LIKE ?";
        $sql_params = array('%'. $Sexe . '%');
    }
    Et lui qui n'affecte en rien le tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (!empty($_GET['Sexe'])) {
        $Sexe = $_GET['Sexe'];
     
        $requete = "SELECT FROM BDD WHERE Sexe LIKE $Sexe";
        $tri = $db->prepare($requete);
        $tri->execute();
    }
    Pourrais-tu m'aiguiller ? Je te remercieeeee !

  6. #26
    Invité
    Invité(e)
    Par défaut
    Moi aussi, j'ai essayé de faire quelque chose de simple et compréhensible... pour toi :

    Citation Envoyé par jreaux62 Voir le message

  7. #27
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Oui j'ai vu et j'étais entrain de taffer dessus, merci beaucoup, il faut que je remercie Dendrite aussi !

    Bon du coup j'ai adapter un peu comme hier j'ai enlever le critère 3 pour déjà tester simplement avec deux critères j'avais quelques questions à propos du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    // SESSION Recherche
    if (!isset($_SESSION['recherche'])) {
        unset($_SESSION['recherche']);		// on vide tout
        $_SESSION['recherche'] = array();	// on crée
    }
    // -------------
    // Initialisation - valeurs par défaut
    if (!isset($_SESSION['recherche']['critere1'])) {
        $_SESSION['recherche']['critere1'] = -99;
    }	// Tous critere1
    if (!isset($_SESSION['recherche']['critere2'])) {
        $_SESSION['recherche']['critere2'] = 0;
    }	// Tous critere2
    // -------------
    // -------------
    // Initialisation des array nécessaires
    $sql_where = array();	// contiendra les bouts de code SQL, à partir des critères de recherche
    $sql_param = array();	// array des paramètres à transmettre à execute(...)
    // -------------
    // Récupération : critere1
    $_SESSION['recherche']['critere1'] = (isset($_POST['critere1']))? trim($_POST['critere1']) : $_SESSION['recherche']['critere1'];
    switch ($_SESSION['recherche']['critere1']) {
        case -99:	// Tous
        case 0:
            // $sql_where : (rien)
            break;
        default:
            $sql_where[] = " critere1 = :QPV ";
            $sql_param[':QPV'] = $_SESSION['recherche']['critere1'];
    }
    // -------------
    // Récupération : critere2
    $_SESSION['recherche']['critere2'] = (isset($_POST['critere2']))? trim($_POST['critere2']) : $_SESSION['recherche']['critere2'];
    switch ($_SESSION['recherche']['critere2']) {
        case -99:	// Tous
        case 0:
            // $sql_where : (rien)
            break;
        default:
            $sql_where[] = " critere2 = :Sexe ";
            $sql_param[':Sexe'] = $_SESSION['recherche']['critere2'];
    }
    // -------------
    // On construit la chaine :  "WHERE .... AND .... AND .... "
    $clause_WHERE = (!empty($sql_where))? " WHERE " . implode(" AND ", $sql_where) : "";
    // -------------
    // requete
    $sql_requete = "SELECT ".
        " QPV, Sexe " .
        " FROM BDD " . // (ICI, PAS de WHERE !)
        $clause_WHERE .
        " ORDER BY Id DESC" .	// en cas de tri (non traité ici -> mais même principe)
        " LIMIT 10" . 	// en cas de pagination (non traité ici -> voir "systèeme de pagination PHP")
        ";";
    // -------------
    // Préparation - Exécution de la requête
    $sql_query = $db->prepare($sql_requete);
    $sql_result = $sql_query->execute($sql_param);
    De une : les récupérations des select :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Récupération : critere2
    $_SESSION['recherche']['critere2'] = (isset($_POST['critere2']))? trim($_POST['critere2']) : $_SESSION['recherche']['critere2'];
    switch ($_SESSION['recherche']['critere2']) {
        case -99:	// Tous
        case 0:
            // $sql_where : (rien)
            break;
        default:
            $sql_where[] = " critere2 = :Sexe ";
            $sql_param[':Sexe'] = $_SESSION['recherche']['critere2'];
    }
    Je voulais savoir si j'avais bien remplacer ou si les : ne désigne pas du tout les colonnes de la BDD ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            $sql_where[] = " critere2 = :Sexe ";
            $sql_param[':Sexe'] = $_SESSION['recherche']['critere2'];
    De plus j'ai l'impression que ça fait tout foirer pour les requêtes d'après car la pagination utilise les mêmes variables et du coup ça me met un problème de PDO::Statement execute(); Invalid parameter number: no number were bound etc..

    Peut être dû aux noms similaire des requêtes qui sont déjà utilisées dans la pagination et qui s'execute juste après ?
    Voir code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    session_start(); // AU TOUT DEBUT du fichier
    // ----------------------
    // Connexion BDD
    include('include_db.php');
    // ----------------------
    if (empty($_SESSION['Prenom'])) {
        header('Location: index.php');
    }
    // ----------------------
    // REQUETE : Construction
    $sql_requete = "SELECT * FROM BDD ORDER BY Id DESC";
    $sql_params = array();
    // ----------------------
    // Traitement : Recherche ?
    if (!empty($_POST['Search'])) {
        $search = str_replace(' ', '', $_POST['Search']);
        if (is_numeric($search)) { // nombres
            $sql_requete .= " WHERE Telephone LIKE ? OR CodePostale LIKE ?";
            $sql_params = array('%'. $search . '%' , '%' . $search . '%');
        } else { // chaine
            $sql_requete .= " WHERE Prenom LIKE ? OR Nom LIKE ? OR Ville LIKE ? OR Email LIKE ? OR Adresse LIKE ? OR QPV LIKE ? OR Sourcing LIKE ? OR Dernierdiplome LIKE ? OR Formationvise LIKE ? OR Specialitee LIKE ? OR Niveau LIKE ? OR Metier LIKE ? OR Contratvise LIKE ? OR Rythme LIKE ? OR Structure LIKE ?";
            $sql_params = array( '%' . $search . '%' , '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%', '%' . $search . '%');
        }
    }
    // -------------
    // -------------
    // SESSION Recherche
    if (!isset($_SESSION['recherche'])) {
        unset($_SESSION['recherche']);		// on vide tout
        $_SESSION['recherche'] = array();	// on crée
    }
    // -------------
    // Initialisation - valeurs par défaut
    if (!isset($_SESSION['recherche']['critere1'])) {
        $_SESSION['recherche']['critere1'] = -99;
    }	// Tous critere1
    if (!isset($_SESSION['recherche']['critere2'])) {
        $_SESSION['recherche']['critere2'] = 0;
    }	// Tous critere2
    // -------------
    // -------------
    // Initialisation des array nécessaires
    $sql_where = array();	// contiendra les bouts de code SQL, à partir des critères de recherche
    $sql_param = array();	// array des paramètres à transmettre à execute(...)
    // -------------
    // Récupération : critere1
    $_SESSION['recherche']['critere1'] = (isset($_POST['critere1']))? trim($_POST['critere1']) : $_SESSION['recherche']['critere1'];
    switch ($_SESSION['recherche']['critere1']) {
        case -99:	// Tous
        case 0:
            // $sql_where : (rien)
            break;
        default:
            $sql_where[] = " critere1 = :QPV ";
            $sql_param[':QPV'] = $_SESSION['recherche']['critere1'];
    }
    // -------------
    // Récupération : critere2
    $_SESSION['recherche']['critere2'] = (isset($_POST['critere2']))? trim($_POST['critere2']) : $_SESSION['recherche']['critere2'];
    switch ($_SESSION['recherche']['critere2']) {
        case -99:	// Tous
        case 0:
            // $sql_where : (rien)
            break;
        default:
            $sql_where[] = " critere2 = :Sexe ";
            $sql_param[':Sexe'] = $_SESSION['recherche']['critere2'];
    }
    // -------------
    // On construit la chaine :  "WHERE .... AND .... AND .... "
    $clause_WHERE = (!empty($sql_where))? " WHERE " . implode(" AND ", $sql_where) : "";
    // -------------
    // requete
    $sql_requete = "SELECT ".
        " QPV, Sexe " .
        " FROM BDD " . // (ICI, PAS de WHERE !)
        $clause_WHERE .
        " ORDER BY Id DESC" .	// en cas de tri (non traité ici -> mais même principe)
        " LIMIT 10" . 	// en cas de pagination (non traité ici -> voir "systèeme de pagination PHP")
        ";";
    // -------------
    // Préparation - Exécution de la requête
    $sql_query = $db->prepare($sql_requete);
    $sql_result = $sql_query->execute($sql_param);
    // ----------------------
    // Supprimer des utilisateurs
    if (!empty($_POST["delete"])) {
        $ids = implode(",", (array)$_POST["delete"]);
        $final = $db->prepare("DELETE  FROM `BDD` WHERE Id IN ($ids)");
        $final->execute();
    }
    // ----------------------
    // Requête : TOUT
    $requete_total = $db->prepare($sql_requete);
    $requete_total->execute($sql_params);
    $elem_total = $requete_total->rowCount();
    // ----------------------
    // Pagination
    $elem_page = 10;
    $page_total = ceil($elem_total/ $elem_page);
    if (!empty($_GET['page']) && $_GET['page'] > 0) {
        $pageCourante = intval($_GET['page']);
    } else {
        $pageCourante = 1;
    }
    if ($pageCourante>$page_total) {
        $pageCourante = $page_total;
    }
    $depart_page = ($pageCourante-1) * $elem_page;
    // ----------------------
    // Requête : pour cette page
    $sql_requete_page = $sql_requete . " LIMIT ".$depart_page." , ".$elem_page." ";
    $requete_page = $db->prepare($sql_requete_page);
    $requete_page->execute($sql_params);
    // ----------------------
    Au niveau du formulaire, quelque chose de simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
          <form method="POST" action="list.php">
          <div class="row">
            <div class="col">
          <select name="critere1" style="width:15%;">
              <option class="hidden" selected disabled>QPV</option>
              <option>Oui</option>
              <option>Non</option>
              <option>300m</option>
          </select>
        </div>
      <div class="col">
      <select name="critere2" style="width:15%;margin-top:1%;">
          <option class="hidden" selected disabled>Sexe</option>
          <option>Homme</option>
          <option>Femme</option>
      </select>
    </div>
    </div>
    <input type="submit" value="TEST"/>
    </form>
    Sinon au niveau des -99 je n'ai toujours pas compris le principe, serai-ce possible de m'indiquer la signification de ses valeurs ?
    Est-il utile de laisser le LIMIT 10 alors que la pagination est déjà présente juste après ?

    EDIT : J'ai du nouveau, apparament il détecte bien quand je met les deux critères et que je valide sauf qu'il ne trie pas et qu'il ne prend pas en compte toutes les autres valeurs du coup..

    Nom : Capture d’écran 2019-09-20 à 12.46.31.png
Affichages : 126
Taille : 236,1 Ko

    Je te remercie grandement!

  8. #28
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            $sql_where[] = " critere2 = :Sexe ";
            $sql_param[':Sexe'] = $_SESSION['recherche']['critere2'];
    1- C'est bien ça
    C'est ce qu'on appelle un "placeholder/paramètre nommé".

    2-
    • " critere2 = :Sexe " : "critere2" doit être remplacé par le nom de la colonne en BDD
    • $_SESSION['recherche']['critere2'] et $_SESSION['recherche']['critere2'] : ici, "critere2" est le name du champ (input, select...)

    Si on est "malin", on met la même chose partout.

    3- Pour savoir ce que contient la requête :

  9. #29
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            $sql_where[] = " critere2 = :Sexe ";
            $sql_param[':Sexe'] = $_SESSION['recherche']['critere2'];
    1- C'est bien ça
    C'est ce qu'on appelle un "placeholder/paramètre nommé".
    AH ! Sympaa ça fait plaisir d'avoir quelque chose de correct pour une fois venant de ma part lol !

    Citation Envoyé par jreaux62 Voir le message
    2-
    • " critere2 = :Sexe " : "critere2" doit être remplacé par le nom de la colonne en BDD
    • $_SESSION['recherche']['critere2'] et $_SESSION['recherche']['critere2'] : ici, "critere2" est le name du champ (input, select...)

    Si on est "malin", on met la même chose partout.

    3- Pour savoir ce que contient la requête :
    D'accord j'avais bien compris ça, parfait après je voulais pas trop toucher afin de pas tout casser..

    Du coup j'ai echo le sql_requete qui comprend bien la requête dites plus haut :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT QPV, Sexe FROM BDD ORDER BY ID DESC LIMIT 10;

    Mais il n'a pas l'air de prendre en compte le clause_where si je ne me trompe pas ? et l'echo du sql_result me return 1 c'est tout ?

    Sauf que ça n'a pas l'air de fonctionner du tout malheureusement après ça impacte bien sur le tableau donc je dois pas être loin..

  10. #30
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Coucou,

    Je reviens après quelque jours, j'ai avancer sur d'autres points, mais en même temps j'ai tenter pendant ce temps là à résoudre mon problème au niveau du tri par critères..
    De ce fait, j'ai réussi en partie à effectuer ce que je voulais ! Amen.

    Parcontre, il semblerait qu'il y ai un petit problème..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // Requête : TOUT
    $requete_total = $db->prepare($sql_requete);
    $requete_total->execute($sql_params);
    $elem_total = $requete_total->rowCount();
    // ----------------------
    // Pagination
    $elem_page = 10;
    $page_total = ceil($elem_total/ $elem_page);
    if (!empty($_GET['page']) && $_GET['page'] > 0) {
        $pageCourante = intval($_GET['page']);
    } else {
        $pageCourante = 1;
    }
    if ($pageCourante>$page_total) {
        $pageCourante = $page_total;
    }
    $depart_page = ($pageCourante-1) * $elem_page;
    // ----------------------
    // Requête : pour cette page
    $sql_requete_page = $sql_requete . " LIMIT ".$depart_page." , ".$elem_page." ";
    $requete_page = $db->prepare($sql_requete_page);
    $requete_page->execute($sql_params);
    // ----------------------
    if (!empty($_POST['qpv']) && isset($_POST['submit'])) {
        $sql="SELECT * FROM BDD WHERE QPV ='".$_POST['qpv']."'";
        $requete_page = $db->prepare($sql);
        $requete_page->execute();
    }
    ?>
    En gros, la page tri bien les données, en fonction de ce que je sélectionne au préalable dans le select "qpv" sauf qu'il semblerait qu'il y ai une perte de donnée à l'affichage, par exemple, au niveau des QPV = Oui, il m'en manquerait 2 ou 3 et vice versa pour chaque select, jreaux aurais-tu une idée de la source du problème?

    J'ai décider de tenter une manière plus simple afin de résoudre ce problème car ta manière était vraiment compliqué pour quelqu'un comme moi qui débute le php..

    De plus, afin de combiner chaque critère, comment pourrai-je faire s'il te plaît?

    EDIT : Ce qui est bizar, c'est que j'ai bien 6 personnes avec la valeur Non dans la colonne QPV de ma BDD sauf que même quand j'execute la requête à la main il en détecte que 4 ?

    Capture d'écran des 6 personnes :

    Nom : Capture d’écran 2019-09-25 à 11.59.21.png
Affichages : 127
Taille : 13,6 Ko

    Commande executée à la main directement depuis phpmyadmin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM BDD WHERE QPV = "Non"

    Je vous remercie !

  11. #31
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ton code n'a aucun sens.
    L'ordre des actions n'est pas bon.

    Comment veux-tu faire une requête du total, si tu n'as pas encore récupéré le(s) critère(s) $_POST['qpv'] ?

  12. #32
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Je n'ai pas trop compris jreaux ?

    J'utilise la $requete_page car c'est la seule variable qui réagit à ma requête et ça a l'air de bien fonctionner..
    Je n'utilise pas la $requete_total même si je pense que je devrais agir avec elle car elle comporte toutes les lignes du tableau sauf que ça ne fonctionne pas, le tableau ne réagit pas du tout en utilisant celle ci..

    Bon finalement ça marche correctement il doit y avoir une erreur mais elle devrait disparaître quand je viderais la bdd car avec les 2 autres valeurs "300m" et "Non" j'obtiens bien le même nombre côté BDD & Front..

    Du coup aurais-tu juste une idée de comment mettre en place la disposition des if et de mes requêtes si je rajoute par exemple un $_POST['Sexe'] afin de combiner les deux critères pour la recherche?

    EDIT :

    J'ai modifier un peu j'ai maintenant un double tri mais j'aimerais faire en sorte qu'il n'y ai pas d'erreur et que le tri s'effectue même si uniquement un des critères est sélectionner .. Malheureusement ce n'est pas le cas, j'ai des erreurs php si les variables sont vides ce qui est logique et de plus le tri ne s'effectue pas si les deux select ne sont pas remplis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          if (isset($_POST['submit'])) {
              if (!empty($_POST['qpv'])) {
                  $qpv = $_POST['qpv'];
                  if (!empty($_POST['sexe'])) {
                      $sexe = $_POST['sexe'];
                  }
              }
              $sql="SELECT * FROM BDD WHERE QPV ='".$qpv."' AND Sexe = '".$sexe."'";
              $requete_page = $db->prepare($sql);
              $requete_page->execute();
          }
    Merci beaucoup !

  13. #33
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Bonjour, je décide d'up le post car j'ai bien avancer sur le sujet, ma recherche multi-critère fonctionne désormais mais j'aimerais savoir si c'était possible d'optimiser mon code car je dois vérifier toutes les possibilités de select, par exemple si il y a 3 select, il faut que je vérifie chaque possibilité de combinaison etc..

    De plus, ma searchbar ne fonctionne plus du tout et je ne comprends pas pourquoi..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <?php
    session_start(); // AU TOUT DEBUT du fichier
    // ----------------------
    // Connexion BDD
    include('include_db.php');
    // ----------------------
    if (empty($_SESSION['Prenom'])) {
        header('Location: index.php');
    }
    // ----------------------
    // REQUETE : Construction
    $sql_requete = "SELECT * FROM BDD ORDER BY Id DESC";
    $sql_params = array();
    // ----------------------
    // Traitement : Recherche ?
    if (!empty($_POST['Search'])) {
        $search = str_replace(' ', '', $_POST['Search']);
        if (is_numeric($search)) { // nombres
            $sql_requete .= " WHERE Telephone LIKE ? OR CodePostale LIKE ?";
            $sql_params = array('%'. $search . '%' , '%' . $search . '%');
        } else { // chaine
            $sql_requete .= " WHERE Prenom LIKE ? OR Nom LIKE ?";
            $sql_params = array('%' . $search . '%' , '%' . $search . '%');
        }
    }
    if (isset($_GET['submit'])) {
        if (!empty($_GET['qpv'])) {
            $qpv = $_GET['qpv'];
            $sql_requete="SELECT * FROM BDD WHERE QPV ='".$qpv."'";
        }
        if (!empty($_GET['niveau'])) {
            $niveau = $_GET['niveau'];
            $sql_requete="SELECT * FROM BDD WHERE Niveau ='".$niveau."'";
        }
        if (!empty($_GET['specialitee'])) {
            $specialitee = $_GET['specialitee'];
            $sql_requete="SELECT * FROM BDD WHERE Specialitee ='".$specialitee."'";
        }
        if (!empty($_GET['niveau']) && !empty($_GET['specialitee'])) {
            $niveau = $_GET['niveau'];
            $specialitee = $_GET['specialitee'];
            $sql_requete="SELECT * FROM BDD WHERE Niveau ='".$niveau."' AND Specialitee ='".$specialitee."'";
        }
        if (!empty($_GET['niveau']) && !empty($_GET['qpv'])) {
            $niveau = $_GET['niveau'];
            $qpv = $_GET['qpv'];
            $sql_requete="SELECT * FROM BDD WHERE Niveau ='".$niveau."' AND QPV ='".$qpv."'";
        }
        if (!empty($_GET['qpv']) && !empty($_GET['specialitee'])) {
            $specialitee = $_GET['specialitee'];
            $qpv = $_GET['qpv'];
            $sql_requete="SELECT * FROM BDD WHERE QPV ='".$qpv."' AND Specialitee ='".$specialitee."'";
        }
        if (!empty($_GET['qpv']) && !empty($_GET['niveau']) && !empty($_GET['specialitee'])) {
            $niveau = $_GET['niveau'];
            $qpv = $_GET['qpv'];
            $specialitee = $_GET['specialitee'];
            $sql_requete="SELECT * FROM BDD WHERE QPV ='".$qpv."' AND Niveau ='".$niveau."' AND Specialitee ='".$specialitee."'";
        }
    }
    // -------------
    // Supprimer des utilisateurs
    if (!empty($_POST["delete"])) {
        $ids = implode(",", (array)$_POST["delete"]);
        $final = $db->prepare("DELETE  FROM `BDD` WHERE Id IN ($ids)");
        $final->execute();
    }
    // ----------------------
    // Requête : TOUT
    $requete_total = $db->prepare($sql_requete);
    $requete_total->execute($sql_params);
    $elem_total = $requete_total->rowCount();
    // ----------------------
    // Pagination
    $elem_page = 10;
    $page_total = ceil($elem_total/ $elem_page);
    if (!empty($_GET['page']) && $_GET['page'] > 0) {
        $pageCourante = intval($_GET['page']);
    } else {
        $pageCourante = 1;
    }
    if ($pageCourante>$page_total) {
        $pageCourante = $page_total;
    }
    $depart_page = ($pageCourante-1) * $elem_page;
    // ----------------------
    // Requête : pour cette page
    $sql_requete_page = $sql_requete . " LIMIT ".$depart_page." , ".$elem_page." ";
    $requete_page = $db->prepare($sql_requete_page);
    $requete_page->execute($sql_params);
    // ----------------------
    ?>
    Voici le code qui se compose d'un système de pagination, d'un tri multi critère et d'une fonction de barre de recherche.

    En vous remerciant..

  14. #34
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    J'ai étoffé le tuto depuis la dernière fois.

  15. #35
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,


    J'ai étoffé le tuto depuis la dernière fois.
    Salut jreaux,

    J'ai vu ça mais j'ai passer 1 semaine à essayer de faire marcher ce foutu tri multi-critères si en plus je dois me retaper toutes la pagination
    Je viens d'essayer à l'instant d'ajouter le select et l'adapter en prenant ma requête exécutée à la fin mais ça ne fonctionne pas donc je pense qu'il faut tout reprendre depuis le début j'ai le cerveau en compote ahah

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    ///////////
    // RECHERCHE
    if (empty($_SESSION['recherche'])) {
        $_SESSION['recherche'] = [];
    } // SESSION : array dans lequel seront enregistrés les critères
    // -------------
    // Initialisation
    $sql_where = [];	// array qui contiendra les bouts de code SQL, à partir des critères de recherche
    $sql_params = [];	// array des paramètres à transmettre à execute(...)
    $clause_WHERE = ''; 	// clause " WHERE... AND...", qui sera construite "à la volée"
    // -------------
    // Exemple 1 : SELECT (UN SEUL choix possible)
    if (!isset($_SESSION['recherche']['critere1'])) {
        $_SESSION['recherche']['critere1'] = '-99';
    } // valeur par défaut : -99 (ou '', ou 0 : comme vous préférez)
    if (isset($_POST['qpv'])) {
        $_SESSION['recherche']['critere1'] = $_POST['qpv'];
    }
    switch ($_SESSION['recherche']['critere1']) {
        case -99:	// Tous
            // $sql_where : (rien)
            break;
        default:
            $sql_where[] = " (colonne1 = :QPV) ";
            $sql_params[':QPV'] = $_SESSION['recherche']['critere1'];
    }
    // -------------
    // RESULTAT DE LA RECHERCHE : TOUS les résultats
    $clause_WHERE = (!empty($sql_where))? " WHERE " . implode(" AND ", $sql_where) : "";
    // -------------
    // -------------
    /*if (isset($_GET['submit'])) {
        if (!empty($_GET['qpv'])) {
            $qpv = $_GET['qpv'];
            $sql_requete="SELECT * FROM BDD WHERE QPV ='".$qpv."'";
        }
        if (!empty($_GET['niveau'])) {
            $niveau = $_GET['niveau'];
            $sql_requete="SELECT * FROM BDD WHERE Niveau ='".$niveau."'";
        }
        if (!empty($_GET['specialitee'])) {
            $specialitee = $_GET['specialitee'];
            $sql_requete="SELECT * FROM BDD WHERE Specialitee ='".$specialitee."'";
        }
        if (!empty($_GET['niveau']) && !empty($_GET['specialitee'])) {
            $niveau = $_GET['niveau'];
            $specialitee = $_GET['specialitee'];
            $sql_requete="SELECT * FROM BDD WHERE Niveau ='".$niveau."' AND Specialitee ='".$specialitee."'";
        }
        if (!empty($_GET['niveau']) && !empty($_GET['qpv'])) {
            $niveau = $_GET['niveau'];
            $qpv = $_GET['qpv'];
            $sql_requete="SELECT * FROM BDD WHERE Niveau ='".$niveau."' AND QPV ='".$qpv."'";
        }
        if (!empty($_GET['qpv']) && !empty($_GET['specialitee'])) {
            $specialitee = $_GET['specialitee'];
            $qpv = $_GET['qpv'];
            $sql_requete="SELECT * FROM BDD WHERE QPV ='".$qpv."' AND Specialitee ='".$specialitee."'";
        }
        if (!empty($_GET['qpv']) && !empty($_GET['niveau']) && !empty($_GET['specialitee'])) {
            $niveau = $_GET['niveau'];
            $qpv = $_GET['qpv'];
            $specialitee = $_GET['specialitee'];
            $sql_requete="SELECT * FROM BDD WHERE QPV ='".$qpv."' AND Niveau ='".$niveau."' AND Specialitee ='".$specialitee."'";
        }
    }*/
    // -------------
    // Supprimer des utilisateurs
    if (!empty($_POST["delete"])) {
        $ids = implode(",", (array)$_POST["delete"]);
        $final = $db->prepare("DELETE  FROM `BDD` WHERE Id IN ($ids)");
        $final->execute();
    }
    // ----------------------
    // Requête : TOUT
    $requete_total = $db->prepare($sql_requete);
    $requete_total->execute($sql_params);
    $elem_total = $requete_total->rowCount();
    // ----------------------
    // Pagination
    $elem_page = 10;
    $page_total = ceil($elem_total/ $elem_page);
    if (!empty($_GET['page']) && $_GET['page'] > 0) {
        $pageCourante = intval($_GET['page']);
    } else {
        $pageCourante = 1;
    }
    if ($pageCourante>$page_total) {
        $pageCourante = $page_total;
    }
    $depart_page = ($pageCourante-1) * $elem_page;
    // ----------------------
    // Requête : pour cette page
    $sql_requete_page = $sql_requete . " LIMIT ".$depart_page." , ".$elem_page." ";
    $requete_page = $db->prepare($sql_requete_page);
    $requete_page->execute($sql_params);
    // ----------------------
    ?>
    J'ai modifier sql_param en sql_params afin de rejoindre comme je t'ai dis la requête plus tard, mais ça ne fonctionne pas

  16. #36
    Invité
    Invité(e)
    Par défaut
    J'ai AUSSI traité le cas de la pagination.

    Mais tu peux continuer à "bricoler" de ton coté si tu préfères...

  17. #37
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2019
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2019
    Messages : 83
    Points : 13
    Points
    13
    Par défaut
    Mais j'essaye d'avancer sur mon petit système de tri lol..
    Si je m'embarque dans le tien je vais encore galérer pendant 10ans à tout faire fonctionner en même temps

    La, le seul problème c'est ma barre de recherche qui ne recherche pas ahaha .. Elle m'affiche 0 lignes quand je presse la touche "Entrer"..

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [CR 10] Tri sur tableau croisé dynamique
    Par Marye6 dans le forum Formules
    Réponses: 7
    Dernier message: 28/12/2015, 14h38
  2. tri d'un tableau dynamique
    Par serge_galoup dans le forum C++
    Réponses: 28
    Dernier message: 09/01/2012, 17h53
  3. Réponses: 2
    Dernier message: 06/09/2007, 15h08
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo