Tabella HTML e richiamo della funzione

leon-kennedy

Utente Attivo
19 Mag 2010
147
0
0
PHP:
<?php
//la classe per il paging
class Paging {
    private $totPag; //Totale Pagine nella tabella
    private $pagCorr; //Pagina corrente
    private $totRighe; //Totale righe nella tabella
    private $righePerPagina; //Numero di righe per pagina da ottenere

    //Facilita l'accesso all'array dell'intervallo
    const kIntervalloInizio='inizio';
    const kIntervalloLunghezza='lunghezza';

    // Il costruttore chiede quale sia la pagina corrente, il totale delle
    // righe in tabella e quante righe per pagina interessano
    public function __construct($pagCorr,$totRighe,$righePerPagina) {
        $this->pagCorr=$pagCorr;
        $this->totRighe=$totRighe;
        $this->righePerPagina=$righePerPagina;
        $this->totPag=$this->contaPagine($totRighe, $righePerPagina);
    }

    // Consente di modificare la pagina corrente con un'altra dopo
    // l'esecuzione del construct
    public function vaiAPagina($pagina){
        if($pagina==self::kUltimaPagina)
            $this->pagCorr=$this->totPag;
        elseif(is_numeric($pagina) and $pagina>1 and $pagina<$this->totPag)
            $this->pagCorr=$pagina;
        else
            $this->pagCorr=1;
    }

    //Indica in quante pagine viene divisa la tabella
    public function contaPagine($totRighe, $righePerPagina) {
        return ceil($totRighe / $righePerPagina);
    }

    //Restituisce un array indicante la posizione del primo record e quante
    //righe occorre scorrere
    public function dammiIntervallo() {
        return array(
            self::kIntervalloInizio => ($this->pagCorr-1) * $this->righePerPagina,
            self::kIntervalloLunghezza => $this->righePerPagina
        );
    }

    //Ritorna il numero per la prossima pagina
    public function prossimaPagina(){
        if($this->totPag==0)
                return 1;
        return ($this->pagCorr>=$this->totPag)?$this->totPag:$this->pagCorr+1;
    }

    //Ritorna il numero per la pagina precedente
    public function precedentePagina(){
        return ($this->pagCorr<=1)?1:$this->pagCorr-1;
    }

}

//PREPARA L'OGGETTO PAGING E LO RITORNA
function CostruisciOggettoPaging($sql) {
    if (!isset($_GET['p']))
        $pagCorr = 1;
    else
        $pagCorr=$_GET['p'];
    $res = mysql_query($sql) or die('Err3');
    $totRighe = mysql_num_rows($res);
    mysql_free_result($res);
    $righePerPagina = 10;
    return new Paging($pagCorr, $totRighe, $righePerPagina);
}
 
//REALIZZA LA TABELLA E LA RITORNA SOTTO FORMA DI STRINGA
function CostruisciTabella($p,$sql) {
    $inter=$p->dammiIntervallo();
    $res = mysql_query("$sql limit {$inter[Paging::kIntervalloInizio]},{$inter[Paging::kIntervalloLunghezza]}") or die('Err4');
    ob_start();
    //creazione della tabella
    echo <<<END
<table class="table" cellspacing="0" cellpadding="5" rules="all" border="0" style="border-color:#FFFF33;"border-width:0px;border-collapse:collapse;">
<tr>
        <td width="250px"><b><font color="red">Mittente</font></b></td>
        <td width="250px"><b><font color="red">Data</font></b></td>
</tr>
END;
    while ($row = mysql_fetch_assoc($res)) {
    $data_invio = $row['data_invio']; 

//convertiamo la data
function convertidata($data_invio)   
{   
$partedata = explode("-", $data_invio);    
$compleanno= $partedata [5]."/".$partedata [4]."/".$partedata [3]."/".$partedata [2]."/".$partedata [1]."/".$partedata [0];    
return $compleanno;  
} 
$new_date = convertidata($data_invio);

echo <<<END
<tr>
        <td width="250px">{$row['mittente']}</td>
        <td width="250px">$new_date</td>
</tr>
<tr>
<td width="500px">{$row['testo']}</td>
</tr>
</table>
END;
    }
    //Link di navigazione
    echo <<<END
   </table>
        <a href="{$_SERVER['PHP_SELF']}?p={$p->precedentePagina()}">Indietro</a> |
        <a href="{$_SERVER['PHP_SELF']}?p={$p->prossimaPagina()}">Avanti</a>
   

END;
     mysql_free_result($res);
     return ob_get_clean();
}

