Seite 1 von 1

Rows bzw. Reihen

Verfasst: 19.03.2008 17:52
von Jimmy90
In den Templates sieht man ja desöfteren Kommentare ala´BEGIN postrow o.ä. Allerdings blicke ich da noch nicht so recht durch. Könnte mir vllt. einer auf die Spränge helfen und mir die rows ein wenig genauer erläutern bzw. sagen, ob folgendes Beispiel für eine Reihe prinzipiell korrekt wäre?

Gehen wir von der Tabelle phpbb_my_table aus, die in constans.php bereits eingetragen wurde. Die Tabelle enthält folgende Spalten und Werte:

id, user_id, username, user_from
1, 2, Jimmy, Berlin
2, 56, Hans, Dresden
3, 28, Georg, Bonn

Und nein, ich möchte keine Antwort wie "mach´s doch mit $user->data[...]" - die Spalten und Werte sind rein fiktiv.

Code: Alles auswählen

// Ganz simpel gehaltene SQL-Abfrage für die spätere row ...
$sql = 'SELECT *
		FROM ' . MY_TABLE;
		
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

$myrow = array(
			'USER_ID'	=> $row['user_id'],
			'USERNAME'	=>  $row['username'],
			'USER_FROM'	=> $row['user_from'],
		);
		
$template->assign_block_vars('myrow', $myrow);
Jetzt müsste aus folgendem Template:

Code: Alles auswählen

<!-- BEGIN myrow -->
    <table>
    <tr>
        <td>{USER_ID}</td>
        <td>{USERNAME}</td>
        <td>{USER_FROM}</td>
    </tr>
    </table>
<!-- END myrow -->
doch eigentlich - sobald dieses mit dem oben angegebenen Code (korrekt?) geparst wurde - das hier werden, oder? :

Code: Alles auswählen

    <table>
    <tr>
        <td>2</td>
        <td>Jimmy</td>
        <td>Berlin</td>
    </tr>
    </table>
    <table>
    <tr>
        <td>56</td>
        <td>Hans</td>
        <td>Dresden</td>
    </tr>
    </table>
    <table>
    <tr>
        <td>28</td>
        <td>Georg</td>
        <td>Bonn</td>
    </tr>
    </table>

Re: Rows bzw. Reihen

Verfasst: 19.03.2008 19:53
von nickvergessen

Code: Alles auswählen

<!-- BEGIN myrow -->
    <table>
    <tr>
        <td>{myrow.USER_ID}</td>
        <td>{myrow.USERNAME}</td>
        <td>{myrow.USER_FROM}</td>
    </tr>
    </table>
<!-- END myrow -->

Verfasst: 19.03.2008 20:51
von Jimmy90
Ok, danke. Der Rest stimmt so?

Edit:
Selbst herausgefunden :D
Da hat einfach noch ´ne Schleife gefehlt.

Verfasst: 20.03.2008 17:41
von Amaya
Hey, ich habe das selbe Problem wie Jimmy90, leider klappt das mit den Vorgaben von hier noch nicht so richtig und ich weiß nicht so recht, wo der Fehler liegen könnte. Das ist meine SQL Abfrage:

Code: Alles auswählen

$sql = 'SELECT u.user_id, u.username, u.user_rank, u.user_avatar, r.rank_id, r.rank_title
        FROM ' . USERS_TABLE . ' u, ' . RANKS_TABLE . " r
		WHERE chara_typ = '1'
		AND u.user_rank = r.rank_id
		ORDER BY u.username";
      
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

$hauptchara = array(
         'USER_ID'   => $row['user_id'],
         'USERNAME'   =>  $row['username'],
         'RANK'   =>  $row['rank_title'],

      );
      
$template->assign_block_vars('hauptchara', $hauptchara); 
Und das steht im Template:

Code: Alles auswählen

<!-- BEGIN hauptchara -->	

<b>&raquo; </b><a href="memberlist.php?mode=viewprofile&u={hauptchara.USER_ID}" class="zweitcharas">{hauptchara.USERNAME}</a>
 [{hauptchara.RANK}]
 <br>
<!-- END hauptchara -->
Funktioniert auch soweit, bis auf eine Ausnahme, ich bekomme nur eine Reihe ausgegeben, obwohl es mehr sein müssten laut SQL Abfrage. Was mache ich falsch?

Danke für Hilfe.

Verfasst: 20.03.2008 18:43
von nickvergessen

Code: Alles auswählen

$sql = 'SELECT u.user_id, u.username, u.user_rank, u.user_avatar, r.rank_id, r.rank_title
        FROM ' . USERS_TABLE . ' u, ' . RANKS_TABLE . " r
		WHERE chara_typ = '1'
		AND u.user_rank = r.rank_id
		ORDER BY u.username";
      
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
while ($row = $db->sql_fetchrow($result))//ADDED by NV
{//ADDED by NV
      $hauptchara = array(
            'USER_ID'   => $row['user_id'],
            'USERNAME'   =>  $row['username'],
            'RANK'   =>  $row['rank_title'],
      );
      
      $template->assign_block_vars('hauptchara', $hauptchara);
}//ADDED by NV
$db->sql_freeresult($result);
siehe //ADDED by NV

Verfasst: 20.03.2008 19:11
von Amaya
Danke nickvergessen für deine Antwort, leider scheint heute echt jemand was gegen mich zu haben, jetzt bekomme ich zwar den zweiten User angezeigt, auf den die Abfrage zutrifft, allerdings nur diesen und den ersten nicht mehr. *seufz* Ich bin zu blond dafür. :(

Edit: Habs gerademal mit dem anderen Usertype probiert, dort müssten drei User auftauchen, aber es werden nur zwei angezeigt. Es scheint also, dass weshalb auch immer, jeweils das erste Ergebnis verschluckt wird.

Verfasst: 21.03.2008 00:25
von nickvergessen
entferne testweise mal

Code: Alles auswählen

$row = $db->sql_fetchrow($result);
das sollte überflüssig sein (das erste mal, nicht das im while()

Verfasst: 21.03.2008 01:35
von Amaya
Mein Held :D

Ich hab alles mögliche entfernt, umgestellt und ausprobiert, aber auf diese dumme Zeile bin ich nicht gekommen. Jetzt muss ich nur noch eine zweite abhängige Abfrage einbasteln und das leidige Thema Zweitcharas ist auch gegessen.

Tausend Dank.