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

Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
-
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.
Afficher la suite 

Votre réponse

6 réponses

Messages postés
14384
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 février 2019
153
0
Merci
Bonsoir,

Tu fais une requête pour déterminer combien il y a d'anniversaire (COUNT), puis tu agis en conséquence.
Commenter la réponse de NHenry
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
362
0
Merci
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
Commenter la réponse de jordane45
Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
1
0
Merci
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
--
NHenry
Messages postés
14384
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 février 2019
153 -
suis mon conseil concernant la requête à faire et regardes le résultat.
Commenter la réponse de Michel2107
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
362
0
Merci
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.


jordane45
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
362 -
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";
}
  
Michel2107
Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
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);
Michel2107
Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
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);
jordane45
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
362 > Michel2107
Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
-
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.
Michel2107
Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
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
Commenter la réponse de jordane45
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
362
0
Merci
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....


Commenter la réponse de jordane45
Messages postés
90
Date d'inscription
jeudi 28 juin 2007
Dernière intervention
1 novembre 2018
1
0
Merci
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
--
jordane45
Messages postés
24555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 février 2019
362 -
(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.
Commenter la réponse de Michel2107

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.