par
leakcim51 » 04 juil. 2006, 17:20
Victory!
J'ai enfin réussi à faire ce que je voulais.
L'idée est peut être pas la plus simple mais ça marche... donc tant que ça marche on touche plus
Sinon voici la démarche que j'ai utilisé si jamais ça interesse certains:
Au début de mon fichier, je sélectionne toutes les dates de fin que je décompose en jour, mois et année.
$query3 = "SELECT task_id, DATE_FORMAT(end_date,'%e') as start_day, DATE_FORMAT(end_date,'%c') as start_month, ".
"DATE_FORMAT(end_date,'%Y') as start_year FROM $TASK_TABLE WHERE proj_id=".$proj_id." ORDER BY task_id";
Je stocke le résultats dans un tableau multidimension.
$tab_task = array();
list ($qh3,$num3) = dbQuery($query3);
if ($num3>0)
{
while ($data3 = dbResult($qh3))
{
$tab_task[$data3["task_id"]] = array($data3["start_day"],$data3["start_month"] , $data3["start_year"]);
}
}
Puis j'ai créer une fonction qui va mettre le tableau dans une chaîne de caractère.
function creer_chaine($tableau)
{
$chaine = "";
foreach ($tableau as $cle=>$valeur)
{
if(is_array($valeur))
{
$chaine = $chaine.$cle."|";
$chaine = $chaine.creer_chaine($valeur);
}
else
{
$chaine = $chaine.$valeur."&";
}
}
return $chaine;
}
Ensuite j'appelle cette fonction
$jdate = date('j');
$mdate = date('n');
$ydate = date('Y');
$chaine="0|".$jdate."&".$mdate."&".$ydate."&";
$chaine = $chaine.creer_chaine($tab_task);
Et au momment de ma liste déroulante prev_task j'ajoute l'évènement OnChange suivant :
<td align="right">Preview Task:</td>
<td>
<? $query = "SELECT task_id, name FROM $TASK_TABLE WHERE proj_id=".$proj_id." ORDER BY task_id";
list($qh, $num) = dbQuery($query);
if ($num > 0) {
?>
<select name="prev_task" onChange="affich_tab('<?echo $chaine;?>',this.options[this.selectedIndex].value, 'start_day', 'start_month', 'start_year');" style="width: 100%">
<?
print "<option value='0'></option>";
while ($return = dbResult($qh)) {
if ($return["task_id"]!=$task_id){
print "<option value=\"$return[task_id]\"";
print ">$return[name]</option>\n";
}
}
print "</select>";
}
else {
print "<select name=\"dummy\" disabled=\"true\" style=\"width: 100%;\">\n";
print " <option>There are no tasks assigned</option>\n";
print "</select>\n";
}?>
</td>
Et voici le code Javascript du OnChange:
Code : Tout sélectionner
<html>
<head>
<script language="JavaScript">
<!--
function affich_tab( array_str , ind, day, month, year)
{
var tab = new Array();
var array_length = array_str.length;
var $i = 0;
while ($i < array_length )
{
index_pipe = array_str.indexOf('|',$i);
index_et_day = array_str.indexOf('&',index_pipe );
index_et_month = array_str.indexOf('&', index_et_day + 1 );
index_et_year = array_str.indexOf("&" , index_et_month + 1 );
cle = array_str.substring($i,index_pipe);
valeur_day = array_str.substring(index_pipe+1,index_et_day);
valeur_month = array_str.substring(index_et_day+1,index_et_month);
valeur_year = array_str.substring(index_et_month+1,index_et_year);
$i = index_et_year+1;
tab [cle] = Array (valeur_day, valeur_month, valeur_year);
}
document.getElementById(day).value = tab[ind][0];
document.getElementById(month).value = tab[ind][1];
document.getElementById(year).value = tab[ind][2];
}
// -->
</script>
Merci pour votre aide et j'espère que le temps passé sera bénéfique à quelqu'un.
@+
Victory!
J'ai enfin réussi à faire ce que je voulais.
L'idée est peut être pas la plus simple mais ça marche... donc tant que ça marche on touche plus :D
Sinon voici la démarche que j'ai utilisé si jamais ça interesse certains:
Au début de mon fichier, je sélectionne toutes les dates de fin que je décompose en jour, mois et année.
[php]
$query3 = "SELECT task_id, DATE_FORMAT(end_date,'%e') as start_day, DATE_FORMAT(end_date,'%c') as start_month, ".
"DATE_FORMAT(end_date,'%Y') as start_year FROM $TASK_TABLE WHERE proj_id=".$proj_id." ORDER BY task_id";
[/php]
Je stocke le résultats dans un tableau multidimension.
[php]
$tab_task = array();
list ($qh3,$num3) = dbQuery($query3);
if ($num3>0)
{
while ($data3 = dbResult($qh3))
{
$tab_task[$data3["task_id"]] = array($data3["start_day"],$data3["start_month"] , $data3["start_year"]);
}
}
[/php]
Puis j'ai créer une fonction qui va mettre le tableau dans une chaîne de caractère.
[php]
function creer_chaine($tableau)
{
$chaine = "";
foreach ($tableau as $cle=>$valeur)
{
if(is_array($valeur))
{
$chaine = $chaine.$cle."|";
$chaine = $chaine.creer_chaine($valeur);
}
else
{
$chaine = $chaine.$valeur."&";
}
}
return $chaine;
}
[/php]
Ensuite j'appelle cette fonction
[php]
$jdate = date('j');
$mdate = date('n');
$ydate = date('Y');
$chaine="0|".$jdate."&".$mdate."&".$ydate."&";
$chaine = $chaine.creer_chaine($tab_task);
[/php]
Et au momment de ma liste déroulante prev_task j'ajoute l'évènement OnChange suivant :
[php]
<td align="right">Preview Task:</td>
<td>
<? $query = "SELECT task_id, name FROM $TASK_TABLE WHERE proj_id=".$proj_id." ORDER BY task_id";
list($qh, $num) = dbQuery($query);
if ($num > 0) {
?>
<select name="prev_task" onChange="affich_tab('<?echo $chaine;?>',this.options[this.selectedIndex].value, 'start_day', 'start_month', 'start_year');" style="width: 100%">
<?
print "<option value='0'></option>";
while ($return = dbResult($qh)) {
if ($return["task_id"]!=$task_id){
print "<option value=\"$return[task_id]\"";
print ">$return[name]</option>\n";
}
}
print "</select>";
}
else {
print "<select name=\"dummy\" disabled=\"true\" style=\"width: 100%;\">\n";
print " <option>There are no tasks assigned</option>\n";
print "</select>\n";
}?>
</td>
[/php]
Et voici le code Javascript du OnChange:
[code]
<html>
<head>
<script language="JavaScript">
<!--
function affich_tab( array_str , ind, day, month, year)
{
var tab = new Array();
var array_length = array_str.length;
var $i = 0;
while ($i < array_length )
{
index_pipe = array_str.indexOf('|',$i);
index_et_day = array_str.indexOf('&',index_pipe );
index_et_month = array_str.indexOf('&', index_et_day + 1 );
index_et_year = array_str.indexOf("&" , index_et_month + 1 );
cle = array_str.substring($i,index_pipe);
valeur_day = array_str.substring(index_pipe+1,index_et_day);
valeur_month = array_str.substring(index_et_day+1,index_et_month);
valeur_year = array_str.substring(index_et_month+1,index_et_year);
$i = index_et_year+1;
tab [cle] = Array (valeur_day, valeur_month, valeur_year);
}
document.getElementById(day).value = tab[ind][0];
document.getElementById(month).value = tab[ind][1];
document.getElementById(year).value = tab[ind][2];
}
// -->
</script>
[/code]
Merci pour votre aide et j'espère que le temps passé sera bénéfique à quelqu'un.
@+