Page 1 sur 2
Trier les membres par critère de colonne
Posté : 17 déc. 2015, 22:45
par Speed09
Bonjour à tous!
Débutant en PHP et SQL, je créé un site en local pour apprendre à me familiriser avec ces fabuleux outils.
Ce site n'a aucun interêt si ce n'est que pour apprendre
Donc, je voudrais simplement afficher sur la "page de membre" les autres membres ayant en commun la même ville.
J'ai donc dans ma BDD une colonne "Ville" contenant en texte la ville du membre, mais je n'ai aucune idée de comment m'y prendre :/ .
Bonne journée à tous!
Re: Trier les membres par critère de colonne
Posté : 17 déc. 2015, 23:13
par Patriboom
Ceci devrait t'aider:
La commande de tri en MySQL est ORDER BY .... ASC
La documentation est ici :
http://dev.mysql.com/doc/refman/5.7/en/ ... ation.html
Re: Trier les membres par critère de colonne
Posté : 17 déc. 2015, 23:14
par or 1
sais-tu déjà afficher les données d'un membre, dont sa ville, donc sans la liste des autres membres de la même ville ?
si oui, quel est le code ?
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 08:55
par Speed09
sais-tu déjà afficher les données d'un membre, dont sa ville, donc sans la liste des autres membres de la même ville ?
si oui, quel est le code ?
Bonjour, oui j'y arrive sans soucis avec un simple écho de données stockées dans la session de l'utilisateur

Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 13:02
par Ryle
Bonjour,
A priori ce n'est pas un tri qu'il te faut (ORDER BY), mais une clause (WHERE) dans ta requête SQL permettant de ne retourner et donc n'afficher que les utilisateurs ayant dans le champ ville la valeur stockée dans la session de l'utilisateur. C'est bien ça ?
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 16:07
par Speed09
Bonjour,
A priori ce n'est pas un tri qu'il te faut (ORDER BY), mais une clause (WHERE) dans ta requête SQL permettant de ne retourner et donc n'afficher que les utilisateurs ayant dans le champ ville la valeur stockée dans la session de l'utilisateur. C'est bien ça ?
Exactement!
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 16:31
par Patriboom
Alors la requête ressemblera à
"SELECT * FROM maTable WHERE Nom LIKE '".$_POST["NomRecuDuFormulaireHTML"]."%' AND Prenom LIKE '".$_POST["PrenomRecuDuFormulaireHTML"]."%' ORDER BY Nom ASC, Prenom ASC "
Rappelons que le joker MySQL est %
L'étoile après "SELECT" demande de retourner tous les champs de la table.
S'il n'est pas nécessaire d'avoir tous les champs, alors on peut énumérer ceux dont on aura besoin comme ceci:
SELECT Prenom,Nom,Adrese FROM ....
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 18:29
par Speed09
Alors la requête ressemblera à
"SELECT * FROM maTable WHERE Nom LIKE '".$_POST["NomRecuDuFormulaireHTML"]."%' AND Prenom LIKE '".$_POST["PrenomRecuDuFormulaireHTML"]."%' ORDER BY Nom ASC, Prenom ASC "
Merci! Donc maintenant pour l'integrer en php je dois utiliser la fonction mysqli_fetch_row() ?
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 19:33
par Patriboom
Il y a quelques fonctions "mysqli_fetch_" (.. row, array) offertes en PHP, tu peux choisir celle qui convient le mieux à ton besoin, consulte
http://php.net/manual/en/mysqlinfo.api.choosing.php Pour ma part, j'utilise habituellement mysqli_fetch_array
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 20:01
par Speed09
Donc je résume pour le code PHP:
mysqli_fetch_row("SELECT * FROM maTable WHERE Nom LIKE '".$_POST["NomRecuDuFormulaireHTML"]."%' AND Prenom LIKE '".$_POST["PrenomRecuDuFormulaireHTML"]."%' ORDER BY Nom ASC, Prenom ASC", $LienDeMaBase);
Et ensuite pour echo je met tout ça dans une simple variable?

Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 20:30
par Patriboom
Pour ma part, je préfère le faire en deux étapes, insérant entre les deux une vérification du nombre de résultats
Code : Tout sélectionner
$requete = "SELECT * FROM maTable WHERE Nom LIKE '".$_POST["NomRecuDuFormulaireHTML"]."%' AND Prenom LIKE '".$_POST["PrenomRecuDuFormulaireHTML"]."%' ORDER BY Nom ASC, Prenom ASC". $LienDeMaBase;
$resultat = mysqli_query($requete);
$Combien = mysqli_num_rows($resultat);
$Contenu = mysqli_fetch_row($resultat); //Cette ligne sert à contrôler le nombre de
//résultats obtenus. Dans certains cas, tu peux
// décider d'orienter ailleurs l'usager qui ne
// trouverait aucun résultat à sa requête.
echo $Contenu["Nom"];
Attention, dans ton code tu avais écrit une virgule ( , ) après le guillemet suivant ASC et $LienDeMaBase; le caractère de concaténation de PHP est le point ( . )
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 21:06
par Speed09
Merci pour la réponse rapide!
J'ai essayé d'intégrer le code dans ma page, en modifiant les valeurs:
Code : Tout sélectionner
$dbCon = mysqli_connect("localhost", "root", "mon pass", "ma base");
$requete = "SELECT * FROM members WHERE jour LIKE '".$_POST["jour"]."%' AND mois LIKE '".$_POST["mois"]."%' ORDER BY jour ASC, mois ASC". $dbCon;
$resultat = mysqli_query($requete);
$Combien = mysqli_num_rows($resultat);
$Contenu = mysqli_fetch_row($resultat);
echo $Contenu;
Et là BAM! Error 500! Je regarde les logs et tombe sur ce message:
"PHP Catchable fatal error: Object of class mysqli could not be converted to string in /var/www/html/user_page.php on line 19"
Je regarde la fameuse ligne 19 et m'apercois que c'est la ligne de $requete, contenant le lien à ma base.
Attention, dans ton code tu avais écrit une virgule ( , ) après le guillemet suivant ASC et $LienDeMaBase; le caractère de concaténation de PHP est le point ( . )
Oui j'ai vu, j'ai corrigé ça en le remplacant par un point, sans succès...
J'ai donc adopté ma technique initiale:
Code : Tout sélectionner
$dbCon = mysqli_connect("localhost", "root", "mo pass", "ma base");
$requete = "SELECT * FROM members WHERE jour LIKE '".$_SESSION["jour"]."%' AND mois LIKE '".$_SESSOIN["mois"]."%' ORDER BY jour ASC, mois ASC";
$resultat = mysqli_query($dbCon, $requete);
$Combien = mysqli_num_rows($resultat);
$Contenu = mysqli_fetch_row($resultat);
echo $Contenu;
Mais rien ne s'affiche...
J'echo donc mon $Combien et le serveur me retoure un "0" alors que j'ai bien 2 utilisateurs identiques dans ma base...
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 21:16
par Speed09
J'ai fouillé un peu dans ma base et dans les colonnes concernées et y ai trouve=é quelques chose.
En survolant les colonnes "mois" et "jour" Phpmyadmin m'indique qu'en faisant shift+click sur la colonne je l'ajouterai à la close ORDER BY ou pour basculer ASC/DESC...
Des gens pour m'expliquer? :')
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 21:20
par Patriboom
Ta version semble a priori bonne.
Pour déboguer des commandes MyQSL, tu fais afficher ta requête avec un
,
Tu copies-colles alors cette requête qui inclura la valeur des variables traitées dans dans ton interface PhpMyAdmin. Les erreurs te seront indiquées.
Par exemple, je suis surpris de lire
Si jour est numérique, tu ne prendras pas LIKE ...%, mais =
Même chose pour le mois.
Retourne-nous la copie de la requête obtenue par echo $requete et tu verras, si besoin, nous verrons.
Re: Trier les membres par critère de colonne
Posté : 18 déc. 2015, 22:28
par Speed09
"MySQL a retourné un résultat vide (aucune ligne). (Traitement en 0.0002 secondes.)
SELECT * FROM members WHERE jour = '".$_SESSION["jour"]."%' AND mois = '".$_SESSION["mois"]."%' ORDER BY jour ASC, mois ASC"