Page 1 sur 2

Inserer switch dans tableau dynamique

Posté : 04 juil. 2005, 11:29
par Fardouyk
Bonjour,
J'ai des inscriptions pour un rassemblement. Les personnes choisissent leur activité (Counter - War3 - UT) et cela envoie dans ma base de donnée un Y pour oui ou un N pour non à chaque activité.
Mon tableau se présente ainsi :
echo "<table>";
echo "<tr><td width=\"90\"><strong>Pseudo</strong></td><td width=\"90\"><strong>Prenom</strong></td><td width=\"90\"><strong>Equipe</strong></td><td width=\"90\"><strong>Tournoi CS</strong></td><td width=\"90\"><strong>Tournoi W3</strong></td><td width=\"90\"><strong>Tournoi UT</strong></td></tr>"; 
while( $contenu = mysql_fetch_array ($req)) { 
   echo "<tr>"; 
   echo "<td>".$contenu[pseudo]."</td>"; 
   echo "<td>".$contenu[prenom]."</td>"; 
   echo "<td>".$contenu[equipe]."</td>"; 
   echo "<td>".$contenu[counter]."</td>"; 
   echo "<td>".$contenu[warcraft]."</td>"; 
   echo "<td>".$contenu[unreal]."</td>"; 
   echo "</tr>"; 
} 
echo "</table>"; 
En fait je voudrais que pour chaque personne s'affiche une image en fonction de leur choix.
Image
Image
J'avais donc choisit la solution du switch ainsi

switch($contenu[counter])

{
case 'Y': // si il participe
print 'image 1'; // on affiche cette phrase
break; // on referme cette condition

case 'N': // si il ne participe pas
print 'image 2';
break;

default: // si erreur c'est non
print 'image 2';
}

Il me semble que ce n'est pas la meilleure solution et puis j'ai essayé de le mettre dans mon code et cela ne marche pas...

Si vous avez une solution à me proposer... (je débute totalement alors simple s'il vous plait) :oops: :D

Posté : 04 juil. 2005, 11:32
par ouckileou
si tu n'as que deux options (oui ou non), tu peux utiliser if/else
mais le switch devrait quand même fonctionner

si tu réessayais comme ça :
$contenu["counter"]
sinon dans ton idée de switch, pourquoi mettre un case pour 'N' ET un default
ce serait plus court comme ça :
switch($contenu[counter]) {
   case 'Y': // si il participe
      print 'image 1'; // on affiche cette phrase
      break; // on referme cette condition

   default: // si c'est tout sauf 'Y'
      print 'image 2';
}

Posté : 04 juil. 2005, 11:37
par Fardouyk
En fait je préfère bien le if & co mais j'ai souvent la même erreur quand j'utilise le if comme cela :
if($contenu[counter] = = 'Y')
{
print 'OUI';
}
else{
print 'NON';
} 

J'obtiens cela :
Parse error: parse error, unexpected '='

Posté : 04 juil. 2005, 11:39
par ouckileou
en collant les deux égal ça devrait marcher ;)

Posté : 04 juil. 2005, 11:41
par Fardouyk
Merci ca marche mais la question que je me pose c'est comment l'intégrer dans mon code
J'ai essayé ca (jvé sembler débile)
echo "<table>";
echo "<tr><td width=\"90\"><strong>Pseudo</strong></td><td width=\"90\"><strong>Prenom</strong></td><td width=\"90\"><strong>Equipe</strong></td><td width=\"90\"><strong>Tournoi CS</strong></td><td width=\"90\"><strong>Tournoi W3</strong></td><td width=\"90\"><strong>Tournoi UT</strong></td></tr>"; 
while( $contenu = mysql_fetch_array ($req)) { 
   echo "<tr>"; 
   echo "<td>".$contenu[pseudo]."</td>"; 
   echo "<td>".$contenu[prenom]."</td>"; 
   echo "<td>".$contenu[equipe]."</td>"; 
   echo "<td>"if($contenu[counter] == 'Y')
{
print 'OUI';
}
else{
print 'NON';
}"</td>"; 
   echo "<td>".$contenu[warcraft]."</td>"; 
   echo "<td>".$contenu[unreal]."</td>"; 
   echo "</tr>"; 
} 
echo "</table>"; 
Mais ca ne marche pas :wink:

Je ne sais pas comment le mettre....

Posté : 04 juil. 2005, 11:45
par ouckileou
tu ne peux pas mélanger une sortie de texte (print ou echo) et un test

il faut que :
- tu écrives le code de début de cellule
- tu fasses ton test et que tu écrives le code de l'image choisie
- tu écrives le code de fin de cellule

ou alors tu fais le test et tu écris le code de début/fin de cellule dans chaque option

un echo se termine forcément par un ;
mais là tu enchaines par un if
termines proprement chaque echo avant de faire ton test

Posté : 04 juil. 2005, 11:51
par Tho
tu peux aussi faire ça

echo "<td><img src='".(($contenu[counter] == 'Y')?"image1.jpg":"image2.jpg")."'></td>";

Posté : 04 juil. 2005, 11:54
par ouckileou
ouais, et vu qu'il galère sur ses conditions, tu pourrais imaginer que peut-être il ne connait pas cette syntaxe et donc l'expliquer plutôt que de balançer ton code...
echo "<td><img src='".(($contenu[counter] == 'Y')?"image1.jpg":"image2.jpg")."'></td>";
opérateur ternaire : (condition)?valeur si VRAIE:valeur si FAUSSE

