Evidenziare commenti inseriti nelle ultime 24 ore

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Salve, vorrei sapere come posso fare per evidenziare (ovvero attribuire uno stile diverso) a dei commenti inseriti nelle ultime 24 ore. Ho un guestbook con database mysql, dove tra i campi c'è anche la data (nel formato: date("d/m/y"),' ',ora,' ',date("H:i");) e vorrei che ogni qual volta vengano visualizzati gli ultimi commenti questi vengano evidenziati. Stavo pensando ad un if che confronta la data del messaggio con la data del momento e se questo confronto non supera le 24 ore i messaggi vengono scritti in rosso per esempio.
Spero che sia stato abbastanza chiaro. Ringrazio t utti per l'aiuto.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco un'idea

PHP:
<?php
$ore_meno_24=time()-(24*60*60); //cioè attuale meno 24 ore
//estrai i tuoi campi data e ora
//se tu li avessi salvati in tinmestamp sarebbe stato più semplice
//trasformi i tui campi in timestamp prima trasformandoli in formato giusto es.
$data = "$mm/$gg/$anno $ore:$minuti"; // formato mm gg aaaa hh:ii
//la porti in time stamp
$data_commento=strtotime($data);//trasformo in timestamp
if($data_commento >= $ore_meno_24){
	//applichi uno stile es.
	$stile = " class=\"pinco\"";
}else{
	$stile = " class=\"pallo\"";
}
echo "<div $stile>$commento</div>";
?>
a te poi eventualmente semplificare
dai comunque un occhio a
http://it.php.net/manual/en/function.strtotime.php
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
Grazie per la risposta, ho provato ma non esce il risultato atteso. Preciso che non mi da nessun errore, però è come se non confrontasse le due date. Forse ho inserito l'if in modo errato. Ecco quello che ho scritto:
PHP:
//dati database
$host = "localhost";
$username = "fcfriends";
$password = "";
$database = "my_fcfriends";
$tabella = "forumeggio";
$tabella_comm = "forumeggio_commenti";
$ore_meno_24=time()-(24*60*60);
$data = "$mm/$gg/$anno $ore:$minuti";
$data_commento = strtotime($data);

//connessione e invio al DB
$connessione = mysql_connect($host, $username, $password) or die("Connessione DB fallita");
mysql_select_db($database, $connessione) or die("Selezione DB fallita");

//visualizza tutti i record nel DB
$query = "SELECT * FROM $tabella Order By id DESC LIMIT 20";
$result = mysql_query($query, $connessione) or die('Lavori in corso: La pagina sarà disponibile a breve. Errore caricamento forum...');

