[RESOLU] Trier les membres par critère de colonne

Eléphanteau du PHP | 29 Messages

18 déc. 2015, 22:42

Si je test avec une commande du style:

Code : Tout sélectionner

SELECT * FROM members WHERE jour = 20 AND mois = 12 ORDER BY jour ASC, mois ASC
PhpMyAdmin me montre bien les bons utilisateurs. Mais mon code ne marche toujours pas :/

Code : Tout sélectionner

$dbCon = mysqli_connect("localhost", "root", "mon pass", "ma base"); $requete = "SELECT * FROM members WHERE jour = ".$_SESSION['jour']." AND mois = ".$_SESSION['mois']." ORDER BY jour ASC, mois ASC"; $resultat = mysqli_query($dbCon, $requete); $Combien = mysqli_num_rows($resultat); $Contenu = mysqli_fetch_row($resultat); echo $Contenu; echo $Combien;

Mammouth du PHP | 881 Messages

18 déc. 2015, 23:09

C'est sûr, si t'as soumis tel que je lis

Code : Tout sélectionner

"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"
car c'est ton code PHP qui est là.

Ce que tu dois soumettre à PhpMyAdmin ressemblera à

Code : Tout sélectionner

SELECT * FROM members WHERE jour = 'mardi%' AND mois = 'avril%' ORDER BY jour ASC, mois ASC
Soyez artisans de paix

Eléphanteau du PHP | 29 Messages

18 déc. 2015, 23:40

Oui, je l'ai soumis exactement comme tu me l'a marqué! Je sais que c'est du PHP x)
Donc comme je disais: si je test en manuel, avec ce code:

Code : Tout sélectionner

SELECT * FROM members WHERE jour = 'mardi%' AND mois = 'avril%' ORDER BY jour ASC, mois ASC
Mais dans mon fichier php, ça ne fonctionne pas avec ce code:

Code : Tout sélectionner

$requete = "SELECT * FROM members WHERE jour = ".$_SESSION['jour']." AND mois = ".$_SESSION['mois']." ORDER BY jour ASC, mois ASC";

Mammouth du PHP | 881 Messages

18 déc. 2015, 23:52

As-tu fait un echo de ta requête ?

Code : Tout sélectionner

echo $requete;
Si non, fais-le.

Dans tous les cas, retourne-nous la requête affichée.

Il faut que ça ressemble à la requête qui ta retourné un résultat adéquat.
Soyez artisans de paix

Eléphanteau du PHP | 29 Messages

19 déc. 2015, 12:05

C'est bon j'ai réussi à débogguer, erreur de ma part, j'avais inversé les mois et les jours à la connexion de l'utilisateur.
Donc je peux afficher le nombre d'utilisateurs qui ont les même dates, mais dès que je veux afficher leurs pseudos PHP retourne:
"Array


"
Bizarre non?

Mammouth du PHP | 881 Messages

19 déc. 2015, 20:06

Non, ce n'est pas bizarre.
Toutes les informations tirées d'une ligne de ta table sont emmagasinées dans un tableau, tu les récupéreras ainsi:

Code : Tout sélectionner

$Contenu = mysqli_fetch_row($resultat); echo $Contenu["Nom"]; echo $Combien; echo $Contenu["Prenom"]; echo $Contenu["Naissance"]; echo $Contenu["Annee"]; echo $Contenu["Mois"]; // etc.
Soyez artisans de paix

Mammouth du PHP | 2278 Messages

20 déc. 2015, 11:19

Bonjour,
Pour ma part, pour me simplifier les choses, je fais comme ceci:
$ville_cherchee = $_POST['ville'];
/*test éventuels*/
$table = "Labdd.Table_interrogee"; //ou alors, il faut faire auparavant un $mysqli->select_db 
$requete = "SELECT * from $table where ville = ville'....";
$resultat = $mysqli->query($requete);
ce qui m'épargne les problèmes avec les simples quotes et les concaténations.
ce qui permet de vérifier, si besoin, la validité des valeurs avant de les enfiler dans la requete...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphanteau du PHP | 29 Messages

20 déc. 2015, 12:51

Non, ce n'est pas bizarre.
Toutes les informations tirées d'une ligne de ta table sont emmagasinées dans un tableau, tu les récupéreras ainsi
Ca parait logique!
Mais lorsque je fais un echo $Contenu['ville']; Rien ne s'affiche.
J'ai testé avec un echo $Contenu[0]; et là la ville de l'utilisateur s'affiche! mais pas celle des autres utilisateurs...
Voici mon code:

