Unterschied der beiden Sachen ....

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
B

ByeBye 8492

Moinsen,

habe ein Problem mit 2 Anweisungen :eek:.

Also ich lasse in meiner Login Datei ein Cookie mit dem Namen "user" anlegen.
Welches quer durch mein Programm hindurch genutzt wird.

Ich habe eine Funktion mit dem Namen "is_user".
Hier wird geguckt ob das Cookie richtig ist und ob der User existiert, wenn dem so ist, wird 1 zurückgegeben und wenn nicht 0.
Diese Funktion binde ich über "is_user($user) " ein.


Ich lasse natürlich auch Blöcke rendern um das Menü darzustellen, diese Blöcke haben verschiede "Userpunkte", das heisst, das nicht alle User alle Blöcke sehen sollen, so sollen zum Beispiel die angemeldeten Benutzer das Login Feld nicht mehr sehen, deshalb habe ich dem Login Feld in der Datenbank das Parameter (view = ) 3 gegeben.

In meinem Ausgabe script, geht eine Funktion durch die Datenbank durch und sucht sich alle Blöcke einer Seite raus block(seite).

Soweit sogut.

PHP:
function block($side){
global $admin, $user, $db, $prefix;

$side[0] = strtolower($side[0]); 		// wir wollen ja nur Blocks von der richtigen Seite haben, gell?
$position = $side[0];					// weist der Variable Position die Koordinaten zu, damit sie richtig agieren kann

$sql		= "select * from ". $prefix ."_block where side = '$position' and active = 1 order by gewicht asc";
$db 		-> query($sql);
for($i=0; $i < $db -> num_rows(); $i++)
{
$result 	= $db -> fetch_array();
$bid		= $result[bid];
$title		= $result[title];
$content	= $result[content];
$view		= $result[view];
$side		= $result[side];
$adminblock	= $result[admin];
$weight		= $result[gewicht];
$blockfile	= $result[blockfile];
		if($adminblock){    // ruft den Adminblock bei Bedarf auf :)
			//adminblock();
		}
		elseif($adminblock == "0")
		{
			if($view == 0){ // freigegeben für alle Besucher 
				render_block($title, $content, $side, $weight, $blockfile);
			}
			elseif($view == 1 AND is_user($user) || is_admin($admin)){   // für Admins und USER
				render_block($title, $content, $side, $weight, $blockfile);
			}
			elseif($view == 2 AND is_admin($admin)){			// nur für Admins :cool:, zum Beispiel nicht freigegebene Blöcke
				render_block($title, $content, $side, $weight, $blockfile);
			}
			elseif($view == 3 AND !is_user($user) || is_admin($admin)){		// nur für Besucher!
				render_block($title, $content, $side, $weight, $blockfile);
			}
		} 
		
}
}

Das ist die Funktion, die dann wenn die Blöcke sortiert sind und alles an die Ausgabe Funktion weitergibt.

Mein Problem ist, das wenn ich angemeldet bin als User, ich kein Block sehen kann, der ungleich 0 ist, d.h wenn es so einen Block gibt derdas Parameter 1 oder 3 hat, liest er den Block aus der Datenbank aus und dann passiert nichts, das heisst es erfolgt keine Ausgabe von dem Block.

Wenn also in der Datenbank folgenden Blöck gespeichert sind:

Name | gewicht | view
Test 1 0
Test2 2 0
Fehler 3 3
Test3 4 0

Dann gibt er die Blöcke Test und Test2 aus und ab da an schneidet er dann alles ab, obwohl er doch eigentlich nur den "Fehler" Block überspringen soll.

Die gleiche Situation ist es bei Blöcken die nur für angemeldete User zur Verfügung stehen sollen ...

Anders sieht es aus, wenn ich das Cookie lösche und in der Funktion is_user(), die Return Werte vertausche .... .
Also wenn ich angebe, das obwohl kein User angemeldet ist, trotzdem die 1 ausgeben wird, dann geht alles wie geünscht und alle Blöcke ausser Fehler werden ausgelesen, praktisch so wie es sein muss.

ist irgendwann mit der Anweisung !is_user($user) kaputt

Ich weiß irgendwie nicht mehr weiter
 
Abgesehen von der Verständlichkeit und den Grammatikfehlern wäre es doch interessant, deine Funktionen is_user(); und is_admin(); zu sehen, wenn du sagst das damit irgendwas nicht stimmt / stimmen könnte.

Ansonsten lieg ich da richtig, das er bei angemeldeten User die "Blöcke" Test1, Test2 und Test 4 ausgeben soll und bei Admin Status alle 4?
 
Original geschrieben von Mairhofer
Abgesehen von der Verständlichkeit und den Grammatikfehlern wäre es doch interessant, deine Funktionen is_user(); und is_admin(); zu sehen, wenn du sagst das damit irgendwas nicht stimmt / stimmen könnte.

Ansonsten lieg ich da richtig, das er bei angemeldeten User die "Blöcke" Test1, Test2 und Test 4 ausgeben soll und bei Admin Status alle 4?

Richtig.


Habe jetzt noch ein paar Feldtests gemacht und herausgefunden, dass sobald ich die Funktion is_user() _einmal_ einsetze, sie für den Rest der Blöcke auf der betreffenden Seite nicht mehr funktioniert :eek:.

Wenn ich allerdings in der Blockfunktion hinschreibe:
PHP:
function block($side){
global $admin, $user, $db, $prefix;
$user	= &$user;
$user	= is_user($user);

Und dann halt noch die View Abfragen unten anpasse, dann gibt er alles so aus, wie er soll, diese Möglichkeit ist mir allerdings mehr oder weniger suspekt, weil ich das eigentlich über die Funktion ablaufen lassen wollte, dafür habe ich die doch geschrieben ..... .

So hier ist mal die Userfunktion, ob die Adminfunktion klappt, weiß ich noch nicht, das muss ich noch austeste und das kann ich erst wenn mein Admin Center fertig ist ...

PHP:
function is_user($user){
global $db, $prefix;
if(!is_array($user))
{
	$user	= base64_decode($user); 		// das Cookie nen bisschen auspacken 
	$user	= explode(":", $user);			// Die Daten daraus erkennen	
	$name	= $user[0];						// und zuweisen ....
	$pwd	= $user[1];
}
Else
{
	$name	= $user[0];						// wenn es doch schon ein array ist 
	$pwd	= $user[1];
}
if($name != "" && $pwd != "")
{
	$sql	= "select pass from ". $prefix ."_user where name = '$name'";
	$db 	-> query($sql);
	$result	= $db -> fetch_array();
	if($result[pass] == $pwd && $result[pass] != "")
	{
	return 1;
	}
}
	return 0;
}
 
Ok, hab das Problem jetzt auch alleine gelöst, also ich habe eine Referenz auf das Datenbankobjekt gelegt und seit dem geht es Perfekt B). :)
 
Zurück