//connessione al database
include('../connect.php');

//estrazione dei giocatori
$sql="SELECT * FROM MESSAGGI_ricevuti WHERE destinatario = '$team' ORDER BY data_invio ASC";

$p = CostruisciOggettoPaging($sql);
$tabella_dati = CostruisciTabella($p,$sql);

mysql_close($conn);

echo $tabella_dati;
?>

Ciao a tutti ho 2 problemi con lo script che ho riportato sopra:

1-Creo una tabella con 2 righe:(2 celle larghezza 250) e (1 cella larghezza 500px)...il problema è che non mi vengono fuori due righe con la stessa lugnhezza,bensì le due celle "Mittente" e "Testo" assumono larghezza 500,mentre "Data invio" assuma la larghezza di 250.

2-Se devo estrarre un solo messaggio lo script non mi da errori,ma se ce ne sono più di uno mi dice che la ri-uso la funzione e mi da questo errore:

Fatal error: Cannot redeclare convertidata() (previously declared in /membri/beamanager/gioco/paginazioni/messaggi.php:91) in /membri/beamanager/gioco/paginazioni/messaggi.php on line 91

Ringrazio chi avrà la pazienza di aiutarmi!0:)
 
ciao
così ad occhio e croce:
hai messo la definizione della funzione dentro un while, quindi ad ogno ciclo tenta di redifinirla, da cui Fatal error: Cannot redeclare .....
 
ciao
sempre ad occhio e croce (è uno script lunghetto).
al posto di
<td width="500px">{$row['testo']}</td>
dato che prima hai due colonne prova a mettere

<td width="500px" colspan="2">{$row['testo']}</td>
 
Grazie,ho letto e capito adesso la differenza tra colspan e rowspan!0:)

Un ultima cosa io devo convertire un datetime...

PHP:
$date = $row['data_invio'];
$data = date('d/m/Y h:i:s', strtotime("$date[0]-$date[1]-$date[2] $date[3]:$date[4]:$date[5]"));

$date equivale a una data estratta dal DB ad esempio:

2011-01-13 19:47:58

e me la dovrebbe convertire in

13-01-2011 19:47:58

Dove sbalgio?
 
ciao
se la data è nel formato 2011-01-13 19:47:58 e cioè americano e il tuo sistema
è a 64 bit (almeno così ho trovato nel manuale http://it.php.net/manual/en/function.strtotime.php) è sufficiente


PHP:
<?php
$date = $row['data_invio'];
$data = date('d/m/Y h:i:s',strtotime($date));
?>
se invece è a 32 da FALSE
però prima ti conviene fare una verifica

PHP:
<?php
$date = $row['data_invio'];
$da = strtotime($data);
if($da==FALSE){
	echo "la data NON è nel formato giusto";
}else{
	echo "la data è giusta e risulta $da";
}
?>
se ti da la data NON è nel formato giusto bisogna fare altre operazione (ci penso e poi ti so dire)

p.s.
le ore 19 le trasforma in 07
p.s. al p.s.
questo è uno dei difetti di nnn memorizzare le date in formato timestamp
 
dimenticavo
per avere le ore scritte giuste al posto di
$data = date('d/m/Y h:i:s',strtotime($date));
scrivi
$data = date('d/m/Y H:i:s',strtotime($date));
 

Discussioni simili