Code : Tout sélectionner

include_once("connexion.php"); $requete = "SELECT * FROM members WHERE jour = ".$jour." AND mois = ".$mois." AND ville = "."'".$ville."'"." AND annee = ".$annee." ORDER BY jour ASC, mois ASC, ville ASC, annee ASC"; $resultat = mysqli_query($dbCon, $requete); $Combien = mysqli_num_rows($resultat); $Combien = $Combien - 1; if($Combien <= 0){ $Combien = 0; } $Contenu = mysqli_fetch_row($resultat); echo "<p style='font-size:25px;'>Votre ville: ".$ville."</p>"; echo "<p style='font-size:25px;'>Votre nom: ".ucwords($nom)."</p>"; echo "<p style='font-size:25px;'>Votre pr&eacute;nom: ".ucwords($prenom)."</p>"; echo "<p style='font-size:25px;'> La date de votre journ&eacute;e d'appel: ".$jour."/".$mois."/".$annee."</p>"; echo "<p style='font-size:25px;'>Il y a ".$Combien." participants &agrave; la meme journ&eacute;e d'appel que vous! </p>"; echo $Contenu['ville'];

Mammouth du PHP | 881 Messages

20 déc. 2015, 14:59

Sans la structure de ta table, nous ne pouvons corriger ton code.
Assure-toi de respecter les majuscules et minuscules.
Soyez artisans de paix

Eléphanteau du PHP | 29 Messages

21 déc. 2015, 11:42

Voici ma base, avec les colonnes apparentes.
Image

Petit nouveau ! | 1 Messages

21 déc. 2015, 11:52

Bonjour,
Je suis debutant en php et je viens de decouvrir le forum
Merci à vous ;)

Mammouth du PHP | 881 Messages

21 déc. 2015, 15:10

Bonjour Chantala, en passant.

Tu peux très bien récupérer tes données par le numéro de leur position dans le tableau. C'est l'inconvénient de mysqli_fetch_row par rapport à mysqli_fetch_array. Si tu modifies la structure de ta table en insérant une nouvelle colonne, toute ta programmation PHP sera à réviser de manière changer le numéro de champs affichés. Pas génial. C'est pourquoi je préfère myslqi_fetch_array qui permet plus facilement l'insértion de colonne en plus de laisser voir dans le code ce qui sera affiché.

Quant à ton objection
J'ai testé avec un echo $Contenu[0]; et là la ville de l'utilisateur s'affiche! mais pas celle des autres utilisateurs...
C'est normal, fetch ne retourne qu'une ligne à la fois. Il faut « faire le tour » de tous les résultats pour les récupérer tous. Pour cela tu feras une boucle de récupération. Ça dépend encore de ce que tu espères faire avec les données.

Code : Tout sélectionner

while ($Contenu = mysqli_fetch_array) { echo 'Voici la ville de '.$Contenu["prenom"].' '.$Contenu["nom"].' : '.$Contenu["ville"].'<br />'; }
Soyez artisans de paix

Eléphanteau du PHP | 29 Messages

21 déc. 2015, 18:22

C'est normal, fetch ne retourne qu'une ligne à la fois. Il faut « faire le tour » de tous les résultats pour les récupérer tous. Pour cela tu feras une boucle de récupération. Ça dépend encore de ce que tu espères faire avec les données.

Code : Tout sélectionner

while ($Contenu = mysqli_fetch_array) { echo 'Voici la ville de '.$Contenu["prenom"].' '.$Contenu["nom"].' : '.$Contenu["ville"].'<br />'; }
Ah d'accord!
Donc faudrait que je fasse une boucle de style for?
En fait je voudrais simplement afficher la liste des membres ayant la même ville et la même date.

Mammouth du PHP | 881 Messages

21 déc. 2015, 19:21

La boucle est toute faite (ci-haut) pour toi, c'est boucle while que tu n'as qu'à copier-coller dans code.

Code : Tout sélectionner

while ($Contenu = mysqli_fetch_array($resultat)) { echo 'Voici la ville de '.$Contenu["prenom"].' '.$Contenu["nom"].' : '.$Contenu["ville"].'<br />'; }
Soyez artisans de paix

Eléphanteau du PHP | 29 Messages

21 déc. 2015, 22:50

Merci beaucoup!
La page marche parfaitement! :D
Merci particulièrement à Patriboom!