Mon code doit recuperer des dates dans une table (pas de probleme) et les afficher dans une balise <select> (pas de probleme). Sur une page de test , mon script fonctionne tres bien mais une fois que je l'implémente sur ma page, ça bug.
Dans les balises <option>, les dates restent "en mémoire". Je m'explique. Ma table SQL comportent plusieurs champs dont deux qui nous interessent : un identifiant et la date. Ainsi un identifiant peux avoir plusieurs date (car les identifiants correspondent à des numeros de parcelle).
Quand ja rrive sur ma page, avec le numéro de parcelle en variable de session, les dates correspondantes sont bien là, mais des que je change de parcelle en session, les dates de la nouvelle session s affichent en plus de celles de la session précédente. J ai réglé un point du probleme car précédement, sans changer de session, mes dates s'accumulaient dans le <select>.
J'avoue que là je ne sais pas ou est vraiment le probleme.
Voila ma classe et la fonction qui retourne les dates :
require_once('acces_bd.class.php');
/***************************
* Definition de la classe *
***************************/
class Sol extends Formulaire {
/**
* Constructeur : construit le formulaire en vue d'un affichage ultérieur */
function Sol () {
/* Création d'un accès à la base de données pour les requetes */
$this->m_nAccesBD = new Acces_BD();
}
//Fonction qui va chercher les dates
function _AfficheDate(){
$this->m_bRequeteValide = true;
$sRequete = '';
if (isset($_SESSION['codeParcelle'])){
$sRequete = 'SELECT date FROM ma_table
WHERE code_parcelle = '.$_SESSION['codeParcelle'].' order by date DESC' ;
}else{
unset($_POST);
$this->m_bRequeteValide = false;
}
if ($this->m_bRequeteValide) {
$this->m_nAccesBD->connexion();
$rResultatDate= $this->m_nAccesBD->requete($sRequete);
$this->m_nAccesBD->deconnexion();
//On retourne toutes les dates correspondantes au code parcelle
while ($aResultatDate = pg_fetch_array($rResultatDate)) {
$this->aResultatDate .= $aResultatDate['date']!= "" ? ''.$aResultatDate['date'].', ' : "";
}//fin while
return $this->aResultatDate;
}//fin if
else {
echo '<span class="consignes-form">' . $this->m_sMessageErreurRequete . '</span>';
}
}//fin fonction
}
/*Fin classe*/
Et l'appel de la fonction sur ma page :$oSol = new Sol(); //creation de l objet
[...]
//Affichage du select
$sCodeInput = '<select name="date_prev" onchange="submit()" class="marge-combo" style="max-width: 80px;"';
if (($oSol->m_bModeEdition) || ($oSol->m_bModeInsertion)){
$sCodeInput .= 'disabled="disabled"';
}
$scodeInput .= '>';
$sCodeInput .= '<option value=-1>Liste dates</option>';
//Affichage des dates de la parcelle en session
$aListeOptions = array();
$aListeOptions = $oSol->_AfficheDate(); //appel de la fonction
$aListeOptions = substr($aListeOptions,0,strrpos($aListeOptions, ', ')); //enleve la derniere virgule
$aListeOptions = explode(',',$aListeOptions); //creation du tableau, separation des dates
$aListeOptions = array_unique($aListeOptions); // on enleve les doublons qui peuvent apparaitrent
foreach ($aListeOptions as $sValeur) {
$sCodeOption = '<option>';
$sCodeOption .= $sValeur.'</option>';
$sCodeInput .= $sCodeOption;
//unset($sValeur);
}
$sCodeInput .= '</select>';
Comme je disais, sur ma page de test, le code fonctionne comme je veux, mais des que je l'implémente, j ai ce bug d'affichage. Peut-être que j'ai oublié quelque chose (tête en l'air je suis faut dure), mais à force d'être dessus je vois pas trop ^^.