Chaine de caractères vide dans un switch/case [Résolu]

Signaler
Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021
-
Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
-
Bonjour,

J'ai, sur mon site, un script d'anniversaire.

Pour cela, tout est géré par une table MySQL (comprenant la liste des personnes avec leur date de naissance).

Le script affiche la liste des anniversaires pour chaque mois.

Le fichier PHP est fait par un switch / case (il gère le jour d'anniversaire afin de perfectionner l'affichage dans les cas particuliers).

switch($jour)
{
case 1:
echo '<span class="couleur2arial12gras">'. $nom . ' (le 1<sup>er</sup>)</span><br />';
break;

case $date_du_jour :
echo '<img src="images/cadeau.png" title="C\'est son anniversaire aujourd\'hui. Joyeux anniversaire !"> <span class="anniversaire">'. $nom .' (le ' . $jour .')</span><br />';
break;

default :
echo '<span class="couleur2arial12gras">'. $nom .' (le '. $jour .')</span><br />';
break;
}


le case 1 permet d'afficher "1er juin" au de "1 juin"
le case $date_du_jour permet d'afficher une petite image d'un cadeau et mettre un petit message d'une autre couleur indiquant que c'est le jour d'anniversaire de la personne en lui souhaitant un joyeux anniversaire.
le default c'est tous les autres cas (donc liste des anniversaires des personnes compris entre le 2 et la fin du mois hors jour d'anniversaire).

Il me reste un cas que je n'ai pas traité et que je n'arrive pas a afficher c'est celui ou il n'y a aucun anniversaire prévu (car j'ai certains mois ou je n'ai aucun anniversaire). En gros j'aimerai ajouter dans mon switch / case quelque chose du style s'il n'y a pas d'anniversaire ce mois ci alors afficher "Pas d'anniversaire ce mois ci".

Si quelqu'un a une idée,
Merci pour votre possible aide.

6 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonsoir,

Tu fais une requête pour déterminer combien il y a d'anniversaire (COUNT), puis tu agis en conséquence.
Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351
Bonjour,
Ce n'est pas dans ton SWITCH qu'il faut gérer ça .. mais après l'exécution de ta requête

Montres nous le code de ta requête
Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021
1
Bonjour,
Voici le code de ma requête

$requete = "SELECT nom, jour_anniv from table_anniversaire WHERE mois_anniv = $mois_en_cours ORDER BY jour_anniv"; 


Merci
--
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
suis mon conseil concernant la requête à faire et regardes le résultat.
Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351
Quand je parlais du code de ta requête ... je voulais dire TOUT le code ...
Avec son exécution ....

Au passage .. tu utilises quelle extension pour te connecter à la BDD ? PDO ? mysqli_* ? mysql_* ?

En fonction de ce que tu utilises et de ton code COMPLET (pas seulement la requête elle-même) je serais plus à même de te répondre.

NB : Normalement.... AUCUN besoin de faire une requête supplémentaire comme le suggère Nhenry.


Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351
Visiblement tu utilises mysqli (j'ai regardé tes anciennes questions...).
Donc .. il te suffit de regarder combien de lignes sont retournées par ta requête à l'aide de l'instruction num_rows

et donc...

$result = $mysqli->query($requete);

 /* Détermine le nombre de lignes du jeu de résultats */
 $nombre_lignes = $result->num_rows;

 if($nombre_lignes > 0 ){

 // Ici tu places le code de ta boucle WHILE (celle qui contient ton switch)



}else{
  // aucun résultat 
 echo "Pas d'anniversaire ce mois ci";
}
  
Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021
1
Oui j'utilise mysqli. Je poste quand meme mon code complet et essaye le votre dans la foulée.

 include_once('connexionsql.php'); 

$requete = "SELECT nom, jour_anniv from table_anniversaire WHERE mois_anniv = $mois_en_cours ORDER BY jour_anniv";

$req = $connexion->query($requete);
$req = mysqli_query($connexion, $requete);


while($data = mysqli_fetch_assoc($req)) {
{
$nom = htmlspecialchars($data['nom']);
$jour = $data['jour_anniv'];


switch($jour)
{
case 1:
echo '<span class="couleur2arial12gras">'. $nom . ' (le 1<sup>er</sup>)</span><br />';
break;

case $date_du_jour :
echo '<img src="images/cadeau.png" title="C\'est son anniversaire aujourd\'hui. Joyeux anniversaire !"> <span class="anniversaire">'. $nom .' (le ' . $jour .')</span><br />';
break;

default :
echo '<span class="couleur2arial12gras">'. $nom .' (le '. $jour .')</span><br />';
break;
}
}
}
mysqli_free_result ($req);
Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021
1
Bonjour, j'ai essayé votre code j'ai une erreur SQL

Fatal error: Call to a member function query() on a non-object in /home/u630228518/public_html/anniversaires.php on line 67

Ça correspond a la ligne
$result = $mysqli->query($requete);
Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351 >
Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021

Quand je t'ai proposé le code .. je n'avais pas vu le tient ni comment tu te connectais à la BDD...
Toi tu utilises
$req = mysqli_query($connexion, $requete);

il faut donc modifier mon code pour prendre la même structure que le tient.
Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021
1
C'est a dire ? remplacer le $result par $req ? (initialement j'avais remplacé le $req de mon code par $result pour reprendre les même variables que celle de votre structure).

J'ai aussi essayé votre code "brut" (sans y insérer ma boucle while).
J'avais toujours le message d erreur
Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351
Toi tu utilises :
$req = mysqli_query($connexion, $requete);

Moi je t'ai fait un code avec
$req = $connexion->query($requete);


... et là .. toi tu as mis les deux ???
$req = $connexion->query($requete);
$req = mysqli_query($connexion, $requete);


... donc .. tu retires simplement la ligne
$req = $connexion->query($requete);


et ça devrait être mieux....


Messages postés
111
Date d'inscription
jeudi 28 juin 2007
Statut
Membre
Dernière intervention
8 juin 2021
1
Arf désolé (c'est ce qui arrive quand ont fait des copier/coller tout bêtes sans comprendre ce que l'on fait).
C'est bon ça marche nickel.
J'ai fait des tests en ajoutant des anniversaires ce mois ci (dont un aujourd'hui) et en effacant tout ensuite. C'est parfait
(j'aurai sérieux besoin de cours lol)
Merci beaucoup
--
Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351
(j'aurai sérieux besoin de cours lol)

Je n'ai pris aucun cours .... c'est juste une question de pratique (pour apprendre de ses erreurs et mieux connaitres les possibilités du langage...) et de réflexion (savoir ce qu'on veut faire... et comment y parvenir => de la logique en somme... )

Bon courage pour la suite.