Chaine de caractères vide dans un switch/case

Résolu
Utilisateur anonyme - Modifié par Michel2107 le 2/06/2015 à 20:50
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 - 3 juin 2015 à 12:50
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

NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
2 juin 2015 à 20:59
Bonsoir,

Tu fais une requête pour déterminer combien il y a d'anniversaire (COUNT), puis tu agis en conséquence.
0
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 345
2 juin 2015 à 21:13
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
0
Utilisateur anonyme
2 juin 2015 à 23:14
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
--
0
NHenry Messages postés 15156 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 29 septembre 2024 159
2 juin 2015 à 23:15
suis mon conseil concernant la requête à faire et regardes le résultat.
0
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 345
2 juin 2015 à 23:25
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.


0
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 345
2 juin 2015 à 23:41
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";
}
  
0
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);
0
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);
0
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 345 > Utilisateur anonyme
3 juin 2015 à 09:49
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.
0
Utilisateur anonyme
3 juin 2015 à 10:18
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 345
3 juin 2015 à 11:58
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....


0
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
--
0
jordane45 Messages postés 38244 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 4 octobre 2024 345
3 juin 2015 à 12:50
(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.
0
Rejoignez-nous