Rechercher : dans
Par :

Problème d'affichage boucle sur switch php

Dernière réponse le 5 sep 2007 à 16:33:59 micaunprobzo, le 5 sep 2007 à 11:39:13 
 Signaler ce message aux modérateurs

Bonjour à tous
J'ai un souci d'affichage de résultat issu d'une boucle sur un switch...

ma table1 est composée comme suit:

id_table day h1 h2

1 Mon 0 5
2 Mon 0 0

[code]
$date1 = Mon;
$hms=1;
$i =1;
$r = 3;
$array=array();

while ( $i < $r) {
$resultatfiche=mysql_query("select * from table1 where id_table like '".$i."' and day like '".$date1."'",$connexion_sql);

if (mysql_num_rows($resultatfiche) != 0){
$day=mysql_result($resultatfiche,0,"day");
$h1=mysql_result($resultatfiche,0,"h1");
$h2=mysql_result($resultatfiche,0,"h2");

switch ($date1)
{
case 'Mon':
if (($h1<$hms) and ($hms<($h2))
{
$var='2';}
else {
$var='1';}
break;

case 'Tue':
if (($h1<$hms) and ($hms<($h2))
{
$var='2';}
else {
$var='1';}
break;

etc...

case 'Sun':
if (($h1<$hms) and ($hms<($h2))
{
$var='2';}
else {
$var='1';}
break;

else {
$var='3';
}
$array[$i]="$var";

$i++;
}
$array=array_count_values($array);
print_r($tableau);

[/code]

Résultat...

Array ( [3] => 1 [2] => 1 [] => 1 )

alors que je cherche à avoir:

Array ( [3] => 1 [2] => 1 [1] => 1 )

Quelqu'un peut il m'aider?

Configuration: Mac OS X
Safari 522.12.1

Meilleures réponses pour « Problème d'affichage boucle sur switch php » dans :
[Webmaster] Afficher facilement le code php/xhtml de vos pages Voir Si vous voulez proposer a vos visiteurs de voir la source de vos fichiers (PHP ou HTML), il y a plusieurs solutions. En php Afficher le code php Afficher le code html En html Informations Voir aussi En php Afficher le code php La...
[PHP] Comment afficher l'adresse IP d'un visiteur ? VoirPour afficher l'adresse IP d'un visiteur sur votre site, insérez ce code dans la zone où vous voulez qu'elle s'affiche.
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
PHP - Structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non, c'est-à-dire si la valeur de son expression vaut 0 ou 1 (le PHP associe le mot clé true à 1...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...

1

Reivax962, le 5 sep 2007 à 11:56:33

Bonjour,

J'aurais déjà quelques remarques sur ta requête.
Je pense que tu peux l'optimiser de plusieurs façons :
1 - Evite d'utiliser des LIKE quand un = fait l'affaire. Pour des chiffres, pas besoin non plus de mettre des quotes '.
2 - Plutôt que de faire X requêtes pour chaque $i, il serait plus efficace de ne faire qu'une seule requête, qui prend tout les id entre $i et $r

Enfin ce n'est que de l'optimisation et n'est pas la cause de ton problème.

Sinon, c'est peut-être de là que vient ton problème, le dernier élément d'un switch n'est pas else {}, mais default:
Par ailleurs, tu peux factoriser des cas qui font la même chose en ne mettant pas de break; Enfin c'est surtout pour la présentation du code.
Dernière chose, dans ta dernière ligne, tu mets print_r($tableau), j'imagine que c'était en fait $array, non ?
Au final, ton switch deviendrait :

if (mysql_num_rows($resultatfiche) != 0)
{
	$day=mysql_result($resultatfiche,0,"day");
	$h1=mysql_result($resultatfiche,0,"h1");
	$h2=mysql_result($resultatfiche,0,"h2");

	switch ($date1)
	{
		case 'Mon':
		case 'Tue':
		case 'Wed':
		case 'Thu':
		case 'Fri':
		case 'Sat':
		case 'Sun':
			if ($h1<$hms && $hms<($h2))
			{
				$var='2';
			}
			else
			{
				$var='1';
			}
		break;

		default:
			$var='3';
		break;
	}
	$array[$i]=$var;
	$i++;
}
$array=array_count_values($array);
print_r($tableau);
En espérant que cela aide...

Xavier

Répondre à Reivax962

2

micaunprobzo, le 5 sep 2007 à 14:16:58

Merci pour ta réponse je commence à voir le bout du tunnel surtout grâce au default!

ta deuxième remarque est le coeur de mon problème, je m'explique
lorsque je teste les id(s) invididuellement mon script fonctionne, mais lorsque je boucle avec mon while cela ne marche plus!

j'espère m'être bien expliqué.

Merci! Mic

Répondre à micaunprobzo

3

Reivax962, le 5 sep 2007 à 14:28:57
  • +1

Mmmmh, que dirais-tu de ceci alors ?

$resultatfiche = mysql_query("SELECT * FROM table1 WHERE id_table >=  $i AND id_table < $r AND day = '$date1'", $connexion_sql);
$j = 0;
while ($data = mysql_fetch_assoc($resultatfiche))
{
	$day = $data["day"];
	$h1 = $data["h1"];
	$h2 = $data["h2"];

	switch ($date1)
	{
		case 'Mon':
		case 'Tue':
		case 'Wed':
		case 'Thu':
		case 'Fri':
		case 'Sat':
		case 'Sun':
			if ($h1<$hms && $hms<($h2))
			{
				$var='2';
			}
			else
			{
				$var='1';
			}
		break;
		default:
			$var='3';
		break;
	}
	$array[$j]=$var;
	$j++;
}
$array=array_count_values($array);
print_r($tableau);

Répondre à Reivax962

4

 micaunprobzo, le 5 sep 2007 à 16:33:59

Alléluia!
C'est exactement ça merci beaucoup Xav !
Mic

Répondre à micaunprobzo