Problème d'affichage boucle sur switch php

Résolu/Fermé
micaunprobzo Messages postés 4 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 septembre 2007 - 5 sept. 2007 à 11:39
micaunprobzo Messages postés 4 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 septembre 2007 - 5 sept. 2007 à 16:33
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?
A voir également:

4 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 sept. 2007 à 14:28
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);
1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 sept. 2007 à 11:56
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
0
micaunprobzo Messages postés 4 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 septembre 2007
5 sept. 2007 à 14:16
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
0
micaunprobzo Messages postés 4 Date d'inscription mercredi 5 septembre 2007 Statut Membre Dernière intervention 6 septembre 2007
5 sept. 2007 à 16:33
Alléluia!
C'est exactement ça merci beaucoup Xav !
Mic
0