Switch ne marche pas
j'ai un code qui va afficher un tableau qui contient des données enregistrés dans la base de données .Dans le dernier cas je veux afficher une cercle(image) selon la valeur de $row[4] (la decision).Alors que l'affichage me donne cet erreur :Notice: Undefined variable: DecisionP in C:\wamp\www\gestionrisques\tableau_bord_tools.inc.php on line 52
while( $row=mysql_fetch_array($result)){
switch ($row[4]) {
case 'non terminé':
return $DecisionP = 'images/head_form_ok.jpg';
break;
case 'terminé':
return $DecisionP = 'images/circle-green.PNG';
break;
}
echo"<tr>" ;
echo "<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; '>$row[0]</td>
<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[1]</td>
<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[2]</td>
<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[3]</td>
";
echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'><img src=".$DecisionP."/></td>
";
echo "</tr>" ;
$i++ ;
}
}
return $contenu ;
} ;
Quelqu'un aurait une solution svp?
Merci d'avance.
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
.
12 réponses
Un code PHP affiche un tableau issu d'une base de données et tente d'afficher une image selon la valeur de $row[4] (la décision), mais une Notice undefined variable: DecisionP apparaît. Plusieurs éléments indiquent de ne pas employer return dans le switch et d'affecter plutôt $DecisionP (par ex 'images/head_form_ok.jpg' ou 'images/circle-green.PNG'), puis finalement d'utiliser <img src="$DecisionP" />. Des discussions portent aussi sur la gestion des accents dans les statuts ('terminé' vs 'termine'), le trim de $row[4], et la vérification que les chemins d'image existent et sont accessibles. En pratique, un extrait correct propose switch ($statut) { case 'non terminé': $DecisionP='images/head_form_ok.jpg'; break; case 'terminé': $DecisionP='images/circle-green.PNG'; break; default: $DecisionP=''; } puis affichage avec <img src="$DecisionP" />.
-
ModérateurBonjour,
Tu fais un RETURN + une afectation de variable en même temps... ce n'est pas terrible !
Essayes ceci :
switch ($row[4]) { case 'non terminé': $DecisionP = 'images/head_form_ok.jpg'; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; break; default: // toute autre valeur... $DecisionP = ''; break; }
-
voilà mon code jordane45 et merci de m'aider :))
<?php include("db_tools.inc.php") ; function tableau_bord_client($roleU) { $query="SELECT p.Nom_P, p.Date_debut, p.Date_fin, p.Avancement,p.DecisionP FROM projet p , client_projet cp WHERE cp.idCl=". $_SESSION['id_User']. " and p.id_P = cp.idPr " ; $result=db_doquery($query) ; //La balise <table> et la ligne des entêtes sont déjà déclarés dans le script listClients.php. //Nous allons parcourir le resultat et créer les lignes de ce tableau HTML. Il s'agit de créer une chaine de caractère //lui cotient ces les lignes. Cette chaine sera la valeur de retour de cette fonction. $contenu="" ; $chef=(isset($roleU) && $roleU=="terminé")? TRUE : FALSE ; if( @mysql_num_rows($result)==0){ //dans le cas où pas de clients trouvés, une seule ligne qui s'affiche indiquant cette état echo"<tr class=\"notfound\"><td colspan='6'> Aucun étape n'a été trouvé.</td></tr>" ; }else { $i=0 ; while( $row=mysql_fetch_array($result)){ switch ($row[4]) { case 'non terminé': $DecisionP = 'images/head_form_ok.jpg'; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; break; default: // toute autre valeur... $DecisionP = ''; break; } echo"<tr>" ; echo "<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; '>$row[0]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[1]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[2]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[3]</td> "; echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'><img src=".$DecisionP."/></td> "; echo "</tr>" ; $i++ ; } } return $contenu ; } ;
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code -
ModérateurCommence par faire un ECHO de ta variable pour voir ce qu'elle vaut.
<?php include("db_tools.inc.php") ; function tableau_bord_client($roleU) { $id_user = isset($_SESSION['id_User'])?$_SESSION['id_User']:NULL; if($id_user){ $query="SELECT p.Nom_P, p.Date_debut, p.Date_fin, p.Avancement,p.DecisionP FROM projet p , client_projet cp WHERE cp.idCl='$id_user' AND p.id_P =cp.idPr " ; $result=db_doquery($query) ; }else{ // si aucun ID user présent dans la variable SESSION['id_User'] return -1; } //La balise <table> et la ligne des entêtes sont déjà déclarés dans le script listClients.php. //Nous allons parcourir le resultat et créer les lignes de ce tableau HTML. Il s'agit de créer une chaine de caractère //qui contient les lignes. Cette chaine sera la valeur de retour de cette fonction. $contenu="" ; $chef=(isset($roleU) && $roleU=="terminé")? TRUE : FALSE ; if( @mysql_num_rows($result)==0){ //dans le cas où pas de clients trouvés, une seule ligne qui s'affiche indiquant cette état echo"<tr class=\"notfound\"><td colspan='6'> Aucun étape n'a été trouvée.</td></tr>" ; }else { $i=0 ; while( $row=mysql_fetch_array($result)){ $statut= $row[4]; switch ($statut) { case 'non terminé': $DecisionP = 'images/head_form_ok.jpg'; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; break; default: // toute autre valeur... $DecisionP = ''; //Le temps des tests echo "<br><br> row[4] => ".$statut; break; } echo"<tr id='tr_$i'>" ; echo "<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; '>$row[0]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[1]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[2]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[3]</td> "; echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'> <img src='$DecisionP' alt='image'></img> </td> "; echo "</tr>" ; $i++ ; } } return $contenu ; } ;
EDIT : MAJ du code-
-
-
-
Modérateur@Imen Ben Hassen.... normal non ??
Tu as mis dans ton SWITCH :
"terminé" (avec un accent...) ... et là .. tu me dis qu'il t'affiche : "termine" .. (sans accent ! )
-
-
Jordane45 svp quand je mets terminé avec "é" dans la base de données et dans le switch , l'image ne s'affiche pas
-
-
@jordane45jordane45 j'ai mets dans la base de données les valeurs comme ça: en risque, terminé , non terminé et en cours et dans votre code je mets
$statut= $row[4]; switch ($statut) { case 'en risque': $DecisionP = 'images/circle-ora.png'; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; break; case 'non terminé': $DecisionP = 'images/circle-red.PNG'; break; default: // toute autre valeur... $DecisionP = 'images/circle-blue.PNG'; break; }
et la source de la page m'affiche comme ça:<img src="alt='image'">
merci :)
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
.
-
-
ModérateurCommence par afficher le contenu de la variable $statut pour voir ce qu'elle contient :
$statut= $row[4]; echo "<br><br> Statut : ".$statut; switch ($statut) { case 'en risque': $DecisionP = 'images/circle-ora.png'; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; break; case 'non terminé': $DecisionP = 'images/circle-red.PNG'; break; default: // toute autre valeur... $DecisionP = 'images/circle-blue.PNG'; break; }
Ensuite, tu me confirmes que le code utilisé pour afficher les image est toujours le même que celui que tu nous avais montré ?echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'> <img src='$DecisionP' alt='image'></img> </td> ";
Au cas où .. remontre nous le code COMPLET de ta page.
-
voilà le code complet jordane45
<?php include("db_tools.inc.php") ; function tableau_bord_client($roleU) { $query="SELECT p.Nom_P, p.Date_debut, p.Date_fin, p.Avancement,p.DecisionP FROM projet p , client_projet cp WHERE cp.idCl=". $_SESSION['id_User']. " and p.id_P = cp.idPr " ; $result=db_doquery($query) ; //La balise <table> et la ligne des entêtes sont déjà déclarés dans le script listClients.php. //Nous allons parcourir le resultat et créer les lignes de ce tableau HTML. Il s'agit de créer une chaine de caractère //lui cotient ces les lignes. Cette chaine sera la valeur de retour de cette fonction. $contenu="" ; $chef=(isset($roleU) && $roleU=="terminé")? TRUE : FALSE ; if( @mysql_num_rows($result)==0){ //dans le cas où pas de clients trouvés, une seule ligne qui s'affiche indiquant cette état echo"<tr class=\"notfound\"><td colspan='6'> Aucun étape n'a été trouvé.</td></tr>" ; }else { $i=0 ; while( $row=mysql_fetch_array($result)){ $statut= $row[4]; switch ($statut) { case 'en risque': $DecisionP = 'images/circle-ora.png'; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; break; case 'non terminé': $DecisionP = 'images/circle-red.PNG'; break; default: // toute autre valeur... $DecisionP = 'images/circle-blue.PNG'; break; } echo"<tr>" ; echo "<td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; '>$row[0]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[1]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[2]</td> <td style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'>$row[3]</td> "; echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'> <img src=".$DecisionP." alt='image'></img> </td> "; echo "</tr>" ; $i++ ; } } return $contenu ; } ;
merci :)
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages. -
ModérateurTu as changé le code ?
echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'> <img src=".$DecisionP." alt='image'></img> </td> ";
N'est pas celui que je t'avais donné :echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'> <img src='$DecisionP' alt='image'></img> </td> ";
Tu as oublié de mettre des QUOTES dans ta balises SRC.
A la limite.. si tu veux garder la séparation de ta varible (comme tu as fais dans TON code)
tu peux faire comme ceci :echo"<td align='center' style=' background:#DCDCDC; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc;'> <img src='".$DecisionP."' alt='image'></img> </td> ";
PS : Comme te l'a conseillé Groarch dans son message de ta dernière question https://forums.commentcamarche.net/forum/affich-32096945-rowspan-ne-marche-pas#1
.. fais un peu de ménage dans ton code (principalement au niveau des Styles..)
-
ModérateurJe t'ai demandé de rajouter, dans ton code, du débug sur ta variable :
echo "<br><br> Statut : ".$statut;
.... qu'est ce que ça t'affiche ?????
Es-tu sûr que dans ta BDD .. tu n'aurais pas des espaces en plus par exemple ?
Tu as bien la même syntaxe (Majuscules/minuscules) ??
A la limite, on va supprimer les éventuels espaces superflus pour limiter les risques :$statut= trim($row[4]);
-
ModérateurPourrais tu nous fournir un dump de ta table ?
histoire qu'on sache exactement ce qu'elle contient... et sous quelle forme ?
-
-
Modérateur@Imen Ben Hassenplutôt qu'une IMAGE .. je préfèrerais un DUMP !
ça permet d'avoir la structure + les données .. et ainsi de pouvoir l'importer chez moi pour des tests si besoin. -
@jordane45-- phpMyAdmin SQL Dump
-- version 4.0.4
voilà jordane la table et mrci pour votre d'aide :)))
-- http://www.phpmyadmin.net -
Modérateur@Imen Ben HassenHeuuu..... il manque des lignes ....
Au passage :
**** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
.
-
-
-- phpMyAdmin SQL Dump -- version 4.0.4 -- http://www.phpmyadmin.net -- -- Client: localhost -- Généré le: Jeu 11 Juin 2015 à 13:34 -- Version du serveur: 5.6.12-log -- Version de PHP: 5.4.16 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de données: `gestionrisques` -- -- -------------------------------------------------------- -- -- Structure de la table `projet` -- CREATE TABLE IF NOT EXISTS `projet` ( `id_P` int(11) NOT NULL AUTO_INCREMENT, `Nom_P` varchar(100) NOT NULL, `idM` int(11) NOT NULL, `idRo` int(11) NOT NULL, `Date_debut` date NOT NULL, `Date_fin` date NOT NULL, `Avancement` varchar(10) DEFAULT '0%', `DecisionP` varchar(100) NOT NULL DEFAULT '1', `Date_fin_estime` date DEFAULT NULL, PRIMARY KEY (`id_P`), UNIQUE KEY `Nom_P` (`Nom_P`), KEY `id_M` (`idM`,`idRo`), KEY `idRo` (`idRo`), KEY `idM` (`idM`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1495 ; -- -- Contenu de la table `projet` -- INSERT INTO `projet` (`id_P`, `Nom_P`, `idM`, `idRo`, `Date_debut`, `Date_fin`, `Avancement`, `DecisionP`, `Date_fin_estime`) VALUES (1135, 'projet123', 210, 2, '0000-00-00', '0000-00-00', '0', 'non terminé', '0000-00-00'), (1136, 'projet 2', 210, 2, '2015-05-21', '2015-07-31', '10', 'non terminé', '2016-03-26'), (1139, 'projet de conception et de ', 210, 7, '2015-05-15', '2015-05-31', '10%', 'non terminé', '0000-00-00'), (1236, 'Projet de test ', 210, 2, '2015-05-13', '2015-05-31', '0', 'non terminé', '0000-00-00'), (1363, 'projet de production', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', '0000-00-00'), (1364, 'projet', 227, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1365, 'projet3', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1366, 'projet36', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1367, 'Projet de communication', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1368, 'Projet de communication1', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1369, 'gestionn de workflow', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1370, 'projet de logistique', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1371, 'molprlrkr', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1372, 'projet de developement', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1373, 'projet de traitement de cycle', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1374, 'mpppppp', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1375, 'mppppppù', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1376, 'projet 25639', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1377, 'projet12365', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1378, 'prorojet develo', 210, 2, '0000-00-00', '0000-00-00', '0%', 'non terminé', NULL), (1379, 'prorojet develop', 210, 2, '2015-05-16', '2015-05-31', '0%', 'non terminé', NULL), (1380, 'prorojet develop3', 210, 2, '2015-05-16', '2015-05-31', '0%', 'non terminé', NULL), (1381, 'prorojet ', 210, 2, '2015-05-16', '2015-05-31', '0%', 'non terminé', NULL), (1382, 'prorojet 23', 210, 2, '2015-05-16', '2015-05-31', '0%', 'non terminé', NULL), (1383, 'prorojet 23562', 210, 2, '2015-05-16', '2015-05-31', '0%', 'non terminé', NULL), (1494, 'R&D', 210, 10, '2015-06-18', '2015-06-28', '0%', 'en risque', NULL); -- -- Contraintes pour les tables exportées -- -- -- Contraintes pour la table `projet` -- ALTER TABLE `projet` ADD CONSTRAINT `projet_ibfk_1` FOREIGN KEY (`idM`) REFERENCES `model` (`id_M`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `projet_ibfk_3` FOREIGN KEY (`idRo`) REFERENCES `users` (`id_User`) ON DELETE CASCADE ON UPDATE CASCADE; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
-- phpMyAdmin SQL Dump
-- version 4.0.4
-- https://www.phpmyadmin.net/
EDIT : Ajout du LANGAGE dans les balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci d'y penser dans tes prochains messages.
. -
ModérateurJe viens de tester ... ça fonctionne très bien...
Tu peux essayer ceci :$statut= $row[4]; switch ($statut) { case 'en risque': $DecisionP = 'images/circle-ora.png'; echo " <br>==> EN RISQUE : OK "; break; case 'terminé': $DecisionP = 'images/circle-green.PNG'; echo " <br>==> TERMINTE : OK "; break; case 'non terminé': $DecisionP = 'images/circle-red.PNG'; echo " ==> NON TERMINTE : OK "; break; default: // toute autre valeur... $DecisionP = 'images/circle-blue.PNG'; echo "<br><b> ==> AUTRE VALEUR </b> : " . $statut; break; }
et nos coller le résultat (ce que ça t'affiche) ici ?
-
ModérateurTon fichier est dans quel encodage ?
L'idéal serait d'être en UTF8 sans BOM.
Si tu as notepad++ .. tu ouvres le fichier puis tu regarde dans le menu Encodage ce qui est indiqué ... et tu le changes éventuellement