Array con messaggi

  • Creatore Discussione Creatore Discussione marf
  • Data di inizio Data di inizio

marf

Utente Attivo
4 Nov 2009
30
0
0
Salve a tutti, nel mio gioco sto implementando un sistema di messaggi:

ogni utente potrà inviare un messaggio, che verrà memorizzato in un database, i primi 10 messaggi verranno stmpati in una tabella...

Il problema è il seguente, la memorizzazzione avviene perfettamente, utilizzo la seguente funzione per prelevare i messaggi e creare un array:

PHP:
function seleziona_messaggi() {
	
	global $db_id;
	
	$sql = "SELECT * FROM messaggi_scor ORDER BY data DESC";
	$ris = mysql_query($sql, $db_id);
	
	$messaggio = array();
	
	
 	for ($i=0; $row = mysql_fetch_row($ris); $i++) 
	
	$messaggio[$i]=$row;
 
 	return $messaggio;
	
	
	
}


In questo modo $messaggio sarà un array dove oni indice corirsponde ad un messaggio, ditemi se sbaglio...

Poi per stampare il tutto adotto il seguente codice:

PHP:
<?php
		
		
		
		seleziona_messaggi();
		
		echo"<table align='center'>
		<tr>
		<td>Numero</td>
		<td>Giocatore</td>
		<td>Messaggio</td>
		<td>Data</td>
		</tr>";
		
		
		for ($i=0; (($i=10)&&($i<count($messaggio))); $i++)
		
		echo"<tr>
		<td>".$i."</td>
		<td>".$messaggio[$i][1]."</td>
		<td>".$messaggio[$i][2]."</td>
		<td>".$messaggio[$i][3]."</td>
		</tr>
		</table>";
		
		?>

Il problema è che non mi stampa nulla e non so come mai, riuscite a dirmi dove ho sbagliato, vorrei che nella tabella venissero stampati i 10 messaggi più recenti.

La tabella messaggi_scor, dove vengono memorizzati i messaggi è strutturata nel seguente modo:

Sono presenti 4 campi:

id che si incrementa, è l'id del messaggio;
giocatore, ovvero il nome del giocatore;
messaggio, ovvero il contenuto testuale del messaggio;
data, ovvero la data di quando è stato spedito il messaggio in formato DATETIME;

Non riesco a capire cosa è sbagliato, grazie in anticipo,

Marco
 
Modifica la funzione così:
PHP:
function seleziona_messaggi()
{
	global $db_id;

	$sql = "SELECT * FROM messaggi_scor ORDER BY data DESC";
	$ris = mysql_query($sql, $db_id);

	$messaggio = array();

	while($assoc = mysql_fetch_assoc($ris))
		$messaggio[$assoc['id']] = $assoc;

	return $messaggio;
}
Perché vi ostinate ad usare il ciclo for quando ce ne sono altri più performanti? E poi esegui la funzione ma non ne memorizzi il risultato... modifica anche la visualizzazione così:
PHP:
<?php
$messaggi = seleziona_messaggi();

echo"<table align='center'>
<tr>
<td>Numero</td>
<td>Giocatore</td>
<td>Messaggio</td>
<td>Data</td>
</tr>";


foreach($messaggi as $i => $msg)
{
	echo"<tr>
	<td>".$i ."</td>
	<td>".$msg['giocatore']."</td>
	<td>".$msg['messaggio']."</td>
	<td>".$msg['data']."</td>
	</tr>
	</table>";
}
?>
 
Grazie mille, così me lo visualizza, infine vorrei che questi messaggi (gli ultimi 10) praticamente si alternassaero ogni 5 secondi, tipo dal primo dopo 5 secondi viene il secondo ecc... arrivati al decimo si reincomincia dal 1, secondo me bisogna utilizzare js oltre che PHP, ma non so bene come fare, così almeno questo script riesco a finirlo :)

Grazie in anticipo...
 
Non ho capito bene. Tu praticamente vuoi visualizzare gli ultimi 10 messaggi, però a scorrimento? Oppure vuoi visualizzare per 30 secondi il testo del primo, poi il testo del secondo, e così via? Nel primo caso, secondo me è meglio creare un sistema di paginazione. La tua idea è abbastanza scomoda, sia da realizzare, sia per l'utente...
 
No tipo allora, nella pagina del villaggio mettiamo si vede un div dove si vedono scorrere i messagig scritti dagli utenti, ma solo i primi 10 con un intervallo l'uno dall'altro di 5 secondi, tipo i messagig appaiono così:

marf: Ciao io sono marf

[passano 5 secondi]

marco: Ciao io sono marco

[passano 5 secondi]

luca: Ciao io sono luca


ecc...

Arrivati al 10 messaggio si torna al primo, questi messaggi devono venire visuallizzati in un piccolo div, sono messaggi di massimo 75 caratteri...
 
Ah, scusa, io pensavo che questi fossero messaggi privati, invece tu hai realizzato una specie di shoutbox. Comunque, si può fare anche senza AJAX. Quella che ti propongo io è una tecnica semplice ma meno efficiente, usando AJAX invece è più complicato (e io stesso, non avendo mai usato AJAX, avrei bisogno di aiuto) ma sicuramente più potente.
 
Esatto! Una specie di shoutbox, fino ad ora con questo script prelevo i messaggi e va benissimo, ora però non so come visualizzarli uno alla volta ed ad un intervallo di 5 secondi fare apparire il messagigo che segue (tipo un ciclo)...
 
Nessuno ha proprio qualche idea su come fare apparire alternati a tempi regolari questi messaggi ?
 

Discussioni simili