IF ELSE Abfrage mit Funktionen

patator

Mitglied
Hallo Leute ich Poste mal meine beiden Funktionen und dann das Problem:

PHP:
function ermittle_user_optionen($userid,$option)
{
	//	1`show_email` int(1) NOT NULL default '0',
	//	2`show_homepage` int(1) NOT NULL default '0',
	//	3`show_skype` int(1) NOT NULL default '0',
	//	4`show_icq` int(1) NOT NULL default '0',
	//	5`show_msn` int(1) NOT NULL default '0',
	//	6`show_aol` int(1) NOT NULL default '0',
	//	7`show_yahoo` int(1) NOT NULL default '0',
	//	8`show_avatar` int(1) NOT NULL default '0',
	//	9`email_delivery` int(1) NOT NULL default '0',
	//	10`newsletter` int(1) NOT NULL default '0',

	global $preffix;
	
	$rechtsql   = 'SELECT * FROM '.$preffix.'user WHERE userid="'.$userid.'"';
	$rechtquery = mysql_query($rechtsql);
	$x          = mysql_fetch_array($rechtquery);
	
	if($option == 1)
	{
		if($x['show_email'] == 1){ return true;}
		else{return false;}
	}
	elseif($option == 2)
	{
		if($x['show_homepage'] == 1){ return true;}
		else{return false;}
	}
	elseif($option == 3)
	{
		if($x['show_skype'] == 1){ return true;}
		else{return false;}
	}
	elseif($option == 4)
	{
		if($x['show_icq'] == 1){ return true;}
		else{return false;}
	}	
	elseif($option == 5)
	{
		if($x['show_msn'] == 1){ return true;}
		else{return false;}
	}
	elseif($option == 6)
	{
		if($x['show_aol'] == 1){ return true;}
		else{return false;}
	}	
	elseif($option == 7)
	{
		if($x['show_yahoo'] == 1){ return true;}
		else{return false;}
	}	
	elseif($option == 8)
	{
		if($x['show_avatar'] == 1){ return true;}
		else{return false;}
	}
	elseif($option == 9)
	{
		if($x['email_delivery'] == 1){ return true;}
		else{return false;}
	}	
	elseif($option == 10)
	{
		if($x['newsletter'] == 1){ return true;}
		else{return false;}
	}	
}	


function ermittle_status_indikator($userid)
{

	global $preffix;
	$forum_sql   = 'SELECT * FROM '.$preffix.'user WHERE activated=1 AND userid="'.$userid.'"';
	$forum_query = mysql_query($forum_sql);
	$x           = mysql_fetch_array($forum_query);
	
	//	`skype` varchar(255) NOT NULL default '',
	//	`icq` varchar(255) NOT NULL default '',
	//	`msn` varchar(255) NOT NULL default '',
	//	`aol` varchar(255) NOT NULL default '',
	//	`yahoo` varchar(255) NOT NULL default '',

	//	3`show_skype` int(1) NOT NULL default '0',
	//	4`show_icq` int(1) NOT NULL default '0',
	//	5`show_msn` int(1) NOT NULL default '0',
	//	6`show_aol` int(1) NOT NULL default '0',
	//	7`show_yahoo` int(1) NOT NULL default '0',
	
	if(ermittle_user_optionen($x['userid'],3))
	{
		return'<a href="skype:'.$x['skype'].'?chat"><img src="http://snind.gotdns.com:8080/skype/'.$x['skype'].'"	align="absmiddle" border="0" alt="Skype Online Status Indicator" onerror="this.onerror=null;this.src=\'http://snind.gotdns.com:8080/image/skypeunknown.gif\';"></a>';
	}
	
	echo $x['userid'];
	if(ermittle_user_optionen($x['userid'],4))
	{
		return'<a href="http://snind.gotdns.com:8080/message/icq/'.$x['icq'].'"><img src="http://snind.gotdns.com:8080/icq/'.$x['icq'].'"	align="absmiddle" border="0" alt="ICQ Online Status Indicator" onerror="this.onerror=null;this.src=\'http://snind.gotdns.com:8080/image/icqunknown.gif\';"></a>';	
	}
	
	if(ermittle_user_optionen($x['userid'],5))
	{
		return'<a href="http://snind.gotdns.com:8080/message/msn/'.$x['msn'].'"><img src="http://snind.gotdns.com:8080/msn/'.$x['msn'].'" align="absmiddle" border="0" alt="MSN Online Status Indicator"	onerror="this.onerror=null;this.src=\'http://snind.gotdns.com:8080/image/msnunknown.gif\';"></a>';	
	}
	
	if(ermittle_user_optionen($x['userid'],6))
	{
		return'<a href="aim:goim?screenname='.$x['aim'].'"><img src="http://snind.gotdns.com:8080/aim/'.$x['skype'].'" align="absmiddle" border="0" alt="AIM Online Status Indicator"	onerror="this.onerror=null;this.src=\'http://snind.gotdns.com:8080/image/aimunknown.gif\';"></a>';
	}		

	if(ermittle_user_optionen($x['userid'],7))
	{
		return'<a href="ymsgr:sendIM?'.$x['yahoo'].'"><img src="http://snind.gotdns.com:8080/yahoo/'.$x['yahoo'].'"	align="absmiddle" border="0" alt="Yahoo Online Status Indicator"	onerror="this.onerror=null;this.src=\'http://snind.gotdns.com:8080/image/yahoounknown.gif\';"></a>';
	}
}


Nun mein Problem, ich schreibe gerade ein Portal das mir Userabhängig Infos preisgibt, die der User auch freigeschalten hat.
Die Funktion ermittle_status_indikator($userid) wird mit der Eintragsid der Usertabelle aufgerufen.
Funktioniert bis zur ersten Abfrage super, aber der 2ten kommt nichts mehr.
Ich habe schon versucht das zu analysieren.
In der Funktion ermittle_status_indikator($userid) habe ich ein Echo gesetzt nach der Skype Ausgabe, da kommt nichts mehr.
Irgendwie verliert er nach dem ersten Aufruf das Array $x.
Habt Ihr mir da nen Tip?
 
Eine Funktion gibt genau einen Wert zurück.
Wenn du jetzt nacheinander Werte an das aufrufende Script zurückgibst, wird natürlich nur der erste Wert genommen, da nach einem return das Script an dieser Stelle beendet wird.
Bau die Funktion einfach anders auf und kombiniere beide Funktionen. Du übergibst di userID und die zu überprüfende option.
Die Funktion gibt false (oder -1) zurück, wenn die option nicht angezeigt werden soll und den richtigen Wert, wenn die option angezeigt werden soll.
 
Danke für die Info,
allerdings rufe ich die Funktion ja mehrmals auf.
Die soll ja reagieren wenn der Fall eintritt.
Ich prüfe ja erst in der Indikatorfunktion ob die einzelnen Punkte zum Anzeigen verfügbar sind.
Auch wenn ich beim ermitteln der Optionen ne 1 oder 0 Übergebe bleibt er beim ersten stehen.
Ich muss ja sonst x mal den array query absetzen.
Kannst Du mir kurz an einem Beispiel Deinen Tip erläutern?
 
Halllo patator,

ich habe des Gefühl dass du da irgendwie zu kompliziert rangehst, es wäre einfacher das ganze zu kombinieren.

Ungefähr so:
PHP:
function ermittle_user_optionen($userid,$option)
{
    global $preffix;
    $options = array(
        1  => 'show_email',
        2  => 'show_homepage',
        3  => 'show_skype',
        4  => 'show_icq',
        5  => 'show_msn',
        6  => 'show_aol',
        7  => 'show_yahoo',
        8  => 'show_avatar',
        9  => 'email_delivery',
        10 => 'newsletter'
    );
    $rechtsql   = 'SELECT * FROM '.$preffix.'user WHERE userid="'.$userid.'"';
    $rechtquery = mysql_query($rechtsql);
    $x          = mysql_fetch_array($rechtquery);

    return ($x[$options[$option]] == 1) ? true : false;
}

Wie du siehst, sparst du dir damit einiges an Code :)
Müsste eigentlich so funktionieren, sollte es nicht gehen, schreib einfach nochmal.

Achja, ich würde dir noch empfehlen anstatt global einfach eine Konstante für den Prefix zu nehmen. global ist eine sehr sehr unschöne Art zu programmieren, und sollte vermieden werden.

Und hier hast noch nen Link, welcher vielleicht auch ganz Hilfreich ist klick.

So, genug gemeckert :D

Gruß

Devil
 
Zurück