[RESOLU] Créer un <select> pour trier le contenu afficher d'une base de donnée

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Créer un <select> pour trier le contenu afficher d'une base de donnée

Re: [RESOLU] Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 03 oct. 2019, 14:24

ah je pense avoir enfin compris encore merci beaucoup =)

Re: [RESOLU] Créer un <select> pour trier le contenu afficher d'une base de donnée

par or 1 » 03 oct. 2019, 14:15

la doc :
"Valeurs de retour

Retourne FALSE en cas d'échec. Pour des requêtes SELECT, SHOW, DESCRIBE ou EXPLAIN réussies, mysqli_query() retournera un objet mysqli_result. Pour les autres types de requêtes ayant réussi, mysqli_query() retournera TRUE."
c'est un select. pour les autres tris, cela retournait bien les données. pour les propriétaires, cela retournait false, cela retourne false quand la requête sql est incorrecte.

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 03 oct. 2019, 12:59

C'est bon j'ai enfin résolu mon soucis il s'agissait d'une erreur de terme. Je n'avais pas mis le bon terme de la BDD pour la catégorie propriétaire, dans la BDD cette colonne s'appelait possesseur et non proprietaire ^^'

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 22:39

dans la parti valeur de retour ?
désolé mais je trouve pas ce qu'elle retourne ...

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par or 1 » 02 oct. 2019, 22:35

cette fonction sert a se connecter a la BDD, interpréter la requête et nous la retourner.
relis la doc, surtout la partie qui indique ce que retourne cette fonction.

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 22:24

mysqli_fetch_assoc($result)
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean
le message t'indique que $result est un boléan.
$result = mysqli_query($connect, $sql_liste_jeuxvideo);
$result provient donc de la fonction mysqli_query
la doc https://www.php.net/manual/fr/mysqli.query.php indique ce que retourne cette fonction.

un programmeur est fainéant, s'il doit modifier quelque chose, il n'a pas envie de le faire à 3 endroits quand un seul suffirait.
malheureusement j'arrive pas a tout comprendre de ta réponse

j'ai compris que mon $result est un bouléen mais c'est tout
tu me dit que le $result viens mysqli_query et me donne la doc sur cette fonction mais je ne la comprend pas désolé ^^"
pour moi cette fonction sert a se connecter a la BDD, interpréter la requête et nous la retourner.

je comprend la dernière phrase mais je sais pas ou et comment l'appliquer : 3

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par or 1 » 02 oct. 2019, 22:14

mysqli_fetch_assoc($result)
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean
le message t'indique que $result est un boléan.
$result = mysqli_query($connect, $sql_liste_jeuxvideo);
$result provient donc de la fonction mysqli_query
la doc https://www.php.net/manual/fr/mysqli.query.php indique ce que retourne cette fonction.

un programmeur est fainéant, s'il doit modifier quelque chose, il n'a pas envie de le faire à 3 endroits quand un seul suffirait.

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 22:06

Alors du coup avec mon formulaire je tente de les trier avec des if
if ($_POST['tri'] == NULL) {
                $sql_liste_jeuxvideo = "SELECT * FROM jeux_video";
                $result = mysqli_query($connect, $sql_liste_jeuxvideo);
                while ($assoc = mysqli_fetch_assoc($result)) {?>
                    <div class="cadre">
                        <div class="titre">
                            <img src="src/SuperMarioBros1.png" alt="Super mario Bros" class="imgjeux">
                            <p> <?= $assoc['nom']?></p>
                        </div>
                        <div class="info">
                            <div class="info1">
                                <div class="vendeur"><p><?= "Vendeur : ".$assoc['possesseur'];?></p> </div>
                                <div class="console"><p><?= "Console : ".$assoc['console'];?></p></div>
                                <div class="nombre"><p><?= "Nombre de joueurs maximum : ".$assoc['nbre_joueurs_max'];?></p></div>
                                <div class="prix"><p><?= "Prix : ".$assoc['prix']." €";?></p></div>
                            </div>
                            <div class="info2">
                            <div class="com">
                                <p>Commentaires:</p>
                            </div>
                                <div class="commentaires"><p><?= "<br>".$assoc['commentaires'];?></p></div>
                            </div>
                        </div>
                    </div>    
                <?php
                }
            }
            if ($_POST['tri'] === "prix") {
                $sql_liste_jeuxvideo = "SELECT * FROM jeux_video ORDER BY prix";
                $result = mysqli_query($connect, $sql_liste_jeuxvideo);
                while ($assoc = mysqli_fetch_assoc($result)) {?>
                    <div class="cadre">
                        <div class="titre">
                            <img src="src/SuperMarioBros1.png" alt="Super mario Bros" class="imgjeux">
                            <p> <?= $assoc['nom']?></p>
                        </div>
                        <div class="info">
                            <div class="info1">
                                <div class="vendeur"><p><?= "Vendeur : ".$assoc['possesseur'];?></p> </div>
                                <div class="console"><p><?= "Console : ".$assoc['console'];?></p></div>
                                <div class="nombre"><p><?= "Nombre de joueurs maximum : ".$assoc['nbre_joueurs_max'];?></p></div>
                                <div class="prix"><p><?= "Prix : ".$assoc['prix']." €";?></p></div>
                            </div>
                            <div class="info2">
                            <div class="com">
                                <p>Commentaires:</p>
                            </div>
                                <div class="commentaires"><p><?= "<br>".$assoc['commentaires'];?></p></div>
                            </div>
                        </div>
                    </div>
                <?php
                }
            }
            if ($_POST['tri'] === "proprietaire") {
                $sql_liste_jeuxvideo = "SELECT * FROM jeux_video ORDER BY proprietaire";
                $result = mysqli_query($connect, $sql_liste_jeuxvideo);
                while ($assoc = mysqli_fetch_assoc($result)) {?>
                    <div class="cadre">
                        <div class="titre">
                            <img src="src/SuperMarioBros1.png" alt="Super mario Bros" class="imgjeux">
                            <p> <?= $assoc['nom']?></p>
                        </div>
                        <div class="info">
                            <div class="info1">
                                <div class="vendeur"><p><?= "Vendeur : ".$assoc['possesseur'];?></p> </div>
                                <div class="console"><p><?= "Console : ".$assoc['console'];?></p></div>
                                <div class="nombre"><p><?= "Nombre de joueurs maximum : ".$assoc['nbre_joueurs_max'];?></p></div>
                                <div class="prix"><p><?= "Prix : ".$assoc['prix']." €";?></p></div>
                            </div>
                            <div class="info2">
                                <div class="com">
                                    <p>Commentaires:</p>
                                </div>
                                    <div class="commentaires"><p><?= "<br>".$assoc['commentaires'];?></p></div>
                                </div>
                            </div>
                        </div>
                <?php
                    }
                }?>
