Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Ein Problem mit Funktion und Platzhalter (https://boardunity.de/problem-funktion-platzhalter-t1810.html)

Jan Stöver 03.05.2004 19:03

Ein Problem mit Funktion und Platzhalter
 
Mhhh ... irgendwie ... ich weiss auch nicht.

Ich möchte auf einer nicht vB Seite die Online Nutzer (Mitglieder und Gäste) anzeigen lassen.

Die nicht vB Seite ist im Templateverfahren mit Platzhaltern für Funktionen aufgebaut ( {blablub} )

Im Template habe ich den Halter {whoson} ... dieser ist in der index.php wie folgt definiert:

Code:

if(strpos($strs,"{whoson}")>1)$tpl->Insert("{whoson}", board_online());

Die Funktion board_online schaut wie folgt aus und befindet sich in der functions.php


Code:

function board_online()
{
require_once("../**/online_extern.php");
}


Der Code aus der online_extern.php sieht so aus


Code:

<?php

error_reporting(E_ALL & ~E_NOTICE);

require_once("./includes/config.php");

function iif($expression, $returntrue, $returnfalse = '') {
        return ($expression ? $returntrue : $returnfalse);
}

mysql_connect($servername,$dbusername,$dbpassword);
mysql_select_db($dbname);

$showusernames = 0; // 1 um Usernamen anstelle der Anzal auszugeben

$settings = mysql_query("SELECT * FROM ".$tableprefix."setting WHERE varname = 'cookietimeout'");
$settings = mysql_fetch_array($settings);

$datecut = time()-$settings['value'];

if ($showusernames == 1)
{
        $regmembers = mysql_query("SELECT DISTINCT username,options FROM ".$tableprefix."user,".$tableprefix."session
                WHERE ".$tableprefix."session.userid=".$tableprefix."user.userid AND ".$tableprefix."session.lastactivity>$datecut
                ORDER BY username ASC") or exit("oops2");
               
        while($regmember = mysql_fetch_array($regmembers))
        {
                $regmember['options'] = intval($regmember['options']);
               
                foreach($regmember as $optionname => $optionval)
                {
                        $regmember["$optionname"] = iif($regmember['options'] & $optionval, 1, 0);
                }
               
                if ((($regmember['invisible'] == 0)) and $regmemberson or ($bbuserinfo['usergroupid'] == 6 and $regmember['invisible'] == 1))
                {
                        $regmemberson .= ", ";
                }
       
                $regmembercomma++;
                if ($regmember['invisible'] == 0 or $bbuserinfo['usergroupid'] == 6) {
                        if ($regmember['invisible'] == 1) {
                                $userinvisible = "*";
                        }
                                               
                        $regmemberson .= $regmember['username'].$userinvisible;
                } else {
                        $regmembercomma++;
                }
        }
       
        if (!$regmemberson)
        {
                $regmemberson = "(none)";
        }
               
} else {
        $regmembers = mysql_query("SELECT COUNT(DISTINCT userid) AS membersonline FROM ".$tableprefix."session WHERE userid>0 AND ".$tableprefix."session.lastactivity>$datecut") or exit("oops3");
        $regmembers = mysql_fetch_array($regmembers);
       
        $regmemberson = number_format($regmembers['membersonline']);
}

$howmany = substr_count($regmemberson,",");

if (($showusernames == 1 and $howmany >= 1) or ($showusernames == 0 and $regmemberson > 1))
{
        $memberstext = 'Mitglieder';
}
else
{
        $memberstext = 'Mitglied';
}

$guests = mysql_query("SELECT COUNT(userid) AS guestsonline FROM ".$tableprefix."session WHERE userid=0 AND ".$tableprefix."session.lastactivity>$datecut") or exit("oops4");
$guests = mysql_fetch_array($guests);

if ($guests['guestsonline'] > 1)
{
        $gueststext = 'Gäste';
}
else
{
        $gueststext = 'Gast';
}
$guestson = number_format($guests['guestsonline']);

$show = $memberstext.' online: '.$regmemberson.'. '.$gueststext.' online: '.$guestson.'.';

echo "<span style=\"font-family: Verdana; font-size: 12px\">$show</span>";

?>


Mein Problem ist nun nicht wirklich von mir erfassbar ... denn egal wo ich {whoson} einfüge, steht die Ausgabe immer ganz oben auf der Seite ...

Weiss jemand von euch, woran das liegen könnte? Wieso ich die Ausgabe von {whoson} nicht in eine Tabelle plaziert bekomme?

Akira 03.05.2004 19:08

ganz unten in der funktion steht doch ein echo drinnen.

du must das echo in einer variable speichern, das ganze per return zurückgeben und mit {whoson} ersetzen lassen.

du solltest in der funtion board_online() nicht die datei includen sondern den code selber in die funktion schreiben, das ergebnis zurückgeben lassen und dann mit {whoson} ersetzen.

Philipp Gérard 03.05.2004 19:16

Schreib den Krams aus der online_extern.php in die Funktion, die du auch aufrufst und ersetzt das "echo" einfach mit "return".

Jan Stöver 03.05.2004 19:20

Also meinst du wie folgt ...

functions.php

Code:


error_reporting(E_ALL & ~E_NOTICE);

chdir(../**/);

require_once("./includes/config.php");

chdir(../**/);

function iif($expression, $returntrue, $returnfalse = '') {
        return ($expression ? $returntrue : $returnfalse);
}

mysql_connect($servername,$dbusername,$dbpassword)  ;
mysql_select_db($dbname);

$showusernames = 0; // 1 um Usernamen anstelle der Anzal auszugeben

$settings = mysql_query("SELECT * FROM ".$tableprefix."setting WHERE varname = 'cookietimeout'");
$settings = mysql_fetch_array($settings);

$datecut = time()-$settings['value'];

if ($showusernames == 1)
{
        $regmembers = mysql_query("SELECT DISTINCT username,options FROM ".$tableprefix."user,".$tableprefix."session
                WHERE ".$tableprefix."session.userid=".$tableprefix."user.userid AND ".$tableprefix."session.lastactivity>$datecut
                ORDER BY username ASC") or exit("oops2");
               
        while($regmember = mysql_fetch_array($regmembers))
        {
                $regmember['options'] = intval($regmember['options']);
               
                foreach($regmember as $optionname => $optionval)
                {
                        $regmember["$optionname"] = iif($regmember['options'] & $optionval, 1, 0);
                }
               
                if ((($regmember['invisible'] == 0)) and $regmemberson or ($bbuserinfo['usergroupid'] == 6 and $regmember['invisible'] == 1))
                {
                        $regmemberson .= ", ";
                }
       
                $regmembercomma++;
                if ($regmember['invisible'] == 0 or $bbuserinfo['usergroupid'] == 6) {
                        if ($regmember['invisible'] == 1) {
                                $userinvisible = "*";
                        }
                                               
                        $regmemberson .= $regmember['username'].$userinvisible;
                } else {
                        $regmembercomma++;
                }
        }
       
        if (!$regmemberson)
        {
                $regmemberson = "(none)";
        }
               
} else {
        $regmembers = mysql_query("SELECT COUNT(DISTINCT userid) AS membersonline FROM ".$tableprefix."session WHERE userid>0 AND ".$tableprefix."session.lastactivity>$datecut") or exit("oops3");
        $regmembers = mysql_fetch_array($regmembers);
       
        $regmemberson = number_format($regmembers['membersonline']);
}

$howmany = substr_count($regmemberson,",");

if (($showusernames == 1 and $howmany >= 1) or ($showusernames == 0 and $regmemberson > 1))
{
        $memberstext = 'Mitglieder';
}
else
{
        $memberstext = 'Mitglied';
}

$guests = mysql_query("SELECT COUNT(userid) AS guestsonline FROM ".$tableprefix."session WHERE userid=0 AND ".$tableprefix."session.lastactivity>$datecut") or exit("oops4");
$guests = mysql_fetch_array($guests);

if ($guests['guestsonline'] > 1)
{
        $gueststext = 'Gäste';
}
else
{
        $gueststext = 'Gast';
}
$guestson = number_format($guests['guestsonline']);

$show = $memberstext.' online: '.$regmemberson.'. '.$gueststext.' online: '.$guestson.'.';

return $show;

Und wie genau läuft das dann in der index? Die kennt ja dann $show ...

Code:

if(strpos($strs,"{whoson}")>1)$tpl->Insert("{whoson}",                                board_online());
Was muss dann daran genau geändert werden?

Jan Stöver 03.05.2004 19:56

Ich Döddel ... :)

Vorhin haue ich ewig rum, weil ich die Funktion nicht richtig definiert hatte in der index.php und nu so ein Kleinkram ... naja - sagte in einem anderen Thread nicht umsonst, dass ich ein Noob bin :D

Dankeschön!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25