Pagina 1 di 2

[PHPBB]Passare Blocco di variabili al Template

Inviato: 26/05/2012, 22:02
da xX_Simon_Xx
Io vorrei passare un gran numero di variabili per creare una tabella ora mi spiego meglio
allora io seleziono le variabili così

Codice: Seleziona tutto

$result = mysql_query("SELECT * FROM `case`");
la tabella "case" è così strutturata:
Immagine
quindi io vorrei passare al template tutte queste variabili per fare una tabella di questo tipo
IDCASA | PROPRIETARIO
1 | Tizio
2 | Caio
3 | Sempronio

e così via per tutti gli ID

per caricare le variabili avevo pensato a una cosa del genere

Codice: Seleziona tutto

foreach($result as $row)
{
     $template->assign_block_vars('case', array(
		'ID'    => $row[id],
		'PROPRIETARIO'    => $row[Proprietario],
	));
}
e poi nell template così

Codice: Seleziona tutto

<table>
<!-- BEGIN case -->
	<tr>
		<td>{case.ID}</td>
		<td>{case.PROPRIETARIO}</td>
    </tr>
<!-- END case -->
</table>
penso si a tutto giusto ma da questo errore

Codice: Seleziona tutto

Invalid argument supplied for foreach()
non conoscendo bene il foreach non riesco a capire dove sta il problema

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 26/05/2012, 22:55
da xX_Simon_Xx
Ho provato anche a fare in questo modo

Codice: Seleziona tutto

$result = mysql_query("SELECT * FROM `case`");
	$num = mysql_numrows($result);
	$i=0;
	while ($i < $num)
	{
		$id = mysql_result($result,$i,"id");
		$propr = mysql_result($result,$i,"Proprietario");
		$template->assign_block_vars('case', array(
		  'ID'    => $id,
		  'PROPRIETARIO'    => $template,
	   ));
	}
ma da questo errore

Codice: Seleziona tutto

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 72 bytes)
evidentemente la query è troppo pesante D: datemi una mano

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 27/05/2012, 11:55
da Lady R
se provi a fare un echo dei valori funziona? intendo, il problema è nella creazione della variabile del template o del fetch da database?

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 27/05/2012, 18:11
da xX_Simon_Xx
Lady R ha scritto:se provi a fare un echo dei valori funziona? intendo, il problema è nella creazione della variabile del template o del fetch da database?
Allora io ho provato a fare così

Codice: Seleziona tutto

        $result = mysql_query("SELECT * FROM `case`");
	$num = mysql_numrows($result);
	for ($i = 1; $i <= $num ; $i++)
	{
		$result = mysql_query("SELECT `id`,`Proprietario` FROM `case` WHERE `id` = '$i'");
		if(mysql_num_rows($result) !=0)
		{
			while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
			{
				$id = $row['id'];
				$prop = $row['Proprietario'];
			}
			$template->assign_block_vars('case', array(
				'ID'    => $id,
				'PROPRIETARIO'    => $prop,
			));
		 }
		 else
		 {
			continue;
		 }
	}
	$template->set_filenames(array(
		'body' => 'registro-body.html',
	));
funaziona perfettamente l'unico problema è che se io ad esempio nel mio database ho 449 case
se io provo ad eliminare la 448
nella tabella del template la lista si ferma alla 447 perchè???
il mysql_numrows($result) ritorna 448 quindi giustamente il for arriva fino al 448 ma non esistendo il 448 mostra solo fino al 447
come faccio quindi per mostrare anche ail 449??

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 27/05/2012, 21:59
da Carlo
Nel primo codice fornito, invece di usare un ciclo foreach, usa questo:

Codice: Seleziona tutto

while($row = $db->sql_fetch($result)) 

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 27/05/2012, 22:29
da xX_Simon_Xx
Carlo ha scritto:Nel primo codice fornito, invece di usare un ciclo foreach, usa questo:

Codice: Seleziona tutto

while($row = $db->sql_fetch($result))
da questo errore

Codice: Seleziona tutto

Fatal error: Call to undefined method dbal_mysqli::sql_fetch()

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 28/05/2012, 18:23
da Carlo
Sì, scusa, il metodo si chiama sql_fetchrow e non sql_fetch.

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 28/05/2012, 19:09
da xX_Simon_Xx

Codice: Seleziona tutto

$result = mysql_query("SELECT * FROM `case`");
		while($row = $db->sql_fetchrow($result))
		{
			$id = $row['id'];
			$prop = $row['Proprietario'];
			$valore = $row['Costo'];
			$template->assign_block_vars('case', array(
				'ID'    => $id,
				'PROPRIETARIO'    => $prop,
				'VALORE'    => $valore,
			));
		}
non appare nulla :|

l'unico sistema che funziona è con il for in questo modo

Codice: Seleziona tutto

for ($i = 1; $i < 1000 ; $i++)
		{
			$result = mysql_query("SELECT `id`,`Proprietario`,`Costo` FROM `case` WHERE `id` = '$i'");
			if(mysql_num_rows($result) !=0)
			{
				while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
				{
					$id = $row['id'];
					$prop = $row['Proprietario'];
					$valore = $row['Costo'];
				}
				$template->assign_block_vars('case', array(
					'ID'    => $id,
					'PROPRIETARIO'    => $prop,
					'VALORE'    => $valore,
				));
			 }
			 else
			 {
				continue;
			 }
		}
però ad esempio se io supero 1000 nella tabella del database (cosa improbabile) devo star li a cambiare di volta in volta il numero tu dici che con il foreach si può risolvere??
PS: è un piacere rivederti carlo :D

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 28/05/2012, 23:33
da Carlo
Devi usare le funzioni specifiche di phpBB per lavorare con il database.

Ovvero, al posto di usare mysql_query() devi usare $db->sql_query().

Re: [PHPBB]Passare Blocco di variabili al Template

Inviato: 29/05/2012, 11:45
da xX_Simon_Xx
Carlo ha scritto:Devi usare le funzioni specifiche di phpBB per lavorare con il database.

Ovvero, al posto di usare mysql_query() devi usare $db->sql_query().
al posto di $db devo mettere la mia varibile della connnsesisone???
tipo

Codice: Seleziona tutto

$con = mysql_connect(SQL_SERVER, SQL_USERNAME, SQL_PASSWORD);
mysql_select_db(SQL_DB, $con);
$con->sql_query()