c'est plus court effectivement mais bon essaye déjà avec un if classique ;)

Posté : 04 juil. 2005, 11:57
par Fardouyk
J'ai fait ca :
echo "<table>";
echo "<tr><td width=\"90\"><strong>Pseudo</strong></td><td width=\"90\"><strong>Prenom</strong></td><td width=\"90\"><strong>Equipe</strong></td><td width=\"90\"><strong>Tournoi CS</strong></td><td width=\"90\"><strong>Tournoi W3</strong></td><td width=\"90\"><strong>Tournoi UT</strong></td></tr>"; 
while( $contenu = mysql_fetch_array ($req)) { 
   echo "<tr>"; 
   echo "<td>".$contenu[pseudo]."</td>"; 
   echo "<td>".$contenu[prenom]."</td>"; 
   echo "<td>".$contenu[equipe]."</td>"; 
if($contenu[counter] == 'Y')
{   
print "OUI"; 
}
else{
print "NON"; 
} 
   echo "<td>".$contenu[warcraft]."</td>"; 
   echo "<td>".$contenu[unreal]."</td>"; 
   echo "</tr>"; 
} 
echo "</table>"; 
:shock:

Mais ca ne lui plait pas :( elle est ou ma grosse bétise

Posté : 04 juil. 2005, 11:59
par ouckileou
IL te dit peut-être pourquoi ça ne lui plait pas non ?

tu as une erreur provoquée ? le message d'erreur aide quelquefois... ;)

quoiqu'il en soit, pour le moment ton "OUI" ou ton "NON" ne sera pas affiché dans le tableau puisque tu ne l'affiches pas entre balises <td>

Posté : 04 juil. 2005, 12:02
par Fardouyk
Bon je vais continuer de chercher (apré la pause déjeuner).
Merci Tho mais je préfère pour le moment faire des choses que je comprend et que je serais capable de refaire tout seul (mais je met ton code dans mon répertoire ^^)

Merci

Posté : 04 juil. 2005, 12:16
par Fardouyk
J'essaye de comprendre ca :
echo "<td><img src='".(($contenu[counter] == 'Y')?"image1.jpg":"image2.jpg")."'></td>"; 
mais cela ne marche pas
il me met toujours la 2e condition (à savoir non)
echo "<table>";
echo "<tr><td width=\"90\"><strong>Pseudo</strong></td><td width=\"90\"><strong>Prenom</strong></td><td width=\"90\"><strong>Equipe</strong></td><td width=\"90\"><strong>Tournoi CS</strong></td><td width=\"90\"><strong>Tournoi W3</strong></td><td width=\"90\"><strong>Tournoi UT</strong></td></tr>"; 
while( $contenu = mysql_fetch_array ($req)) { 
   echo "<tr>"; 
   echo "<td>".$contenu[pseudo]."</td>"; 
   echo "<td>".$contenu[prenom]."</td>"; 
   echo "<td>".$contenu[equipe]."</td>"; 
   echo "<td><img src='".(($contenu[counter] == 'Y')?"http://scipately.free.fr/images/icons/Y.gif":"http://scipately.free.fr/images/icons/N.gif")."'></td>"; 
   echo "<td>".$contenu[warcraft]."</td>"; 
   echo "<td>".$contenu[unreal]."</td>"; 
   echo "</tr>"; 
} 
echo "</table>"; 
Pourquoi?? ca vient de ma base de donnée ??? j'ai pourtant bien Y dans counter.. :o

Posté : 04 juil. 2005, 12:18
par ouckileou
ce truc là ce n'est qu'un if/else condensé...

tu ne veux pas essayer d'abord avec un vrai if/else, et ensuite tu pourras réduire ? ;)

et une question en passant, si tu affiches cette variable : $contenu[counter]

ça te donne quoi ? tu as la bonne valeur ?
echo 'variable $contenu[counter] = "'.$contenu[counter].'"';

Posté : 04 juil. 2005, 12:19
par Fardouik
Ben si mais je suis toujours au meme point..
J'avance pas avec mon bidule.... :(

Posté : 04 juil. 2005, 12:20
par ouckileou
repars de ce code là
echo "<table>";
echo "<tr><td width=\"90\"><strong>Pseudo</strong></td><td width=\"90\"><strong>Prenom</strong></td><td width=\"90\"><strong>Equipe</strong></td><td width=\"90\"><strong>Tournoi CS</strong></td><td width=\"90\"><strong>Tournoi W3</strong></td><td width=\"90\"><strong>Tournoi UT</strong></td></tr>";
while( $contenu = mysql_fetch_array ($req)) {
   echo "<tr>";
   echo "<td>".$contenu[pseudo]."</td>";
   echo "<td>".$contenu[prenom]."</td>";
   echo "<td>".$contenu[equipe]."</td>";
if($contenu[counter] == 'Y')
{   
print "OUI";
}
else{
print "NON";
}
   echo "<td>".$contenu[warcraft]."</td>";
   echo "<td>".$contenu[unreal]."</td>";
   echo "</tr>";
}
echo "</table>";
en séparant bien les différents affichage, et reposte un essai

PS : et ta pause déjeuner ? ;)