Allineare il testo dentro una select composta da più campi pesi da un db

Akille67

Utente Attivo
24 Giu 2012
25
0
1
Salve sto uscendo pazzo per risolvere un problema apparentemente semplice....

Ho una select in cui le option non create pendendo dati da un DB.

Per una corretta visualizzazione mi piacerebbe che i vari dati siano formattati a colonne.

es:
<OPTION value=$matricola>$id - $parametro - $matricola - $cognome $nome - $tzona &nbsp; <B>$giorno</B> - $linea_t $inizio_t $fine_t </OPTION>

in questo momento mi restituisce:

2 - SOC - SOCCORSO - 13:20 - 20:15 - 06:55 - S
117 - RIS - RISERVA - 13:20 - 20:15 - 06:55 - S

mentre a me piacerebbe:

2 | SOC | SOCCORSO | 13:20 | 20:15 | 06:55 | S
117 | RIS | RISERVA | 13:20 | 20:15 | 06:55 | S

o qualcosa di simile...

Gazie Alberto
 

filomeni

Moderatore
Membro dello Staff
MOD
14 Mag 2006
1.052
6
38
49
Roseto degli Abruzzi (TE)
www.sitiweb.cloud
Ciao, o non ho capito bene o la soluzione è banale!
Basta che sostituisci il segno trattino (-) con il segno pipe (|)
Codice:
<OPTION value=$matricola>$id | $parametro | $matricola | $cognome $nome | $tzona &nbsp; <B>$giorno</B> | $linea_t $inizio_t $fine_t </OPTION>
 

Akille67

Utente Attivo
24 Giu 2012
25
0
1
Non mi sono saputo spiegare ... vorrei che i valori presi dal db fossero incolonnati come se fossero in una tabella,
cioè l'inizio di ogni valore uno sotto l'altro... Spero di essere stato chiaro
 

Akille67

Utente Attivo
24 Giu 2012
25
0
1
Non sono stato chiaro vorrei che i dati presi dal DB fossero incolonnati come in una tabella per facilitare la lettura..
 

marino51

Utente Attivo
28 Feb 2013
2.927
166
63
Lombardia
spero che tu debba preparare queste option una sola volta, perché il mio suggerimento forse non è il migliore, ma funziona
HTML:
<select style="font-family: monospace; font-size: 12pt;">
<option>2&nbsp;&nbsp;&nbsp;|&nbsp;SOC&nbsp;|&nbsp;SOCCORSO&nbsp;|&nbsp;13:20&nbsp;|&nbsp;20:15&nbsp;|&nbsp;06:55&nbsp;|&nbsp;S</option>
<option>117&nbsp;|&nbsp;RIS&nbsp;|&nbsp;RISERVA&nbsp;&nbsp;|&nbsp;13:20&nbsp;|&nbsp;20:15&nbsp;|&nbsp;06:55&nbsp;|&nbsp;S</option>
</select>
<br /> <br /> <br />
<select style="font-family: monospace; font-size: 12pt;">
<option>2&nbsp;&nbsp;&nbsp;&nbsp;SOC&nbsp;&nbsp;SOCCORSO&nbsp;&nbsp;13:20&nbsp;&nbsp;20:15&nbsp;&nbsp;06:55&nbsp;&nbsp;S</option>
<option>117&nbsp;&nbsp;RIS&nbsp;&nbsp;RISERVA&nbsp;&nbsp;&nbsp;13:20&nbsp;&nbsp;20:15&nbsp;&nbsp;06:55&nbsp;&nbsp;S</option>
</select>
scusa ... ho letto dopo il titolo, se prendi da db, puoi creare una funzione php a cui passi la stringa e la lunghezza che deve avere e all'interno, aggiungi gli spazi come nell'esempio html, restituendo la stringa a lunghezza "costante"
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
ti schematizzo come potresti fare, considera però che non otterrai mai un allineamento perfetto perchè i caratteri hanno una loro "larghezza"
e quindi occupano spazi diversi
PHP:
<?php
function allinea($ar){
	$stringa=array();
	$str_allineata=array();
	$stringa=$ar;
	foreach($stringa as $chiave => $valore){
		switch($chiave){
			case "id": $lun=4;break;
			case "nome": $lun=15;break;
			case "citta": $lun=15;break;
		}
		/*
		aggiungo degli spazi davanti chr(32)
		però a monitor gli spazi doppi (o più) risultano come unico spazio
		quindi li sostituiso con &nbsp;
		non posso usare direttamente &nbsp; perchè str_pad
		non lo considera spazio, ma una stringa quindi aggiunge &n ...
		*/
		$str_all=str_pad($valore,$lun,chr(32),STR_PAD_LEFT);
		$str_allineata[]= str_replace( chr(32) , '&nbsp;' , $str_all);
	}
	return implode("|",$str_allineata);
	
}
//TEST
//simulo estrazione da db
$da_db[1]['id']=37;//[1] primo record
$da_db[1]['nome']="pinco";
$da_db[1]['citta']="abbiategrasso";
$da_db[2]['id']=11;//[2] swecondo record
$da_db[2]['nome']="sofonisba";
$da_db[2]['citta']="aosta";
$da_db[3]['id']=999;//[3] terzo record
$da_db[3]['nome']="pallo";
$da_db[3]['citta']="verona";
foreach($da_db as $record){
	echo allinea($record)."<br>";
}
?>
per un buon allineamento ti convine usare le tabelle