Accueil > Forum > > > > Petite aide pour un switch...
Petite aide pour un switch...
mardi 8 mars 2011 à 00:10:20 |
Petite aide pour un switch...

fra1ft
|
Bonjour à tous.
J'ai comme un petit problème de switch...
Je m'explique:
Je pioche une valeur dans une table sous format d'un nombre.
Suivant la valeur j'affecte un numéro qui sera en echo dans un nom d'image (<img src="machin-<?php echo $valeur;?>.png">).
La valeur piochée varie de 1 à 250 par exemple.
Donc j'applique le code suivant:
Code PHP : switch($Pourcent){
case $Pourcent < 4 : $imgp = '01';
break;
case ($Pourcent >= 5) && ($Nombre <= 9) : $imgp = '02';
break;
ect......
case $Pourcent > 250 : $imgp = '15';
break;
default : $imgp = '01';
break;
}
Une fois la page affichée, je me retrouve avec l'image 01 et l'image 02 seulement alors que j'ai des valeurs diverses et même dépassant les 100...
On peut voir le source en appli sur le site www.team-ufs.fr dans le bandeau rouge en dessous du gros cadre du haut, le texte en marquee, où le nombre affiché est le pourcentage (après application d'une function calcul) du nombre réel pioché dans la table puis l'image après le "%".
M'est-je trompé quelque part dans mon case ou utiliserai-je une mauvaise procédure?
Si besoin est, je posterai la portion de code concernée.
Merci d'avance!
Amiga user for ever...
|
|
mardi 8 mars 2011 à 00:14:50 |
Re : Petite aide pour un switch...

fra1ft
|
Zutoublié:
Je dois afficher 15 images différentes réparties sur la fourchette de 250 sachant de 1 à 100 en pas de 25 et de 100 à 250 en pas de 50.
Chaque image est attribuée donc à un nombre de base lui même attribué à un pseudo (juste pour info).
Amiga user for ever...
Le textarea des commentaires de ce site ne comprend pas le bbcode [code][/code].
Donc considérer que ce qu'il y a entre ces tags là n'est que du code cité. 
|
|
mardi 8 mars 2011 à 01:07:03 |
Re : Petite aide pour un switch...

007Julien
|
Le switch s'applique à des valeurs différentes (et non à des conditions sur celles-ci). Ce serait donc sur la valeur entière de $pourcent divisé par 5 qu'il faudrait faire porter le switch (au moins pour les premières images)
$nos=round($pourcent/5);
switch($nos) {
case 0:img='01';break;
case 1:img='02';break;
}
Le calcul du $nos de l'image pourrait, bien entendu, être modifié au delà de certains paliers.
Ceci dit l'utilité du switch n'apparaît pas évidente puisque le nom de l'image semble alors pouvoir être construit à partir de son numéro...
Enfin, il existe en php une fonction array_rand() permettant de tirer au hasard n éléments d'un tableau plus important.
Il serait donc aisé de lire un répertoire d'images (repérées par la date et l'heure de leur téléchargement sur le serveur de manière à éviter les piratages de l'ensemble des images) et de choisir aléatoirement les images à afficher...
La fonction schuffle() pourrait permettre aussi quelques variantes en distinguant des catégories d'images ...
|
|
mardi 8 mars 2011 à 08:59:22 |
Re : Petite aide pour un switch...

cod57
|
bonjour
l'idée de 007julien est la bonne je crois
petit snippet pour t'aider
bne prog
a++
Code PHP :
<?php
$host="localhost";
$login="root";
$pass="";
$base="atast";
$table="tableau";
mysql_connect($host,$login,$pass) or die('serveur ?');
mysql_select_db($base) or die('base ?');
$sql="select image from ".$table;
$query=mysql_query($sql) or die('demande ?');
$choix = array();
while($res=mysql_fetch_array($query)){
$choix[]=$res['image'];
}
$count=count($choix);
if(isset($choix) && !empty($choix)){
$position=rand(0,$count-1);
/*sol 1*/
$rand_keys = array_rand($choix,$position+1);
echo $choix[$position] . "\n";
/*sol 2*/
shuffle($choix);
echo $choix[$position]."\n";
$choix=array(); /*vide le tableau*/
$count=0;
}else{
echo 'erreur choix vide';
}
?>
|
|
mardi 8 mars 2011 à 09:08:37 |
Re : Petite aide pour un switch...

cod57
|
erratum ...
Code PHP :
<?php
$host="localhost";
$login="root";
$pass="";
$base="atast";
$table="tableau";
mysql_connect($host,$login,$pass) or die('serveur ?');
mysql_select_db($base) or die('base ?');
$sql="select image from ".$table;
$query=mysql_query($sql) or die('demande ?');
$choix = array();
while($res=mysql_fetch_array($query)){
$choix[]=$res['image'];
}
$count=count($choix);
if(isset($choix) && !empty($choix)){
$position=rand(0,$count-1);
/*sol 1*/
$rand_keys = array_rand($choix);
echo $choix[$rand_keys] . "\n";
/*sol 2*/
shuffle($choix);
echo $choix[$position]."\n";
$choix=array(); /*vide le tableau*/
$count=0;
}else{
echo 'erreur choix vide';
}
?>
|
|
mardi 8 mars 2011 à 12:13:15 |
Re : Petite aide pour un switch...

fra1ft
|
Oh ben! Merci bien les gars!
julien=> tes précisions sont intéressantes, mais il me semble bien que dans la doc php, ils précisent qu'on peut utiliser switch en conditionnel, à l'identique de if ($truc >= $bidule){ .... Je vais plutôt tenter avec du conditionnel simple a base de if elseif, ainsi je verrai si ce sont mes valeurs issues de la bdd qui posent problème.
cod57=>merci pour ce snippet. Il est intéressant mais ne risque pas trop de coller à ce que je recherche. Cependant, je garde sous le coude car on a toujours besoin d'un randomize çà ou là (et peut servir à d'autres).
Je tenais aussi à préciser à julien que les images ne peuvent être aléatoires, ce n'est pas une galerie ou un cadre photo mais des icones bien définies récompensant chaque utilisateur suivant le nombre de posts qu'il a effectué sur le forum, parallèle au site.
Mais la fonction array_rand() peut être utile, je retiens.
Amiga user for ever...
Le textarea des commentaires de ce site ne comprend pas le bbcode [code][/code].
Donc considérer que ce qu'il y a entre ces tags là n'est que du code cité. 
|
|
mardi 8 mars 2011 à 13:14:20 |
Re : Petite aide pour un switch...

007Julien
|
Désolé, aussi bien en vo que traduite en français (voir extraits ci-après), la documentation PHP n'évoque pas les booléens lorsqu'elle évoque les valeurs possibles des cases d'un switch. Merci de ne pas suggérer de contre-vérités.
« The case expression may be any expression that evaluates to a simple type, that is, integer or floating-point numbers and strings »
« La valeur du case peut être toute expression de type scalaire, c'est-à-dire nombre entier, nombre à virgule flottante et chaîne de caractères. »
Par ailleurs, même si le textarea de ce site ne comprend pas le «bbcode», des boutons autorisent l'insertion de codes divers et variés.
|
|
mardi 8 mars 2011 à 13:58:36 |
Re : Petite aide pour un switch...

fra1ft
|
Réponse acceptée !
Tu as sûrement raison, je ne suis pas assez compétent pour contredir à 100% mais je cite:
Code PHP : Le Switch permet d'avoir une écriture simplifiée, nettement plus lisibile qu'une pile de if then else.
Exemple simple
$Nombre = 2;
switch($Nombre)
{
case 1:
echo "Un";
case 2:
echo "Deux";
case 3:
echo "Trois";
}
* Constatez l'absence de ; à la fin de switch($Nombre). Très important, sinon ça ne marche pas!
* Après case 1, case 2 et case 3, ce sont deux ponts : et non pas point-virgule ;
* les accolades sont nécessaires
Dans cet exemple le résultat sera étrangement :
DeuxTrois
Je n'ai pas d'explication quant à ce phénomène, mais j'ai une solution :
Il est nécessaire d'inclure le mot-clé break; afin de l'informer qu'il doit s'arrêter. Le code suivant :
$Nombre = 2;
switch($Nombre)
{
case 1:
echo "Un";
break;
case 2:
echo "Deux";
break;
case 3:
echo "Trois";
break;
}
affichera :
Deux
* Si $Nombre avait valu 5, rien n'aurait été affiché, et aucune erreur n'aurait été générée.
Phénomène lié au break :
Dès qu'une comparaison est exécutée, le break renvoie immédiatement à la ligne d'instruction après le Switch. Exemple :
$Nombre = 5;
switch($Nombre)
{
case 5 :
echo "Cinq";
break;
case 5 :
echo "Five";
break;
}
Affiche seulement :
Cinq
Gestion des valeurs non prévues avec default
Si nombre est différent de 1,2 ou 3, on veut afficher "Nombre différent de 1, 2 ou 3" :
$Nombre = 5;
switch($Nombre)
{
case 1:
echo "Un";
break;
case 2:
echo "Deux";
break;
case 3:
echo "Trois";
break;
default:
echo "Nombre différent de 1, 2 ou 3";
break;
}
* C'est bien default : et PAS case default :
Gestion des plages de valeur
Il faut savoir que l'écriture
$Nombre = 1;
switch($Nombre)
{
case 1:
echo "Un";
break;
}
N'est que la contraction de l'écriture :
$Nombre = 1;
switch($Nombre)
{
case $Nombre == 1:
echo "Un";
break;
}
Quand on a compris ça, la gestion des plages de valeurs coule de source. L'exemple suivant affiche :
* Petit si le nombre est inférieur à 10
* Moyen s'il est compris entre 10 et 50
* Grand s'il est supérieur à 50
$Nombre = 32;
switch ($Nombre)
{
case ($Nombre < 10) :
echo "petit";
break;
case (($Nombre >= 10) && ($Nombre <= 50)) :
echo "Moyen";
break;
case ($Nombre > 50) : // ou default, c'est pareil
echo "Grand";
break; // dernier break facultatif par sa nature même
}
* En fait, on peut mettre n'importe quelle expression booléenne après les case, même si ça n'a rien à voir avec l'instruction initiale switch.
Booléen ou non?
Tant est que ce que j'ai fait fonctionne bien, sauf que je m'étais simplement trompé dans une des variables  (comme quoi on est pas parfait)...
Code PHP : if ($Pourcent <= 4){
$imgp = '01';
} elseif (($Pourcent >= 5) && ($Pourcent <= 9)){
$imgp = '02';
} elseif (($Pourcent >= 10) && ($Pourcent <= 14)){
$imgp = '03';
} elseif (($Pourcent >= 15) && ($Pourcent <= 19)){
$imgp = '04';
} elseif (($Pourcent >= 20) && ($Pourcent <= 24)){
$imgp = '05';
} elseif (($Pourcent >= 25) && ($Pourcent <= 29)){
$imgp = '06';
} elseif (($Pourcent >= 30) && ($Pourcent <= 34)){
$imgp = '07';
} elseif (($Pourcent >= 35) && ($Pourcent <= 39)){
$imgp = '08';
} elseif (($Pourcent >= 40) && ($Pourcent <= 44)){
$imgp = '09';
} elseif (($Pourcent >= 45) && ($Pourcent <= 49)){
$imgp = '10';
} elseif (($Pourcent >= 50) && ($Pourcent <= 99)){
$imgp = '11';
} elseif (($Pourcent >= 100) && ($Pourcent <= 149)){
$imgp = '12';
} elseif (($Pourcent >= 150) && ($Pourcent <= 199)){
$imgp = '13';
} elseif (($Pourcent >= 200) && ($Pourcent <= 249)){
$imgp = '14';
} elseif ($Pourcent >= 250){
$imgp = '15';
}
J'ai ainsi une image par plage de valeur.
Merci quand même, julien.
Amiga user for ever... 
|
|
mardi 8 mars 2011 à 14:02:48 |
Re : Petite aide pour un switch...

fra1ft
|
Oublié:
pour Code : Par ailleurs, même si le textarea de ce site ne comprend pas le «bbcode», des boutons autorisent l'insertion de codes divers et variés.
Ne pas prendre en considération, ce n'était pas adressé à ce site... Copier/coller, quand tu me colles...
Amiga user for ever... 
|
|
mardi 8 mars 2011 à 15:23:53 |
Re : Petite aide pour un switch...

007Julien
|
Effectivement le switch admet (avec PHP 5.3.0) la reprise du paramètre et l'inclusion de conditions sur celui-ci (bien que cela semble un peu contre nature).
Pour le reste, le code suivant ne serait-il pas plus performant?
Code PHP : if ($prm<50) $prm=round($pourcent/5);
else $prm=10+round($pourcent/50);
$prf="";if ($prm<10) $prf="0";
$imgp=$prf.$prm;
|
|
Cette discussion est classée dans : nombre, code, image, valeur, switch
Répondre à ce message
Sujets en rapport avec ce message
générer des miniatures avec gd 1.6 [ par vegetaline ]
muhaha alors là c'est rigolo, un super défi pour les programmeurs fous!ok j'ai le code pour générer des miniatures grâce au php, mais ça marche qu'ave
Valeur retourné par un Objet de Type image??? [ par DJPGM ]
C quoi la valeur que retourne une image comme dans l'exemple suivant???
imagecolorallocate [ par xylo2 ]
Salut !J'ai fait un truc tout basique, je voudrais ajouter un texte sur une image pré-existante.Voici mon code :if (!isset($mat)) $mat="Toto";<
Image sur click .. [ par nicolas66 ]
Bonsoir @ tous !Je voulais juste savoir comen il était possible d'afficher une image créee avec php dans la meme page ou il y a un formulaire sur clic
besoin d'aide sur du code [ par ASPerix ]
Quelqu'un peut-il m'expliquer ce que fait le code suivant:foreach($HTTP_POST_VARS as $clé => $valeur) { if ($clé == "TxtLogin") { $Login = $
Probleme code de securité [ par zzzzzz ]
Voila je suis debutant en php et j'ai inclue un fichier code.php avec comme contenu: header("Content-type: image/jpeg"); $nbr = rand(10000,100000);
Grand nombre de cookies [ par Trigun222 ]
Salut,Depuis mon site je souhaite envoyer plus de 50 cookies sur une page ne contenant que le code pour ceci pour que l'envoie soit sur et ensuite les
image et GD [ par papipsycho ]
salut a tous voila jai un pb donc jai un script qui marche tres bien pour cree des image et prendre des inf dans ma BDD(un script que jai recupere ici
Help me [ par YuGiOhFlash ]
[size=3] Help je cherche un code:Explication G une page index ou il fo ecrir un code pour voir des images.une page calculetrice pour mettre les images
Affichage...suite de tableau [ par Brikse ]
Hello tout le monde.... Je rencontre un problème au niveau de l'affichage dans mon code PHP. Alors, le truc est simple.J'ai un code qui insère une ima
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|