Raggruppare dati in array per successivo insert

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

marf

Utente Attivo
4 Nov 2009
30
0
0
Salve a tutti, sto sviluppando i messaggi circolari delle alleanze per il mio browser game, prima della effettiva apertura, praticamente mediante essi il founder della alleanza potrà inviare un messaggio a tutti i membri della sua stessa alleanza, volevo utilizzare il campo alliance della tabella users, infatti vi è la tabella users che contioene tutti i record degli utenti del gioco, tra cui il campo alliance che rappresenta
l'id della alleanza alla quale un determinato yutente fa parte
Questa funzione, utilizzabile solo dagli admin fa in modo che tutti gliu utenti del gioco ricevano un messaggio:


PHP:
function send_to_all($subject, $contents)
{
 global $db_id;
 
 $users=users();
 for ($i=0; $i<count($users); $i++)
 {
  $query="insert into reports(recipient, subject, contents, sent) values(".$users[$i][0].", '".mysql_escape_string($subject)."', '".mysql_escape_string($contents)."'
 , now())";
  mysql_query($query, $db_id);
 }
}

Ho circa capito come fare, praticamente creo una funzione simile a quella sovracitata dove passo anche l'id della alleanza presa in questione poi faccio un select dove trovo tutti gli utenti che hanno id del campo alliance uguale all'id della alleanza, li metto in un array e da lì mando il messaggio, il problema è che non so come mettere in un array il risultato, tipo faccio

SELECT id FROM users WHERE alliance = $id_ally poi faccio la QUERY e mi spunteranno vari valori poi però, faccio mysql_fetch_array per metterli in un unico array tutti gli utenti ai quali vorrei manadare il messaggio, dovrò poi fare un ciclo for per ripere l'azione per tutti i giocatori a cui volgioo manda il messaggio ?

Grazie in anticipo,

Marco
 
ciao, se non ho caito male quello che vuoi fare
prova così

PHP:
function metti_in_array($id_ally)
{
 global $db_id;
 $users=array();
 $query="SELECT id FROM users WHERE alliance='$id_ally'";
 mysql_query($query, $db_id);
 while($riga=mysql_fetch_array($query)){
  $users[]=$riga['id'];
 }
 return $users;//restituisce l'array $users[0], $users[1].....
} //fine function
 
Ultima modifica:
In pratica questo ti mette gli utenti che hanno lo stesso id_ally in array giusto ?

Ora per mandare un mesaggio ad ognuno di essi dovrei fare un ciclo for, dove tipo metto in un apice $i che si incrementa in modo da mandare il messaggio a tutti gli utenti contenuti nell'array ?

Grazie in anticipo,

Marco
 
Capito, quindi ora utilizzando la funzione che ho citato nel primo post che manda un messaggio agli utenti del gioco basta che gli passi l'array di questa funzione ed è tutto risolto se ho capito bene...

Edit:

Ho provato a creare la funzione utilizzando anche il codice di borgo italia, la funzione è questa:

PHP:
function send_to_ally($id_ally, $subject, $contents)
{
 global $db_id;
 $query="SELECT id FROM users WHERE alliance='$id_ally'";
 mysql_query($query, $db_id);
 while($riga=mysql_fetch_array($query)){
  $users_a[]=$riga['id'];
 }
 
 for ($i=0; $i<count($users_a); $i++)
 {
  $query="INSERT INTO reports(recipient, subject, contents, sent) VALUES(".$users_a[$i].", '".mysql_escape_string($subject)."', '".mysql_escape_string($contents)."', now())";
  mysql_query($query, $db_id);
 }
 
 //return $users_a;//restituisce l'array $users_a[0], $users_a[1].....
} //fine function

Richiamo la funzione passandole i parametri:
PHP:
send_to_ally($_GET['id'], $_POST["subject"], $_POST["contents"]);

Mi viene visualizzato il messaggio che tutto è andato a buon fine, ma nessuno degli utenti riceve il messaggio...

Secondo me c'è un erorre nella funzione send_to_ally, voi cosa dite ?

Grazie in anticipo,

Marco
 
Ultima modifica:
Correggi in questa maniera. Ho fatto anche qualche altro piccolo perfezionamento dove mi sembrava necessario:
PHP:
function send_to_ally($id_ally, $subject, $contents)
{
	global $db_id;

	$subject = mysql_real_escape_string($subject, $db_id);
	$contents = mysql_real_escape_string($contents, $db_id);
	
	$query = "SELECT id FROM users WHERE alliance='{$id_ally}'";
	$query = mysql_query($query, $db_id);

	$users_a = array();
	while($riga = mysql_fetch_assoc($query))
		$users_a[] = $riga['id'];

	foreach($users_a as $id)
	{
		$query = "INSERT INTO reports(recipient, subject, contents, sent) VALUES({$id}, '{$subject}', '{$contents}', now())";
		mysql_query($query, $db_id);
	}
}
 

Discussioni simili