Archief - Q: Smarty & SQL

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

iamdesign

Legacy Member
Hoy,

Ik ben bezig met een nieuwssysteem te schrijven in php, met smarty als template engine

Nu is mijn probleem dat ik niet weet hoe ik de naam van de poster kan weergeven.

Mijn DB structuur ziet er als volgt uit:

Tabel eann_members
userid(prim key, autoincrement)
naam(tekst)

Tabel eann_news
newsid(prim key, autoincrement)
userid (int)
subject (varchar)
message (text)

--------------------------------------
Mijn php bestand ziet er zo uit:
eann_news.php

PHP:
// maak nieuwe smarty aan
	$smarty = new Smarty();
	
	//haal alle niewsberichten op
	$sql = "SELECT newsid, userid, posttime, subject FROM eann_news";
	$result = mysql_query($sql);
	
	while($rij = mysql_fetch_assoc($result))
	{
		$arrElements[] = $rij;
	}
	
	$smarty->assign("newsElements", $arrElements);
	
	$smarty->display('eannNews.tpl');

en mijn template bestand ziet er zo uit:
eann_news.tpl

PHP:
{section name="i" loop=$newsElements}
	<table class="table_viewNews" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<th colspan="1">{$newsElements[i].subject} by {$newsElements[i].userid} ({$newsElements[i].posttime|date_format:"%d/%m/%Y  %H:%M"})</th>
			</tr>
			
			<tr>
				<td><a href="">Read more...</a></td>
			</tr>
			
	</table>
	<br  />
{/section}

Zoals je wellicht merkt krijg ik nu vlg lijn:

test 1 by 1 (22/06/2006 18:16)

Nu moet die "by 1", feitelijk "by Jan" worden :)

ma ik versta niet hoe ik dit moet doen binnenin smarty, hopelijk kan iemand hier mij dit uitleggen :)
ik weet dat ik een sql moet schrijven die die userid moet vervangen door de loginname, maja...hier zit ik vast :-/

Ik hoop dat ik het probleem goed genoeg heb omschreven!

Bedankt alvast

EDIT

ik heb ondertussen al uitgevonden dat ik met

PHP:
$sql = "SELECT eann_members.loginname FROM eann_members, eann_news WHERE eann_members.userid = eann_news.userid";

de naam er uit krijg, ma hoe kan ik dit nu verwerken in die andere sql :-/

dJeez

Legacy Member
Je kan alvast beginnen door in je query een join te leggen tussen uw news en members tabel en ook de naam uit de members tabel te selecteren. Daarna vervang je in de template userid door naam en 't is in orde.

iamdesign

Legacy Member
dat heb ik net uitgevonden (zie de edit onderaan de post)

maar nu moet ik die 2 kunne combinere :-/

dJeez

Legacy Member
Ik zeg het toch : leg een join tussen uw 2 tabellen en selecteer alle kolommen die je nodig hebt.

killgore

Legacy Member
iamdesign zei:
ik heb ondertussen al uitgevonden dat ik met

PHP:
$sql = "SELECT eann_members.loginname FROM eann_members, eann_news WHERE eann_members.userid = eann_news.userid";

de naam er uit krijg, ma hoe kan ik dit nu verwerken in die andere sql :-/


gewoon de andere velden ook selecteren via eann_news.veldnaam

iamdesign

Legacy Member
ok bedankt allemaal voor je uitleg, het werkt nu met de vlg sql:

eann_news.php
PHP:
$sql = "SELECT eann_news.newsid, eann_news.userid, eann_news.posttime, eann_news.subject, eann_members.loginname FROM eann_members, eann_news WHERE eann_members.userid = eann_news.userid";
	$result = mysql_query($sql);
	$rij = mysql_fetch_assoc($result);
	
	while($rij = mysql_fetch_assoc($result))
	{
		$arrNewsElements[] = $rij;
	}
	$smarty->assign("newsElements", $arrNewsElements);

eann_news.tpl
PHP:
<body>

{section name="i" loop=$newsElements}
	<table class="table_editProfile" border="0" cellpadding="0" cellspacing="0">
			<tr>
				<th colspan="1">{$newsElements[i].subject} by {$newsElements[i].loginname} ({$newsElements[i].posttime|date_format:"%d/%m/%Y  %H:%M"})</th>
			</tr>
			
			<tr>
				<td><a href="">Read more...</a></td>
			</tr>
			
	</table>
	<br  />
{/section}
</body>

maar er is wel 1 raar dingetje, hij toont niet de eerste post, hij begint vanaf de 2e?

zie ik hier nog iets over het hoofd ofzo :) (wat gerust zou kunne, maar ik ben hier om bij te lere)

//Edit

ik heb het al gevonden (ik zag idd dus iets over het hoofd :p)
PHP:
$rij = mysql_fetch_assoc($result);
	
	while($rij = mysql_fetch_assoc($result))
	{
		$arrNewsElements[] = $rij;
	}

moet uiteraard

PHP:
	while($rij = mysql_fetch_assoc($result))
	{
		$arrNewsElements[] = $rij;
	}


bedankt allemaal voor jullie hulp!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan