Rowspan ne marche pas
Résolu/Fermé
Imen Ben Hassen
-
Modifié par jordane45 le 11/06/2015 à 14:30
imenbenhassen Messages postés 11 Date d'inscription mardi 16 juin 2015 Statut Membre Dernière intervention 3 novembre 2016 - 17 juin 2015 à 15:03
imenbenhassen Messages postés 11 Date d'inscription mardi 16 juin 2015 Statut Membre Dernière intervention 3 novembre 2016 - 17 juin 2015 à 15:03
2 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
Modifié par Groarh le 11/06/2015 à 14:26
Modifié par Groarh le 11/06/2015 à 14:26
Il y a beaucoup de problèmes dans ce code :/
Il y en a trois que je peux à peux près t'expliquer.
1. Ta boucle while se termine trop tôt. Je prends un extrait de ton code :
À chaque tour, la variable $date_debutE est écrasée par la nouvelle valeur $row[3]. S'il y a 100 résultats de requêtes, à la fin de la boucle while, la variable $date_debutE aura la valeur du 100e $row[3], et les 99 autres valeurs auront été oubliées.
Je vois que tu as essayé de corriger le problème en créant un tableau $people, mais ça t'oblige à utiliser des boucles foreach par la suite et ça te complique la vie :)
La solution c'est de faire tous tes traitements dans le corps de la boucle while. Plus besoin de $people et plus besoin de foreach.
2. Problème de logique dans ta boucle foreach. Si tu suis mes conseils, tu vas retirer cette boucle, mais je t'explique quand même le problème pour t'aider à avancer ;)
Le problème c'est que tu rappelles count($nom_Ta) à chaque tour de la boucle foreach, et dans cette même boucle tu fais array_shift($nom_Ta) qui diminue de 1 la longueur du tableau.
Donc, à chaque tour, count retourne 1 de moins, et tes rowspan sont de plus en plus petits. Mets le count de départ dans une variable avant la boucle et tu n'auras plus ce problème.
3. Beaucoup de répétitions, en particulier les styles ! Ce n'est pas un bug à proprement parler, mais ça rend le code difficile à travailler. Mets des id ou des classes sur tes balises, et place tes styles à l'extérieur, dans une balise <style> ou une feuille de styles externe.
J'ai fait l'effort de regarder ton code qui est encombré de styles CSS redondants. En contrepartie, j'aimerais que tu fasses toi aussi un effort et que tu nettoies ton code :) Comme ça, si jamais un jour tu as un nouveau problème, ça rendra service aux gens qui essayeront de t'aider !
Il y en a trois que je peux à peux près t'expliquer.
1. Ta boucle while se termine trop tôt. Je prends un extrait de ton code :
while ($row = mysql_fetch_array($result)) {
$date_debutE = $row[3];
...
}
À chaque tour, la variable $date_debutE est écrasée par la nouvelle valeur $row[3]. S'il y a 100 résultats de requêtes, à la fin de la boucle while, la variable $date_debutE aura la valeur du 100e $row[3], et les 99 autres valeurs auront été oubliées.
Je vois que tu as essayé de corriger le problème en créant un tableau $people, mais ça t'oblige à utiliser des boucles foreach par la suite et ça te complique la vie :)
La solution c'est de faire tous tes traitements dans le corps de la boucle while. Plus besoin de $people et plus besoin de foreach.
2. Problème de logique dans ta boucle foreach. Si tu suis mes conseils, tu vas retirer cette boucle, mais je t'explique quand même le problème pour t'aider à avancer ;)
Le problème c'est que tu rappelles count($nom_Ta) à chaque tour de la boucle foreach, et dans cette même boucle tu fais array_shift($nom_Ta) qui diminue de 1 la longueur du tableau.
Donc, à chaque tour, count retourne 1 de moins, et tes rowspan sont de plus en plus petits. Mets le count de départ dans une variable avant la boucle et tu n'auras plus ce problème.
3. Beaucoup de répétitions, en particulier les styles ! Ce n'est pas un bug à proprement parler, mais ça rend le code difficile à travailler. Mets des id ou des classes sur tes balises, et place tes styles à l'extérieur, dans une balise <style> ou une feuille de styles externe.
J'ai fait l'effort de regarder ton code qui est encombré de styles CSS redondants. En contrepartie, j'aimerais que tu fasses toi aussi un effort et que tu nettoies ton code :) Comme ça, si jamais un jour tu as un nouveau problème, ça rendra service aux gens qui essayeront de t'aider !
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
Modifié par Groarh le 13/06/2015 à 03:06
Modifié par Groarh le 13/06/2015 à 03:06
Bravo pour tes efforts, c'est beaucoup mieux :D
Si je ne dis pas de conneries, toutes les données qui sortent d'une requête MySQL sont de type chaîne, donc $nom_Ta n'est sans doute pas un tableau comme tu t'y attends.
Passées à la fonction count, les chaînes sont mystérieusement converties en je ne sais quoi et le résultat est toujours 1. C'est aussi étrange qu'inutile... >_<
En fait, que veux-tu faire avec cette donnée $nom_Ta ? Qu'est-elle censée représenter ? J'aimerais bien voir à quoi ressemble une ligne de résultat de ta requête SQL (fais une capture d'écran sur ton PHPMyAdmin par exemple) pour pouvoir t'aider.
Si je ne dis pas de conneries, toutes les données qui sortent d'une requête MySQL sont de type chaîne, donc $nom_Ta n'est sans doute pas un tableau comme tu t'y attends.
Passées à la fonction count, les chaînes sont mystérieusement converties en je ne sais quoi et le résultat est toujours 1. C'est aussi étrange qu'inutile... >_<
En fait, que veux-tu faire avec cette donnée $nom_Ta ? Qu'est-elle censée représenter ? J'aimerais bien voir à quoi ressemble une ligne de résultat de ta requête SQL (fais une capture d'écran sur ton PHPMyAdmin par exemple) pour pouvoir t'aider.
Bonsoir Groarch ,
Désolé pour le retard,
d'abord dans mon PFE j'ai une gestion des projets , chaque projet a des étapes et des tâches , chaque étapes a des tâches .Ce que je veux est d'éliminer les répétitions de nom et les données de l'étapes à chaque ligne qui contient le nom de tâche.Par exemple
etape 1 a 4 taches :tache1 tache 2 tache3 tache4
dans l'affichage je ne veux pas affihcher comme ça:
etape1 23-06-2015 29-07-2015 non termine tache1
etape1 23-06-2015 29-07-2015 non termine tache2
etape1 23-06-2015 29-07-2015 non termine tache3
etape1 23-06-2015 29-07-2015 non termine tache4
MAIS je veux afficher comme ça:
etape1 23-06-2015 29-07-2015 non termine tache1
tache2
tache3
tache4
Merci de m'aider s'il vaut plait Groarch.
Désolé pour le retard,
d'abord dans mon PFE j'ai une gestion des projets , chaque projet a des étapes et des tâches , chaque étapes a des tâches .Ce que je veux est d'éliminer les répétitions de nom et les données de l'étapes à chaque ligne qui contient le nom de tâche.Par exemple
etape 1 a 4 taches :tache1 tache 2 tache3 tache4
dans l'affichage je ne veux pas affihcher comme ça:
etape1 23-06-2015 29-07-2015 non termine tache1
etape1 23-06-2015 29-07-2015 non termine tache2
etape1 23-06-2015 29-07-2015 non termine tache3
etape1 23-06-2015 29-07-2015 non termine tache4
MAIS je veux afficher comme ça:
etape1 23-06-2015 29-07-2015 non termine tache1
tache2
tache3
tache4
Merci de m'aider s'il vaut plait Groarch.
Bonjour Groarch,
voilà mon code :
Je trouve des problèmes dans l'affichage des tâches :( dans les colonnes de "Taches" les données des étapes sont affichées avec les tâches :(
Ps:je veux postuler un capture écran mais il n'est pas accepté dans votre forum :/ :/ pour vous mieux me comprenez.
Merci beaucoup de m'aider
voilà mon code :
<?php
// On démarre la session (ceci est indispensable dans toutes les pages
// du site accessible une fois la session est validé)
session_start ();
?>
<?php
include("db_tools.inc.php") ;
function list_all_donnees_TableauB($roleU) {
$id = $_GET["succes"];
$query="select * from Etape E, Tache T
where (E.idP = $id)
and
(T.idE=E.id_E)" ;
$result=db_doquery($query);
while(( $row=mysql_fetch_array($result)))
{
$Nom_Et=$row[1];
$date_debutE=$row[3];
$date_FinE=$row[4];
$DecisionE=$row[5];
$AvancementE=$row[6];
$Date_fin_estimeE=$row[7];
$Nom_Ta=$row[10];
$date_debutT=$row[12];
$date_FinT=$row[13];
$Decision=$row[14];
$query1="SELECT COUNT( T.Nom_Ta )
FROM Tache T
WHERE (
T.idE =$row[0]
)";
$result1=db_doquery($query1);
while($row1=mysql_fetch_array($result1)){
//$query1="select * from Etape E, Tache T
//where (E.idP = $id)and T.idE=E.id_E)" ;
//$result=db_doquery($query);
$statut= $row['DecisionE'];
switch ($statut) {
case 'non terminee':
$DecisionP = 'images/circle-red.png';
break;
case 'termine':
$DecisionP = 'images/circle-green.PNG';
break;
case 'en cours':
$DecisionP = 'images/circle-blue.PNG';
break;
default:
// toute autre valeur...
$DecisionP = 'images/circle-ora.PNG';
//Le temps des tests
break;
}
echo "<tr>";
echo "<td rowspan=\"".$row1[0]."\">".$Nom_Et."</td>";
echo "<td rowspan=\"".$row1[0]."\">".$date_debutE."</td>";
echo "<td rowspan=\"".$row1[0]."\">".$date_FinE."</td>";
echo"<td align='center' rowspan=\"".$row1[0]."\">
<img src='$DecisionP' alt='image'></img>
</td>
";
echo "<td rowspan=\"".$row1[0]."\">".$AvancementE."</td>";
echo "<td rowspan=\"".$row1[0]."\">".$Date_fin_estimeE."</td>";
}
echo "<td>".$Nom_Ta."</td>";
echo "<td>".$date_debutT."</td>";
echo "<td>".$date_FinT."</td>";
echo "<td>".$Decision."</td>";
echo "<td></td>";
echo "<td></td>";
echo "<td></td>";
echo "</tr>";
}
}
?>
<html>
<head>
<title>Tableau de bord </title>
<link rel="shortcut icon" href="images/projet.jpg" type="image/x-icon" />
<link href="css/main_css.css" rel="stylesheet" type="text/css">
<link href="css/table_style.css" rel="stylesheet" type="text/css">
<link href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/themes/smoothness/jquery-ui.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.3/jquery-ui.min.js"></script>
</head>
<body>
<?php
//on affiche la page si seulement l'utilisateur est bien authentifié donc son login existe dans la session_cache_expire
if (isset($_SESSION['loginU']) && !empty($_SESSION['loginU'])) {
?>
<div class='main'>
<?php
echo "<a style=' align:left_left;color:teal;font-weight:teal;text-decoration:none;font-family: Garamond,
serif;line-height:1em;font-weight:teal;font-size:20px;
text-shadow:0px 0px 0 rgb(200,200,200),1px 1px 0 rgb(216,216,216),2px 2px 0
rgb(202,202,202),3px 3px 0 rgb(187,187,187),4px 4px 0 rgb(173,173,173),5px 5px 0 rgb(158,158,158), 6px 6px 0 rgb(144,144,144),7px 7px 6px rgba(0,0,0,0.6),
7px 7px 1px rgba(0,0,0,0.5),0px 0px 6px rgba(0,0,0,.2);' href='#'> Bienvenu ". $_SESSION['nomU']. " ". $_SESSION['prenomU']. " </a>" ;
?>
<h1 align="center">
<div style="width:1140px;margin:0 auto;margin-top:0px;margin-bottom:20px;"><!-- #wrapper -->
<header style="padding:20px 0 0 0; height:75px; background:#97DFC6;"><!-- header -->
<h1 align="left" style="float:left;margin:0 0 18px 10px;width:800px;font-size:50px;line-height:36px;">
<a style=" align:left;color:teal;font-weight:teal;text-decoration:none;font-family: Garamond,
serif;line-height:1em;font-weight:teal; font-size:50px;
text-shadow:0px 0px 0 rgb(200,200,200),1px 1px 0 rgb(216,216,216),2px 2px 0
rgb(202,202,202),3px 3px 0 rgb(187,187,187),4px 4px 0 rgb(173,173,173),5px 5px 0 rgb(158,158,158), 6px 6px 0 rgb(144,144,144),7px 7px 6px rgba(0,0,0,0.6),
7px 7px 1px rgba(0,0,0,0.5),0px 0px 6px rgba(0,0,0,.2);" href="#">Tableau de bord</a></h1>
<h1 align="left" style="color:teal;clear:right;float:right;font-size:14px;margin:14px 10px 18px 0;">
<a style=" align:left_left;color:teal;font-weight:teal;text-decoration:none;font-family: Garamond,
serif;line-height:1em;font-weight:teal;font-size:35px;
text-shadow:0px 0px 0 rgb(200,200,200),1px 1px 0 rgb(216,216,216),2px 2px 0
rgb(202,202,202),3px 3px 0 rgb(187,187,187),4px 4px 0 rgb(173,173,173),5px 5px 0 rgb(158,158,158), 6px 6px 0 rgb(144,144,144),7px 7px 6px rgba(0,0,0,0.6),
7px 7px 1px rgba(0,0,0,0.5),0px 0px 6px rgba(0,0,0,.2);" href="#">Espace chef de projet</a>
</h1>
</header>
</div>
</h1>
<!-- lien vers la page d'accueil dans notre cas index.php -->
<a href="listProjets.php" align="left"><img src="images/big_home.png"/></a>
<!-- déconnexion et retour vers index.php -->
<a href="logout1.php" align="left"><img src="images/logout.jpg"/></a>
<br/>
<table class="customers">
<tr>
<TH colspan="6" style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white"><center>Etapes</center>
<TH colspan="7" style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white"><center>Tâches </center>
<tr>
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Nom d'étape
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white"> Date de début d'étape
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Date de fin d'étape
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Statut
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white"> Avancement de l'étape
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Date de fin estimée d'étape
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Nom de tâche
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white"> Date de début de tâche
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Date de fin de tâche
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Action
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white"> Avancement de tâche
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Date de fin estimée de tâche
<th style="background:teal; padding:5px; border-left:1px solid #ccc; border-top:1px solid #ccc; color:white">Statut
<?php
//le rôle de l'utilisateur est passé en paramètre pour savoir s'il a le droit d'ajouter
//et modifier ou non
$contenu = list_all_donnees_TableauB($_SESSION['roleU']) ;
//affiche le tableau
echo $contenu ;
echo "</table > <br/> <br/>" ;
//cas des erreurs envoyés dans l'url
if(isset($_GET["error"]) && !empty($_GET["error"])){
$error= $_GET["error"] ;
echo "<div class=\"error\"><img src=\"images/error32.gif\"/>
<p>$error</p>
</div>" ;
}
?>
</div>
<?php } else {
//le cas l'utilisateur n'est pas connecté, donc son login n'est pas dans la session
echo "<div class=\"error\"><img src=\"images/error32.gif\"/>
<p>Accès interdit. Vous devez vous authentifier <a href='index1.php'>Ici</a>.</p>
</div>" ;
}?>
<div class="foot">
<p>Copyright Laboratoire G-SCOP 2015.</p>
</div>
<script>
$(document).ready(function() {
var span = 1;
var prevTD = "";
var prevTDVal = "";
$("#myTable tr td:first-child").each(function() { //for each first td in every tr
var $this = $(this);
if ($this.text() == prevTDVal) { // check value of previous td text
span++;
if (prevTD != "") {
prevTD.attr("rowspan", span); // add attribute to previous td
$this REMOVE(); // remove current td
}
} else {
prevTD = $this; // store current td
prevTDVal = $this.text();
span = 1;
}
});
});
</script>
</body>
</html>
Je trouve des problèmes dans l'affichage des tâches :( dans les colonnes de "Taches" les données des étapes sont affichées avec les tâches :(
Ps:je veux postuler un capture écran mais il n'est pas accepté dans votre forum :/ :/ pour vous mieux me comprenez.
Merci beaucoup de m'aider
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
Modifié par Groarh le 15/06/2015 à 21:19
Modifié par Groarh le 15/06/2015 à 21:19
Aaaaaaah je crois que j'ai enfin vraiment saisi ton problème !
Et je crois que j'ai une solution miracle :D
Essaye ça :
Avec ça tu as un nouveau champ dans ton jeu de résultats ($row) qui te donne le nombre d'étapes identiques par rapport à une même tâche. Tu devrais pouvoir t'en servir directement comme rowspan.
Et je crois que j'ai une solution miracle :D
Essaye ça :
$query = "SELECT *, COUNT(*) FROM Etape E, Tache T WHERE (E.idP = $id) AND (T.idE = E.id_E) GROUP BY E.id_E";
Avec ça tu as un nouveau champ dans ton jeu de résultats ($row) qui te donne le nombre d'étapes identiques par rapport à une même tâche. Tu devrais pouvoir t'en servir directement comme rowspan.
imen ben hassen
>
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
15 juin 2015 à 21:42
15 juin 2015 à 21:42
Bonsoir Groach ,
merci :))
mais il prend seulement le 1ere tâche de chaque étapes :(
merci :))
mais il prend seulement le 1ere tâche de chaque étapes :(
11 juin 2015 à 14:39
je vais essayer de nettoyer mon code et d'utiliser vos remarques .
bonne journée :)
12 juin 2015 à 13:41
quand j'ai éliminé les deux foreach et inclue toutes les traitements dans la boucle while le rowspan=count(Nom_Ta) ne marche pas et j'aurai un tableau comme dans la base de données contient tous les informations sans les bien affichées
Merci de me répondre
12 juin 2015 à 13:49