//ciclo while per visualizzare i dati estratti dal database
while($resrow = mysql_fetch_row($result))
{
$id = $resrow[0];
$nome = addslashes($resrow[1]);
$titolo = addslashes($resrow[2]);
$commento = $resrow[3];
$data_commento = addslashes($resrow[4]);

if($data_commento >= $ore_meno_24){
    //applichi uno stile es.
    $stile = " class=\"col2comm_ev\"";
	$stile2 = " class=\"col3comm_ev\"";
}else{
    $stile = " class=\"col2comm\"";
	$stile2 = " class=\"col3comm\"";	
} 
//Stampo il risultato
echo "
<div class='divcommenti' align='center'>
	<table class='tablecommenti' cellpadding=0 cellspacing=0>
		<tr>
			<td class='idx'>$id</td>
			<td class='col1comm' >$titolo</td>
			<td class='col5comm'>$data</td>
		</tr>
		<tr>
			<td class='idx2'>&nbsp </td>
			<td $stile2 colspan=2>
				<font $stile>$nome:</font> $commento</td>
		</tr>";//continua
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quello che avevi detto in
$data_commento = addslashes($resrow[4]); //cosa c'entra addslashes?
hai la data in formato (es.) 22/11/2011 non in timestamp (poi le ore dove sono? o il campo ha la forma 22/11/2011 14:57 ?)
se è così per fare il confronto devi trasformare la data che hai nel formato sopra in formato timestamp che è un numero intero (per vederlo metti un
var_dump($ore_meno_24);)
se la tua data nella tabella del db è nel formato 22/11/2011 14:57, prima devi trasformarla nel formato americano cioè
11/22/2011 14:57 e poi passarla a strtotime per ottenerla in formato timestamp
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Hai frainteso quello che ti ha detto borgo. Il controllo lo devi mettere dentro il ciclo:
PHP:
<?php
$host         = "localhost";
$username     = "fcfriends";
$password     = "";
$database     = "my_fcfriends";
$tabella      = "forumeggio";
$tabella_comm = "forumeggio_commenti";

$connessione = mysql_connect($host, $username, $password) or die('Connessione DB fallita');
mysql_select_db($database, $connessione) or die('Selezione DB fallita');

$query = "SELECT * FROM $tabella ORDER BY id DESC LIMIT 20";
$result = mysql_query($query, $connessione) or die('Lavori in corso: La pagina sarà disponibile a breve. Errore caricamento forum...');

echo <<<EOF
<div class='divcommenti' align='center'>
    <table class='tablecommenti' cellpadding=0 cellspacing=0>
EOF;

while ($resrow = mysql_fetch_assoc($result)) {
    $id            = $resrow['id'];
    $nome          = addslashes($resrow['nome']);
    $titolo        = addslashes($resrow['titolo']);
    $commento      = $resrow['commento'];
    $data_commento = addslashes($resrow['data_commento']);

    if (time() - strtotime($data_commento) >= (24 * 60 * 60)) {
        $stile = 'class="col2comm_ev"';
        $stile2 = 'class="col3comm_ev"';
    } else {
        $stile = 'class="col2comm"';
        $stile2 = 'class="col3comm"';
    }
    
    echo <<<EOF
        <tr>
            <td class="idx">{$id}</td>
            <td class="col1comm">{$titolo}</td>
            <td class="col5comm">{$data}</td>
        </tr>
        <tr>
            <td class="idx2">&nbsp;</td>
            <td {$stile2} colspan="2">
                <font {$stile}>{$nome}:</font> {$commento}
            </td>
        </tr>
EOF;

    // ...
}
 
Ultima modifica:

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ciao, la data è in formato italiano, viene stampata in questo modo 22/11/11 ora 11:08, e generata attraverso:
PHP:
echo date("d/m/y"),' ',ora,' ',date("H:i");?>
. Praticamente il form registra l'ora attuale (ovvero quella in cui l'utente apre il form per commentare) e poi lo salva nel db. Come faccio a trasformarlo in formato americano senza modificare quanto viene visualizzato form? grazie

scusate l'ignoranza, a cosa serve <<<EOF ?
Alessandro, nel ciclo if non manca una parentesi di chiusura?

grazie a tutti per le risposte
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
l' EOF è una sintassi per scrivere le stringhe
vedi http://it.php.net/manual/en/language.types.string.php example #3

veniamo alla data
se nel campo data_commento ha ad es 23/11/2011 per trasformarla in americano

PHP:
//....
$data_commento = addslashes($resrow['data_commento']);
$expl=explode("/",$data_commento);
//in $expl[0] trovi il giorno es. 23, in $expl[1] trovi il mese es. 11, in in $expl[2] trovi l'anno es. 2011
//per cui per trasformare
$data_commento_americana= $expl[1]."/".$expl[0]."/".$expl[2];// =>11/23/2011
if (time() - strtotime($data_commento_americana) >= (24 * 60 * 60) {
//...

se invece nel campo hai anche l'ora H:i es. 23/11/2011 10:43 sempre esplodendo per il / trovi
in $expl[0] trovi il giorno es. 23, in $expl[1] trovi il mese es. 11, in in $expl[2] trovi l'anno e l'ora es. 2011 10:43 e quindi ricomponi come prima

p.s.
probabilmente alex non ha riportato tutto il tuo script per quello manca la chiusura
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ho fatto le modifiche che mi avete consigliato, ma come risultato mi "evidenzia" tutti i commenti (cioè a tutti i commenti viene applicato lo stile col2comm_ev, come se la condizione dell'if sia sempre vera.
PHP:
//visualizza tutti i record nel DB
$query = "SELECT * FROM $tabella Order By id DESC LIMIT 20";
$result = mysql_query($query, $connessione) or die('Lavori in corso: La pagina sarà disponibile a breve. Errore caricamento forum...');
	
echo "
<div class='divcommenti' align='center'>
	<table class='tablecommenti' cellpadding=0 cellspacing=0>";	
	
//ciclo while per visualizzare i dati estratti dal database
while($resrow = mysql_fetch_row($result))
{
$id = $resrow[0];
$nome = addslashes($resrow[1]);
$titolo = addslashes($resrow[2]);
$commento = $resrow[3];
$data_commento = addslashes($resrow[4]);
$expl=explode("/",$data_commento); 
$data_americana= $expl[0]."/".$expl[1]."/".$expl[2];

if(time() - strtotime($data_americana) >= (24 * 60 * 60)) { 
        $stile = 'col2comm_ev';
 	    $stile2 = 'col2comm_ev'; 
}else{
        $stile = 'col3comm';
	    $stile2 = 'col2comm';  
} 

//Stampo il risultato
echo"
		<tr>
			<td class='idx'>$id</td>
			<td class='col1comm'>$titolo</td>
			<td class='col5comm'>$data</td>
		</tr>
		<tr>
			<td class='idx2'>&nbsp </td>
			<td class='$stile' colspan=2>
				<font class='$stile2'>$nome:</font> $commento</td>
		</tr>";
ho usato una sintassi un po diversa, ma non credo che sia quello il problema, ora provo a cambiare anche quello e vediamo.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
hai fatto un piccolo erroretto
$data_americana= $expl[0]."/".$expl[1]."/".$expl[2];
nella modo sopra non fai altro che da 23/11/2011 riottenere 23/11/2011
dovevi scrivere
$data_americana= $expl[1]."/".$expl[0]."/".$expl[2];
cioe devi invertire il giorno con il mese
prova e sappi dire
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ciao, effettivamente ho dimenticato di dire che avevo provato in entrambi i modi, prima come mi hai detto tu e poi così, nel copiare il codice devo aver preso quest'ultimo. Cmq il risultato è lo stesso, cioè tutti evidenziati.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
iao
allora dividi le istruzioni e metti i var_dump
PHP:
<?php
//......
$data_commento = addslashes($resrow[4]); 
var_dump($data_commento);//es string (nn)23/11/2011
$expl=explode("/",$data_commento);  
$data_americana= $expl[1]."/".$expl[0]."/".$expl[2]; 
var_dump($data_americana);//es string (nn) 11/23/2011
$meno_24=time()-(24*60*60);
var_dump($meno_24);//un numero intero di circa 12 cifre (INT)......
$data_comm_timestamp=strtotime($data_americana);
var_dump($data_comm_timestamp);//un numero intero di circa 12 cifre (INT)......
if($data_comm_timestamp >= $meno_24) {  
        $stile = 'col2comm_ev'; 
         $stile2 = 'col2comm_ev';  
}else{ 
        $stile = 'col3comm'; 
        $stile2 = 'col2comm';   
}  
//...eccc
?>
e posta i vari risultati dei var_dump
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
ecco:

string(18) "23/11/11 ora 15:36" string(18) "11/23/11 ora 15:36" int(1322007192) int(-1) string(18) "23/11/11 ora 13:25" string(18) "11/23/11 ora 13:25" int(1322007192) int(-1) string(18) "22/11/11 ora 11:08" string(18) "11/22/11 ora 11:08" int(1322007192) int(-1) string(18) "22/11/11 ora 10:55" string(18) "11/22/11 ora 10:55" int(1322007192) int(-1) string(18) "21/11/11 ora 16:41" string(18) "11/21/11 ora 16:41" int(1322007192) int(-1) string(18) "19/11/11 ora 14:58" string(18) "11/19/11 ora 14:58"
int(1322007192) int(-1) string(18) "19/11/11 ora 10:55" string(18) "11/19/11 ora 10:55"
int(1322007192) int(-1) string(18) "16/11/11 ora 16:10" string(18) "11/16/11 ora 16:10"
int(1322007192) int(-1) string(18) "09/11/11 ora 10:14" string(18) "11/09/11 ora 10:14"
int(1322007192) int(-1) string(18) "08/11/11 ora 10:56" string(18) "11/08/11 ora 10:56"
int(1322007192) int(-1) string(18) "07/11/11 ora 17:38" string(18) "11/07/11 ora 17:38"
int(1322007192) int(-1) string(18) "07/11/11 ora 13:34" string(18) "11/07/11 ora 13:34"
int(1322007192) int(-1) string(18) "05/11/11 ora 21:38" string(18) "11/05/11 ora 21:38"
int(1322007192) int(-1) string(18) "03/11/11 ora 19:57" string(18) "11/03/11 ora 19:57"
int(1322007192) int(-1) string(18) "30/10/11 ora 20:17" string(18) "10/30/11 ora 20:17"
int(1322007192) int(-1) string(18) "30/10/11 ora 18:18" string(18) "10/30/11 ora 18:18"
int(1322007192) int(-1) string(18) "30/10/11 ora 13:36" string(18) "10/30/11 ora 13:36"
int(1322007192) int(-1) string(18) "30/10/11 ora 13:10" string(18) "10/30/11 ora 13:10"
int(1322007192) int(-1) string(18) "30/10/11 ora 10:36" string(18) "10/30/11 ora 10:36"
int(1322007192) int(-1) string(18) "29/10/11 ora 14:34" string(18) "10/29/11 ora 14:34"
int(1322007192) int(-1)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ecco trovato l'inghippo
string(18) "23/11/11 ora 15:36"
è quel " ora " che impedisce la trasformazione dell'ora americana in timestamp quel int(-1) quindi devi eliminarlo
PHP:
<?php 
//...... 
$data_commento = addslashes($resrow[4]);  
var_dump($data_commento);//es string (nn)23/11/2011 
$expl=explode("/",$data_commento);   
$data_americana= $expl[1]."/".$expl[0]."/".$expl[2]; 
$data_americana=str_replace(" ora "," ",$data_americana);//tolgo la stringa ora con i due spazi e sostituisco con uno spazio unico
var_dump($data_americana);//es string (nn) 11/23/2011 
$meno_24=time()-(24*60*60); 
var_dump($meno_24);//un numero intero di circa 12 cifre (INT)...... 
$data_comm_timestamp=strtotime($data_americana); 
var_dump($data_comm_timestamp);//un numero intero di circa 12 cifre (INT)...... 
if($data_comm_timestamp >= $meno_24) {   
        $stile = 'col2comm_ev';  
         $stile2 = 'col2comm_ev';   
}else{  
        $stile = 'col3comm';  
        $stile2 = 'col2comm';    
}   
//...eccc 
?>
prova, lasciando per ora i var_dump li togli quando tutto funzia e poi puoi risemplificare tornando al vecchio codice sempre però togliendo " ora ".

p.s.
piccola lezione di saggezza: ricordati quando qualcosa non ti funzia che spesso disseminare lo script di var_dump ti fa capire dove sta l'errore
 

asevenx

Utente Attivo
7 Nov 2009
312
0
16
grande funziona!!! Ho dovuto però applicare la correzione non sulla data americana ma su quella d'origine. ;) grazie mille!!!!!!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
perfetto, alla prossima.

toglimi una curiosità: non funziava sulla data americana? avrebbe dovuto essere lo stesso in quanto l'explode inverte solo i gg con i mm, comunque bene lo stesso
 
Discussioni simili
Autore Titolo Forum Risposte Data
D [Javascript] [HTML] Evidenziare testo di una text Javascript 1
M [PHP] Evidenziare le parole cercate nei risultati di una ricerca PHP 1
M evidenziare link HTML e CSS 2
L menu dropdown orizzontale su 3 livelli. Evidenziare la voce generale HTML e CSS 0
A Evidenziare la pagina HTML Javascript 4
F Menu navigazione: evidenziare link al click HTML e CSS 2
Monital [DIV/CSS] evidenziare risultato array all'interno di un div PHP 0
glm2006ITALY PHP: evidenziare la pagina corrente in modo dinamico - help PHP 4
M uso di preg_replace per evidenziare la pagina corrente PHP 0
LaKanka evidenziare campi vuoti nel form Javascript 1
C Evidenziare il Nick in chat PHP 5
G Evidenziare Max/Min in una lista PHP 8
E Come evidenziare la voce di menu corrente ? HTML e CSS 3
C [PHP] Caricamenti di tot commenti da database PHP 4
Q [COMPRO] Facebook: like, seguaci, commenti etc Annunci servizi di Social Media Marketing 0
gigiwer 10 iscritti yt italiani+ 10 commenti e 10 like Annunci servizi di Social Media Marketing 0
napuleone [MySQL] commenti in una query MySQL 1
Lear [VENDO] FOLLOWERS,LIKE,COMMENTI,DISLIKE,VIEWS per INSTAGRAM,YOUTUBE,FACEBOOK.. Annunci servizi di Social Media Marketing 71
Lear [VENDO]Account instagram 5k followers/like,commenti,views instagram e youtube Annunci servizi di Social Media Marketing 8
Lear [VENDO] Account Instagram 10k followers/ Follower,Like,commenti,visualizzazioni instagram Annunci servizi di Social Media Marketing 4
loois Ho un problema nella creazione di un sistema di commenti in PHP PHP 11
L [WordPress] personalizzazione commenti WordPress 0
C Vendo ,COMMENTI,LIKE,CONDIVISIONE VENDO Annunci servizi di Social Media Marketing 0
ecosito [Wordpress] Ricevo i commenti scritti su altri siti????? WordPress 2
cityweb90 **Vendo** Commenti fake facebook Vendere e Acquistare pubblicita' online 0
M registrazione in relazione ai commenti Programmazione 0
cityweb90 Vendo commenti fake Annunci servizi di Social Media Marketing 0
cityweb90 [vendo] commenti fake sotto i post, recensioni, incremento fan pagine Fb. Annunci servizi di Social Media Marketing 0
A Wordpress votazione e commenti video WordPress 2
W scambio commenti blog Offerte e Richieste di scambio links 0
F Quale privacy policy menzionare in un BOX COMMENTI? Leggi, Normative e Fisco 0
L Inserire commenti su sito web HTML e CSS 2
felino Commenti di SPAM nonostante sia presente il Chaptcha WordPress 4
felino Commenti: email di notifica, reply solo dall'admin e captcha WordPress 1
C [VENDO]Pacchetto SEO: Backlink,Article Marketing,Pdf,Commenti blog,Social Bookmarking Vendere e Acquistare pubblicita' online 0
Shyson Non riesco a modificare i commenti del visitatori Social Media Marketing 0
D commenti dinamici stile facebook PHP 4
M creare una lista di commenti in un database PHP 1
D gestire commenti e risposte ... PHP 3
M Commenti condizionali IExplorer HTML e CSS 1
G [VENDO] FAN Facebook, Followers Twitter, Visite siti, Visite&commenti youtube Annunci servizi di Social Media Marketing 1
Davidee [VENDO] Visualizzazioni a Video YouTube Italiane o Internazionali e Mi piace, iscritti e commenti Annunci servizi di Social Media Marketing 0
J Modulo commenti PHP 1
I Inserire commenti sotto post o immagini(o altro) PHP 5
T Numero commenti cms vbulletin CMS (Content Management System) 0
M [CERCO]Commenti,Iscrizioni,like Youtube - Spam su pagina fb inerente a video di Youtube Annunci servizi di Social Media Marketing 2
felino Commenti disabilitati ma vengono inviati ugualmente WordPress 1
A Spazio per commenti PHP 8
A [RISOLTO]Aggiornamento automatico commenti PHP 6
voldemort Commenti in HTML su più righe: è possibile? HTML e CSS 1

Discussioni simili