Tableau dynamique et couleur des lignes

Résolu
cs_jumano Messages postés 64 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 29 février 2008 - 24 mars 2007 à 13:01
Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012 - 25 mars 2007 à 22:12
Bonjour,
Débutant en PHP Je travaille actuellement sur l'élaboration d'une petite application WEB de gestion de courriers ARRIVES et DEPARTS.
J'ai une BDD avec les tables suivantes :
Une table : courrierar



PHP:
,

----

CREATE TABLE 
`
courrierar
` (
  `
ID_COURAR

bigint
(
20

NOT NULL auto_increment
,
  `
NUMAR

bigint
(
20

NOT NULL
,
  `
ANNEEAR

year
(
4

NOT NULL
,
  `
ID_TYPE

int
(
11

NOT NULL
,
  `
ID_NATURE

int
(
11

NOT NULL
,
  `
DATECOURAR

date NOT NULL
,
  `
REFCOURAR

text NOT NULL
,
  `
ENRCOURAR

date NOT NULL
,
  `
ID_CLASSEMENT

int
(
11

NOT NULL
,
  `
ID_SOUSCLASS1

int
(
11
) default 
NULL
,
  `
ID_SOUSCLASS2

int
(
11
) default 
NULL
,
  `
OBJET

text NOT NULL
,
  `
ID_EMETTEUR

int
(
11

NOT NULL
,
  `
FICJOINTAR

varchar
(
100
) default 
NULL
,
  `
STATAFF

char
(
3
) default 
'NON'
,
  `
COUR_TOUS

varchar
(
3

NOT NULL 
default 
'NON'
,
  `
NOM_UTIL

varchar
(
50

NOT NULL
,
  `
DATE_MODIF

date NOT NULL
,
  `
CLOTURE

varchar
(
3

NOT NULL 
default 
'NON'
,
  
PRIMARY KEY  
(`
ID_COURAR
`)

ENGINE
=
InnoDB 
DEFAULT 
CHARSET
=
latin1 AUTO_INCREMENT
=
33 
;





Puis une table : affectation


PHP:
,

----

CREATE TABLE 
`
affectation
` (
  `
ID_AFFECT

bigint
(
20

NOT NULL auto_increment
,
  `
DATE_AFFECT

date NOT NULL
,
  `
ID_COURAR

bigint
(
20
) default 
NULL
,
  `
NOM_UTIL

varchar
(
50

NOT NULL
,
  `
OBSAFFECT

text
,
  `
ID_BUREAUACT

bigint
(
20
) default 
NULL
,
  `
ID_BUREAUINF

bigint
(
20
) default 
NULL
,
  
PRIMARY KEY  
(`
ID_AFFECT
`)

ENGINE
=
InnoDB 
DEFAULT 
CHARSET
=
latin1 AUTO_INCREMENT
=
174 
;





Et une table : vuaffectation


PHP:
,

----

CREATE TABLE 
`
vuaffectation
` (
  `
ID_VUAFFECT

bigint
(
20

NOT NULL auto_increment
,
  `
ID_COURAR

bigint
(
20

NOT NULL
,
  `
ID_BUREAUACT

int
(
11
) default 
NULL
,
  `
ID_BUREAUINF

int
(
11
) default 
NULL
,
  `
NOM_UTIL

varchar
(
50

NOT NULL
,
  
PRIMARY KEY  
(`
ID_VUAFFECT
`)

ENGINE
=
InnoDB 
DEFAULT 
CHARSET
=
latin1 AUTO_INCREMENT
=

;





Ma première table se remplie à l'aide d'un formulaire d'enregistrement d'un courrier ARRIVE.
Ma deuxième table me sert a affecté le courrier enregistré.

Lorsque l'utilisateur se connecte il arrive sur une première page où je créé un tableau dynamique (zone répétée) en fonction du nombre d'enregistrement lui ayant été affecté et en fonction de la date d'enregistrement, ici en l'occurence l'utilisateur a un statut lui permettant de voir tout le courrier si le champs "cour_tous" de la table "courrierar" est "oui".
Ma requete SQL est la suivante :



PHP:
,

----

<?php
$colname_rsCourrier 

"-1"
;
if (isset(
$dateUS
)) {
  
$colname_rsCourrier 
= (
get_magic_quotes_gpc
()) ? 
$dateUS 

addslashes
(
$dateUS
);
}

mysql_select_db
(
$database_CnxCourrier

$CnxCourrier
);

$query_rsCourrier 

sprintf
(
"SELECT ID_COURAR, NUMAR, ANNEEAR, ENRCOURAR, OBJET, STATAFF, COUR_TOUS, emetteur.ID_EMETTEUR, emetteur.EMETTEUR, courrierar.ID_EMETTEUR FROM courrierar, emetteur WHERE ENRCOURAR='%s' AND courrierar.COUR_TOUS='OUI' AND emetteur.ID_EMETTEUR=courrierar.ID_EMETTEUR ORDER BY ID_COURAR DESC"

$colname_rsCourrier
);

$query_limit_rsCourrier 

sprintf
(
"%s LIMIT %d, %d"

$query_rsCourrier

$startRow_rsCourrier

$maxRows_rsCourrier
);

$rsCourrier 

mysql_query
(
$query_limit_rsCourrier

$CnxCourrier
) or die(
mysql_error
());

$row_rsCourrier 

mysql_fetch_assoc
(
$rsCourrier
);

?>





Mon code est le suivant pour afficher mon tableau :



Code:
,

----

<table width="560" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#333333" background="images/bgtbl.gif">
----,
N&deg;
</td>
Date,
Objet,
Emetteur,
Lu,

<?php do { ?>
<?php
// Création de la variable $enrcourar
$enrcourar = $row_rsCourrier['ENRCOURAR'];
 
// coupe la date
$annee = substr($enrcourar,0,4);
$mois = substr($enrcourar,5,2);
$jour = substr($enrcourar,8,2);
 
// on regroupe les élements et on créé la variable $enrcourar_FR
$enrcourar1_FR = $jour.\"-\".$mois.\"-\".$annee ;
?>
 
----

"><?php echo $row_rsCourrier['NUMAR']; ?>/<?php echo $row_rsCourrier['ANNEEAR']; ?>,
<?php echo "$enrcourar_FR"; ?>,
<?php echo $row_rsCourrier['OBJET']; ?>,
<?php echo $row_rsCourrier['EMETTEUR']; ?>,

<?php } while ($row_rsCourrier = mysql_fetch_assoc($rsCourrier)); ?>




</td>
</tr>
</tbody>
</table>




Sur chaque ligne créée j'ai un lien hypertext qui renvoir vers une page qui permet de voir le detail du courrier arrivé.
Lorsque l'on clic sur ce lien je remplis les champs de ma table "vuaffectation".

Ce que je cherche à obtenir (comme les liens hypertexts redeviennent non visités après une purge de l'historique et des fichiers temps du navigateur), c'est de faire une requete SQL me permettant de savoir si le lien a déjà été visité (d'où la création de ma table "vuaffectation").
J'ai donc créé la requete suivante :



PHP:
,

----

<?php
$colname_rsVuAffectationINF 

"-1"
;
if (isset(
$row_rsCourOfficier
[
'ID_COURAR'
])) {
  
$colname_rsVuAffectationINF 
= (
get_magic_quotes_gpc
()) ? 
$row_rsCourrier
[
'ID_COURAR'
] : 
addslashes
(
$row_rsCourrier
[
'ID_COURAR'
]);
}

mysql_select_db
(
$database_CnxCourrier

$CnxCourrier
);

$query_rsVuAffectationINF 

sprintf
(
"SELECT ID_COURAR, ID_BUREAUINF, NOM_UTIL FROM vuaffectation WHERE ID_COURAR = '%s'"

$colname_rsVuAffectationINF
);

$rsVuAffectationINF 

mysql_query
(
$query_rsVuAffectationINF

$CnxCourrier
) or die(
mysql_error
());

$row_rsVuAffectationINF 

mysql_fetch_assoc
(
$rsVuAffectationINF
);

$totalRows_rsVuAffectationINF 

mysql_num_rows
(
$rsVuAffectationINF
);

?>





J'ai également créé deux class dans mon fichier CSS, une "ligne" et l'autre "ligneV".
Mon code pour afficher le tableau devient alors :



Code:
,

----

<?php
if ($totalRows_rsVuAffectationINF == 0 ){
$ligne = "ligne";
}
?>
<?php
if ($totalRows_rsVuAffectationINF > 0 ){
$ligne = "ligneV";
}   
?>
----
">,
\"><?php echo $row_rsCourrier['NUMAR']; ?><?php echo $row_rsCourrier['ANNEEAR']; ?>
</td>
<?php echo "$enrcourar_FR"; ?>,
<?php echo $row_rsCourrier['OBJET']; ?>,
<?php echo $row_rsCourrier['EMETTEUR']; ?>,

<?php } while ($row_rsCourrier = mysql_fetch_assoc($rsCourrier)); ?>




</td>
</tr>
</tbody>
</table>




Donc lorque le lien d'une ligne a été sélectionné la ligne prend la class "ligneV" sinon elle prend la class "ligne".
Jusque là tout fonctionne à merveille, mais le gros problème est que si une de mes lignes a été sélectionnée, toutes les lignes apparaissent comme sélectionnées.
Je pense que cela vient de ma requete "$query_rsVuAffectationINF".

Voilà, si quelqu'un avait une idée ou une astuce.
Merci de vos conseils.
PS : je ne suis pas un puriste au niveau du code PHP (et oui j'utilise Dreamweaver, désolé).)

19 réponses

Mastronic Messages postés 94 Date d'inscription lundi 8 août 2005 Statut Membre Dernière intervention 13 juin 2012
25 mars 2007 à 17:54
Tu as bien mis ta requete Select.., et tes tests 'if ($totalRows_rsVuAffectationINF == 0 ){ ...  '  dans la boucle Do..While ?
ou ta requete est placé avant la boucle?  se qui expliquerais que tu aurais toujours la meme valeur "totalRows_rsVuAffectationINF" une fois dans la boucle...

Met un autre debug:    apres ton sprintf pour former ta requete.     echo "Req=[$query_rsVuAffectationINF]";   
et aussi $totalRows_rsVuAffectationINF l'avoir recuperer.. :   echo "NbLine=[$totalRows_rsVuAffectationINF]"
3
Rejoignez-nous