par
Cyrano » 08 mai 2006, 21:48
Ok, ben au moins là, c'est plus facile à suivre.
Sur la base de ce code, je suggère effectivement de remplacer les boutons radios par des cases à cocher (à moins bien sûr qu'une seule sélection ne soit autorisée.)
Remplace l'attribut name de ta balise form par un attribut id et fais la même chose pour les cases à cocher en ajoutant une petite modification dans le code de génération: il faut que chaque id soir différent : donc ajoute un pointeur et concatène-le avec la valeur de l'atttribut id, ce qui donnera candselect0, candselect1, candselect2, etc..
Avant de passer au javascript, ton code php revu et corrigé :
<?php
/* Le formulaire */
?>
<form id="cdd" action="myac.php?key=$key" method="post">
<?php
/* le haut de la table avec une serie d'image dont celle qui appelle la fonction javascript avec OnClick */
?>
<table width="600" cellspacing="1" cellpadding="0" border="0">
<tr>
<td align="left" width="400" >
<b>Liste de vos candidatures</b>
</td>
<td align="right">
<a href="myaccandnew.php?key=<?php echo($key); ?>" title="Nouvelle candidature"><img src="pic/new.jpg" border="0"></a>
<img src="pic/voir.jpg" border="0" title="Voir la candidature selectionnée" OnClick="visudossiercand()">
<img src="pic/modif.jpg" border="0" title="Modifier la selection" OnClick="nondispo('Modifier la sélection')">
<img src="pic/suppr.jpg" border="0" title="Supprimer la selection" OnClick="nondispo('Supprimer la selection')">
<img src="pic/pdf.jpg" border="0" OnClick="nondispo('Make PDF')">
</td>
</tr>
</table>
<?php
$nom_hote="localhost";
$nom_utilisateur="root";
$password="";
mysql_connect($nom_hote, $nom_utilisateur, $password);
$base=mysql_select_db("wopr");
$demandes=mysql_query("SELECT * FROM candidatures WHERE student='$key' ORDER BY `inscrit` ASC ")or die('Erreur SQL !<br>'.$auto2.'<br>'.mysql_error());
/* (... definition des variables dimention $dim et de la banderole etiquettes du tableau...) */
/* Les lignes contenant les dossiers a visualiser dans le popup */
?>
<table width="600" cellspacing="1" cellpadding="0" border="0">
<?php
$contcandid=0;
$i = 0;
while ($lign=mysql_fetch_object($demandes))
{
$idcand = $lign->ID;
$programme = $lign->programme;
$pays1 = $lign->pays1;
$pays2 = $lign->pays2;
$pays3 = $lign->pays3;
$du = $lign->datedebut;
$au = $lign->datefin;
$motiv = $lign->motivation;
$statut = $lign->statut;
?>
<tr bgcolor="<?php echo($colortabcase1); ?>" OnMouseOver="bgColor='<?php echo($colortabcase2); ?>'" OnMouseOut="bgColor='<?php echo($colortabcase1); ?>'">
<td align="center" width="<?php echo($dimprog); ?>"><font class="tab"><b><?php echo($programme); ?></b></font></td>
<td width="<?php echo($dimpays); ?>"><font class="tab">1 : <?php echo($pays1); ?><br>2 : <?php echo($pays2); ?><br>3 : <?php echo($pays3); ?></font></td>
<td width="<?php echo($dimduau); ?>" align="center"><font class="tab">Du <?php echo($du); ?><br>Au $au</font></td>
<td width="<?php echo($dimmotiv); ?>" align="center"><font class="tab"><img src="pic/motiv.jpg" border="0" OnClick="visumotiv('<?php echo($idcand); ?>')"></font></td>
<td width="<?php echo($dimstatut); ?>" align="center"><font class="tab"><?php echo($statut); ?></font></td>
<td width="<?php echo($dimcheck); ?>" align="center"><input id="candselect<?php echo($i); ?>" type="checkbox" value="<?php echo($idcand); ?>"></td>
</tr>
<?php
$contcandid=$contcandid+1;
}
if ($contcandid==0)
{
?>
<tr>
<td align="left">Aucune candidature enregistrée</td>
</tr>
<?php
}
?>
</table>
</form>
Pour la JavaScript maintenant : là, ça va être plus facile: ton formulaire n'a pas d'autres éléments que ces cases à cocher, donc au lieu de compter ces éléments là, compte les éléments du formulaire. Si tu dois rajouter d'autres éléments, boutons ou autres, il faudra en tenir compte dans la définition de ta variable nombre de cases et les décompter.
Ensuite, on va modifier le code comme ceci:
function visudossiercand()
{
var pas = 0;
var dossier;
var cdd = document.forms['cdd'];
var nbcase = document.forms['cdd'].length;
var wPopup;
for (var i = 0; i < nbcase; i++)
{
var select = 'candselect'+ i;
var idcase = cdd.elements[select];
if (idcase.checked)
{
dossier = idcase.value;
pas += 1;
}
}
if (pas == 0)
{
alert("Aucune case selectionnée");
}
else
{
wPopup = window.open('candidature.php' + '?idcand=' + dossier, 'img_popup', 'width=400, height=300, top='+(screen.height-50)/3+', left='+(screen.width-50)/3+', status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, resizable=yes');
wPopup.document.close();
}
}
Attention, j'insiste sur un point : ce code fonctionnera si tu remplace bien les "name" par des "id" dans les balises form et input.
Enfin, je te signale aussi qu'au lien de trois tables, tu pourrais n'en faire qu'une seule histoire d'optimiser un peu tout ça.
Ok, ben au moins là, c'est plus facile à suivre.
Sur la base de ce code, je suggère effectivement de remplacer les boutons radios par des cases à cocher (à moins bien sûr qu'une seule sélection ne soit autorisée.)
Remplace l'attribut name de ta balise form par un attribut id et fais la même chose pour les cases à cocher en ajoutant une petite modification dans le code de génération: il faut que chaque id soir différent : donc ajoute un pointeur et concatène-le avec la valeur de l'atttribut id, ce qui donnera candselect0, candselect1, candselect2, etc..
Avant de passer au javascript, ton code php revu et corrigé :
[php]<?php
/* Le formulaire */
?>
<form id="cdd" action="myac.php?key=$key" method="post">
<?php
/* le haut de la table avec une serie d'image dont celle qui appelle la fonction javascript avec OnClick */
?>
<table width="600" cellspacing="1" cellpadding="0" border="0">
<tr>
<td align="left" width="400" >
<b>Liste de vos candidatures</b>
</td>
<td align="right">
<a href="myaccandnew.php?key=<?php echo($key); ?>" title="Nouvelle candidature"><img src="pic/new.jpg" border="0"></a>
<img src="pic/voir.jpg" border="0" title="Voir la candidature selectionnée" OnClick="visudossiercand()">
<img src="pic/modif.jpg" border="0" title="Modifier la selection" OnClick="nondispo('Modifier la sélection')">
<img src="pic/suppr.jpg" border="0" title="Supprimer la selection" OnClick="nondispo('Supprimer la selection')">
<img src="pic/pdf.jpg" border="0" OnClick="nondispo('Make PDF')">
</td>
</tr>
</table>
<?php
$nom_hote="localhost";
$nom_utilisateur="root";
$password="";
mysql_connect($nom_hote, $nom_utilisateur, $password);
$base=mysql_select_db("wopr");
$demandes=mysql_query("SELECT * FROM candidatures WHERE student='$key' ORDER BY `inscrit` ASC ")or die('Erreur SQL !<br>'.$auto2.'<br>'.mysql_error());
/* (... definition des variables dimention $dim et de la banderole etiquettes du tableau...) */
/* Les lignes contenant les dossiers a visualiser dans le popup */
?>
<table width="600" cellspacing="1" cellpadding="0" border="0">
<?php
$contcandid=0;
$i = 0;
while ($lign=mysql_fetch_object($demandes))
{
$idcand = $lign->ID;
$programme = $lign->programme;
$pays1 = $lign->pays1;
$pays2 = $lign->pays2;
$pays3 = $lign->pays3;
$du = $lign->datedebut;
$au = $lign->datefin;
$motiv = $lign->motivation;
$statut = $lign->statut;
?>
<tr bgcolor="<?php echo($colortabcase1); ?>" OnMouseOver="bgColor='<?php echo($colortabcase2); ?>'" OnMouseOut="bgColor='<?php echo($colortabcase1); ?>'">
<td align="center" width="<?php echo($dimprog); ?>"><font class="tab"><b><?php echo($programme); ?></b></font></td>
<td width="<?php echo($dimpays); ?>"><font class="tab">1 : <?php echo($pays1); ?><br>2 : <?php echo($pays2); ?><br>3 : <?php echo($pays3); ?></font></td>
<td width="<?php echo($dimduau); ?>" align="center"><font class="tab">Du <?php echo($du); ?><br>Au $au</font></td>
<td width="<?php echo($dimmotiv); ?>" align="center"><font class="tab"><img src="pic/motiv.jpg" border="0" OnClick="visumotiv('<?php echo($idcand); ?>')"></font></td>
<td width="<?php echo($dimstatut); ?>" align="center"><font class="tab"><?php echo($statut); ?></font></td>
<td width="<?php echo($dimcheck); ?>" align="center"><input id="candselect<?php echo($i); ?>" type="checkbox" value="<?php echo($idcand); ?>"></td>
</tr>
<?php
$contcandid=$contcandid+1;
}
if ($contcandid==0)
{
?>
<tr>
<td align="left">Aucune candidature enregistrée</td>
</tr>
<?php
}
?>
</table>
</form>[/php]
Pour la JavaScript maintenant : là, ça va être plus facile: ton formulaire n'a pas d'autres éléments que ces cases à cocher, donc au lieu de compter ces éléments là, compte les éléments du formulaire. Si tu dois rajouter d'autres éléments, boutons ou autres, il faudra en tenir compte dans la définition de ta variable nombre de cases et les décompter.
Ensuite, on va modifier le code comme ceci:
[php]function visudossiercand()
{
var pas = 0;
var dossier;
var cdd = document.forms['cdd'];
var nbcase = document.forms['cdd'].length;
var wPopup;
for (var i = 0; i < nbcase; i++)
{
var select = 'candselect'+ i;
var idcase = cdd.elements[select];
if (idcase.checked)
{
dossier = idcase.value;
pas += 1;
}
}
if (pas == 0)
{
alert("Aucune case selectionnée");
}
else
{
wPopup = window.open('candidature.php' + '?idcand=' + dossier, 'img_popup', 'width=400, height=300, top='+(screen.height-50)/3+', left='+(screen.width-50)/3+', status=no, directories=no, toolbar=no, location=no, menubar=no, scrollbars=yes, resizable=yes');
wPopup.document.close();
}
}[/php]
Attention, j'insiste sur un point : ce code fonctionnera si tu remplace bien les "name" par des "id" dans les balises form et input.
Enfin, je te signale aussi qu'au lien de trois tables, tu pourrais n'en faire qu'une seule histoire d'optimiser un peu tout ça.