Mais j'ai un message d’erreur lorsque je sélectionne "proprietaire" que voici:

( ! ) Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in E:\Téléchargement\Documents\Git\Projet_PHP\page_acceuil.php on line 92
Call Stack
# Time Memory Function Location
1 0.0001 404824 {main}( ) ...\index.php:0
2 0.0001 405152 include_once( 'E:\Téléchargement\Documents\Git\Projet_PHP\page_acceuil.php' ) ...\index.php:3
3 0.0012 420376 mysqli_fetch_assoc ( )

et évidemment je ne comprend pas le message d'erreur alors que je sais que l'erreur et sans nul doute évidente

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par or 1 » 02 oct. 2019, 21:16

reste maintenant à exécuter la bonne requête selon le choix du formulaire.

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 21:15

donc en terme d'optimisation effectivement ce n'est pas rentable. Le mieux serait donc (comme tu l'as dit initialement) de passer par du js pour changer la disposition de mon affichage afin d'obtenir le résultat voulu or j'ai loupé la semaine sur le js ... mais il faut bien que j’apprenne ^^ mais ça m’intéresse quand même de voir comment faire même si je dois recharger la page

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par or 1 » 02 oct. 2019, 20:57

oui, reste maintenant à exécuter la bonne requête selon le choix du formulaire.

et se rendre compte que l'exigence "souhaite trier l'affichage en fonction d'un select sans changer de page comme on le voit dans beaucoup de site web" n'est pas atteinte car la page est rechargée suite à la soumission du formulaire.

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 20:49

Ah trop cool ta façon de procéder j'adore merci beaucoup !!! :D

et bien en codant en dur juste pour pouvoir trier a partir de ma requête sql actuel "SELECT * FROM jeux_video" je rajoute "ORDER BY prix" pour trier par le prix ou en rajoutant "ORDER BY proprietaire" pour trier par rapport au propriétaire

c'est ça ?

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par or 1 » 02 oct. 2019, 19:29

en oubliant le formulaire pour l'instant (donc en codant en dur), que faut-il changer dans ce code pour trier par prix, par propriétaire ?

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 19:26

voici mon code qui affiche ma base de donnée
<?php
require_once 'functions/connectDB.php';
$connect = connectDB();

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
   [...]
    <title>OccasGames</title>
</head>
<body>
<header>
    <?php include_once 'menu.php'; ?>
</header>
<div class="body">
    <form action="" method="post">
        <select type="submit" name="tri" id="tri" onChange="this.form.submit();">
            <option value="">Choisir tri</option>
            <option value="prix">Prix</option>
            <option value="proprietaire">Propriétaire</option>
        </select>

    </form>
    <div class="listJeux">
        <?php $sql_liste_jeuxvideo = "SELECT * FROM jeux_video";
            $result = mysqli_query($connect, $sql_liste_jeuxvideo);
            while ($assoc = mysqli_fetch_assoc($result)) {?>
            <div class="cadre">
                <div class="titre">
                    <img src="src/SuperMarioBros1.png" alt="Super mario Bros" class="imgjeux">
                    <p> <?= $assoc['nom']?></p>
                </div>
                <div class="info">
                    <div class="info1">
                        <div class="vendeur"><p><?= "Vendeur : ".$assoc['possesseur'];?></p> </div>
                        <div class="console"><p><?= "Console : ".$assoc['console'];?></p></div>
                        <div class="nombre"><p><?= "Nombre de joueurs maximum : ".$assoc['nbre_joueurs_max'];?></p></div>
                        <div class="prix"><p><?= "Prix : ".$assoc['prix']." €";?></p></div>
                    </div>
                    <div class="info2">
                    <div class="com">
                        <p>Commentaires:</p>
                    </div>
                        <div class="commentaires"><p><?= "<br>".$assoc['commentaires'];?></p></div>
                    </div>
                </div>
            </div>    
            <?php
            }
            ?>
    </div>

</div>
    
</body>
</html>

Re: Créer un <select> pour trier le contenu afficher d'une base de donnée

par Tenebross » 02 oct. 2019, 19:23

d'accord je remet le tout a la dernière version qui fonctionne et je vous l'affiche après merci