Balises select avec affichage bizarre

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Balises select avec affichage bizarre

par BaLiSTiK » 23 avr. 2008, 10:31

ça retourne un format style date1,date2,...dateN, avec la virgule a la fin.

Mais j ai refait un autre code, qui fonctionne aussi tres bien en test mais une fois implémenté ne s'affiche pas...

la classe :
class Sol extends Formulaire {
	
	//Declaration des tableau associatif contenant les listes utiles à l'affichage
	//sous la forme "code" => "libelle"
	var $m_aListeSolDate;
	
	/**	 * 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();
		
		$this->m_aListeSolDate = $this->_GenereListeDate(); //generation de la liste
	}

	function _GenereListeDate() {
		$this->m_bRequeteValide = true;
		if (isset($_SESSION['codeParcelle'])){
			$this->m_nAccesBD->connexion();
		//Récupération de la liste des code ainsi que les libellé associé
			$rResultat = $this->m_nAccesBD->requete('SELECT * FROM table 
					WHERE  code_parcelle = '.$_SESSION['codeParcelle'].' order by date DESC');
			$this->m_nAccesBD->deconnexion();
		}
		else { $this->m_bRequeteValide = false; }
		//Génération du tableau associatif de la forme
		//$aListeResultat[code]=$aligne
		//avec
		//$aligne['code'] = code
		//$aligne['libelle'] = libelle
		//$aligne['type'] = type  /*NB cette valeur n'est pas toujours présente*/
		$aListeResultat = array();
		while ($aListe = pg_fetch_assoc($rResultat)) {
			$aListeResultat[$aListe['date']] = $aListe;
		}
		return $aListeResultat;
	}
	
}
et le resultat :
$oSol = new Sol(); //creation de l objet
/*
[...] lignes de codes pour faire d'autres choses
*/
$sCodeInput = '<select name="date" class="marge-combo" style="max-width: 80px;"';
if (($oSol->m_bModeEdition) || ($oSol->m_bModeInsertion)){
	$sCodeInput .= 'disabled="disabled"';
}
$sCodeInput .= '>';
$sCodeInput .=	'<option value=-1>S&eacute;lectionner</option>';
foreach ($oSol->m_aListeSolDate as $sCle => $sValeur) {
	$sCodeOption = '<option';
	if (($oSol->m_aSol) /*and ($oSol->m_aSol['date'] == (string)$sCle)*/){
			$sCodeOption .= ' selected';	
	}
	$sCodeOption .= ' style="width: 100px;" value=' . $sCle . '>';
	$sCodeOption .= $sValeur['date'].'</option>';
	$sCodeInput .= $sCodeOption;
} 
$sCodeInput .= '</select>';
echo $sCodeInput;
J'avous que je ne sais pas du tout pourquoi en test ça fonctionne nickel et une fois sur ma page ça bugg

par Devether » 22 avr. 2008, 16:55

Bonjour,

Qu'est ce que retourne " return $this->aResultatDate; " pour un code parcelle donné ?

Balises select avec affichage bizarre

par BaLiSTiK » 22 avr. 2008, 14:51

J ai (encore) un soucis de prog' PHP5.

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 ^^.