Problem bei Datenbankabfrage

Status
Nicht offen für weitere Antworten.
Hallo,

also ich versuche gerade ein eigenes Forum für unsere Clan-Site zu basteln. Und hab da ein großes Problem bei einer Datenbankabfrage.

Und zwar versuche ich die Rechte des Users der gerade eingeloggt ist abzufragen.

Mit diesem Script:

PHP:
if (!empty ($_SESSION['user_id'])) {
     
     $group = $_SESSION['forum_group']; }
     
     else {
     
     $group = 5;
     }
     
     			//Rechte aus DB abfragen
     			
 			$rechteabfrage = "SELECT * FROM board_groups where groupid = '".$group."'";
     			$rechteergebnis = mysql_query($rechteabfrage);
     			$rechte = mysql_fetch_array($rechteergebnis);

Kurze erklärung dazu:
Wenn sich jemand einloggt wird die ihm zugeteilte Forumgruppen - id ausgelesen und in einer SESSION gespeichert. Und hier dann wiederum in einer Variable gespeichert ($group). Das funtzt auch einwandfrei.
Wenn der jenige nicht eingeloggt ist bekommt die Variable $group den Wert 5. Weil das die Gruppe ist für die Gäste im Forum. Das funtzt soweit auch.
Nun werden mit hilfe dieser Variable die Rechte aus der DB abgefragt. Sollte soweit eigentlich auch funktionieren.
Das ganze steht in einer extra php Datei (forum_rechte.php). Weil ich die abfrage häufiger brauch. Nun include ich diese Datei in meine forum_showposts.php. Dort brauch ich diese Abfrage um fest zu legen ob der Link zum editieren eines Posts angezeigt werden soll oder nicht.

Hier mal das Script für die forum_showposts.php:

PHP:
<?php
     include ("./includes/connectdb.php");
     include ("./includes/checkuser.php");
     include ("./includes/forum_rechte.php");
     
     $fid = $_GET['fid'];
     			$tid = $_GET['tid'];
     			
     			include ("./includes/tpl/forum_showposts2.tpl");
     			
 		 $abfrage1	= "SELECT * FROM board_answers WHERE fid='".$_GET['fid']."' AND tid='".$_GET['tid']."'";
     			$ergebnis1   = mysql_query($abfrage1);
     			$anzahl_posts = mysql_num_rows($ergebnis1);
     			
     			if (!empty($_SESSION['user_id'])) {
 		 $abfrage2	= "SELECT * FROM benutzerdaten WHERE id='".$_SESSION["user_id"]."'";
     			$ergebnis2   = mysql_query($abfrage2);
     			$max = mysql_fetch_array($ergebnis2);
     			$maxposts = $max['forum_max_posts'];
     			}
     			else {
     			$maxposts = 10;
     			}
     			
     			
 			$postseiten = ceil($anzahl_posts / $maxposts);	 		//Seitenanzahl ermitteln
     			$poststart = $_GET['page'] - 1;
     			$poststart2 = $poststart * $maxposts;
     			
     			
     			
 		 $abfrage3		= "SELECT * FROM board_answers WHERE fid='".$_GET['fid']."' AND tid='".$_GET['tid']."' LIMIT ".$poststart2.", ".$maxposts."";
 			$ergebnis3	 = mysql_query($abfrage3);
 			while($row	 = mysql_fetch_object($ergebnis3)) {
 			$text 			= nl2br($row["text"]); //Zeilenumbrüche nicht vergessen ;)
 			$created 		= substr($row->created, 8, 2) . "." . substr($row->created, 5, 2) . "." . substr($row->created, 0, 4).', '. substr($row->created, 10, 6);
     			
     			
     			
     			
     			
     			if (!empty ($row->userid)) {
     			
 		 $abfrage4	 = "SELECT * FROM benutzerdaten WHERE id='".$row->userid."' ";
 			$ergebnis4	 = mysql_query($abfrage4);
 			$autor 		= mysql_fetch_array($ergebnis4);
     			
 		 $abfrage5	 = "SELECT * FROM board_groups WHERE groupid='".$autor['forum_group_id']."' ";
 			$ergebnis5	 = mysql_query($abfrage5);
 			$forum_group	 = mysql_fetch_array($ergebnis5);
     			
 		 $abfrage6	 = "SELECT * FROM board_avatare WHERE avatarid='".$autor['forum_avatar_id']."' AND userid='".$autor['id']."' ";
 			$ergebnis6	 = mysql_query($abfrage6);
 		 $avatar			 = mysql_fetch_array($ergebnis6);
     			
     			$user = $autor['Nickname'];
     			$userid = $autor['id'];
     			
 			if (!empty ($row->titel)) { 	$titel = 'Titel: '.$row->titel.'';	}
 			else {	$titel ="";	}
     			
     			if ($rechte['editallpost'] == 1) {
 			$edit = '<a class="nav2" href="index.php?site=forum_editpost.php&action=editpost&fid='.$fid.'&tid='.$tid.'&aid='.$row->id.'" title="edit">edit</a>'; }
     			
 			if ($userid == $_SESSION["user_id"] and $rechte['editownpost'] == 1) {
 			$edit = '<a class="nav2" href="index.php?site=forum_editpost.php&action=editpost&fid='.$fid.'&tid='.$tid.'&aid='.$row->id.'" title="edit">edit</a>'; }
     			
     			$status = $forum_group['titel'];
 			$useravatar = '<img src="./upload/boardavatare/avatar-'.$avatar['avatarid'].'.'.$avatar['avatarextension'].'" width="'.$avatar['width'].'px" height="'.$avatar['height'].'px" />';
 			$beiträge = '<br /><br /><h3>Beiträge: '.$autor['forum_posts'].'</h3><br />';
 			$signatur = '<p align="left">'.$autor['forum_signatur'].'</p>';
     			
     			if (!empty($autor['www'])) {
 			$www = '<a class="nav2" href="http://'.$autor['www'].'" target="_blank" title="www">www</a>';
     			}
 			$icq = '<a class="nav2" href="http://wwp.icq.com/scripts/search.dll?to='.$autor['ICQ'].'" target="_blank" title="ICQ">ICQ</a>';
     			
     			if ($autor['Mailan'] == 1) {
 			$mail = '<a class="nav2" href="mailto:'.$autor['Mail'].'" title="e-mail">e-mail</a>';}
     			
     			}
     			else {
     			$user = $row->gastname;
     			$status = "Gast";
     			$useravatar = "<br />";
     			$beiträge = "<br />";
     			$signatur = "";
     			$www = "";
     			$icq = "";
     			$mail = "";
     			}
     			
     			include ("./includes/tpl/forum_showposts.tpl");
     			} 
     			include ("./includes/tpl/forum_showposts3.tpl"); 
     		  
     ?>

So nun das eigentliche Problem.
Wenn ich mich eingeloggt hab und mich halt bis zur forum_showposts.php duchgeklickt hab, zeigt er mir den Link zum editieren auch an. So wie es auch sein soll. Aber sowie ich dann auf "Seite aktualisieren" klicke oder kurz auf einen anderen Link innerhalb der Site klicke und dann wieder auf die Showposts klicke, ist der Link weg.

Um den Fehler einzugrenzen habe ich mir schon mit echo die SESSION daten ausgeben lassen und das Ergebnis der DB-Abfrage. Die SESSION daten werden auch immer ausgegeben und sind somit wären der ganzen Zeit vorhanden. Aber die Ergebnisse aus der DB-Abfrage verschwinden beim Seite aktualisieren. Sprich die Abfrage wird nich noch einmal durchgeführt. Alle anderen Abfragen in der forum_showposts.php werden korrekt ausgeführt. Nur halt diese in der forum_rechte.php nicht. Ich hatte auch schon zum testen die Rechte-Abfrage mit in die forum_showpost.php rein geschrieben. Aber es funktionierte trotzdem nicht. Ich sitze an dem Problem nun schon seit 2 Tagen und finde den Fehler nicht. Ich hoffe jemand von euch kann mir helfen.

Danke schon mal im Voraus!
Gruß
Speedster
 
Versuchs mal so:
Wenn man nicht eingeloggt ist:
$_SESSION['login_status'] = "5";

Wenn man sich dann eingeloggt ist, dann bekommt die SESSION
den wert der Gruppe.

Dann initiierst du noch ein oder 2 Extra-SESSION's:
$_SESSION['admin_status'] und $_SESSION['mod_status']

Undjeh nachdem, ob die dann auf true gesett sind( false ist standart),
hat er die rechte, die ein Admin/Moderator hat !

Ich hoffe du verstehst, was ich meine !
 
Also den ersten Teil hab ich verstanden. Nur die Sache mit den zusätzlichen SESSION's nicht so ganz. Denn ob der jenige Admin/Mod ist steht ja in der Benutzer - DB. Da steht zu dem jeweiligen User die Gruppen-id zu der er gehört. Admin wäre z.B. die Gruppe 1. Und die Rechte die der Admin hat steht halt in der Gruppen - DB. Die ich ja abfragen will.

Ich habs jetzt mal so probiert:

PHP:
<?php
   include ("./includes/connectdb.php");
   include ("./includes/checkuser.php");
   
   if (empty ($_SESSION['forum_group'])) {
   
   $_SESSION['forum_group'] = "5"; }
   
   
   			//Rechte aus DB abfragen
   			
 			$rechteabfrage = "SELECT * FROM board_groups where groupid = '".$_SESSION['forum_group']."'";
   			$rechteergebnis = mysql_query($rechteabfrage);
   			$rechte = mysql_fetch_array($rechteergebnis);
   
   ?>

Aber wieder das gleiche Problem. Ich glaube auch das die Bedingungen für die Abfrage usw. schon soweit richtig sind. Denn beim ersten Seitenaufruf führt er die Abfrage ja auch aus. Ich verstehe halt nur nicht warum er diese Abfrage nur einmal ausführt. Eigentlich müsste er sie ja bei jedem mal wenn ich die Seite aufrufe ausführen. Aber das tut er nicht. Ich muß mich immer erst aus und dann wieder einloggen damit er die Abfrage wieder ausführt. Aber halt wieder nur ein mal. Dann geht das spiel von vorn los. Obwohl die SESSION Daten die er für die Abfrage braucht immernoch vorhanden sind. Die lase ich mir ja mit echo ausgeben, um zu sehen ob sie vorhanden sind.
 
Ja,
jett kannst du doch ganz einfach sagen:
Wenn z.b. die Nr 1 der Admin-status ist:
Code:
if ($_SESSION['forum_group'] == "1")
{
   echo "Hey, du bist Admin";
}

das ist doch kein Problem... oder ?
 
Ja das ist soweit richtig...Aber was nützt mir das?

In der DB die ich abfragen will steht ja nicht nur Admin drin. Da steht drin ob diese Gruppe neue Themen erstellen darf, posten darf, seine Posts editieren darf, alle Posts editieren darf usw.... Und das möchte ich halt abfragen.

Aber ich hab hier noch nen kleines Update....

Ich hab diese Datei die die Rechte abfragt (forum_rechte.php) auch noch in die forum_showthreads.php includet. Also die Datei welche die ganzen Threads abfragt und ausgibt. Hab mir auch da zum testen mit echo das Ergebnis der Abfrage aus der forum-rechte.php ausgeben lassen. Und komischer weise funktioniert es da. Bei der Threads Seite kann ich so oft auf Seite aktualisieren klicken wie ich will. Die abfrage wird immer wieder durchgeführt.

Somit kann der Fehler ja eigentlich nicht in der forum_rechte.php liegen. Sondern muß in der forum_showposts.php liegen....Oder?

Aber trotzdem finde ich keinen Fehler.

Hier mal noch der Code von der forum_showthreads.php:

PHP:
<?php
   include ("./includes/connectdb.php");
   include ("./includes/checkuser.php");
   include ("./includes/forum_rechte.php");
   
   
   			$fid = $_GET['fid'];
   			include ("./includes/tpl/forum_showthreads2.tpl");
   			
 		 $abfrage1	= "SELECT * FROM board_threads WHERE fid='".$_GET['fid']."'";
   			$ergebnis1   = mysql_query($abfrage1);
   			$anzahl_threads = mysql_num_rows($ergebnis1);
   			
   			if (!empty($_SESSION['user_id'])) {
 		 $abfrage2	= "SELECT * FROM benutzerdaten WHERE id='".$_SESSION["user_id"]."'";
   			$ergebnis2   = mysql_query($abfrage2);
 		 $max		 = mysql_fetch_array($ergebnis2);
   			
   			$maxthreads = $max['forum_max_threads'];
 			$maxposts	= $max['forum_max_posts'];
   			}
   			else {
   			$maxthreads = 20;
   			$maxposts = 10;
   			
   			}
 			$threadseiten = ceil($anzahl_threads / $maxthreads); 			//Seitenanzahl ermitteln
   			$threadstart = $_GET['page'] - 1;
   			$threadstart2 = $threadstart * $maxthreads;
 						
 		 $abfrage3	= "SELECT * FROM board_threads WHERE fid='".$_GET['fid']."' ORDER BY lastpost DESC LIMIT ".$threadstart2.", ".$maxthreads."";
   			$ergebnis3   = mysql_query($abfrage3);
   			while($row  = mysql_fetch_object($ergebnis3)) {
   			$fid = $row->fid;
   			$tid = $row->id;
   			
 		 $abfrage4	= "SELECT * FROM board_answers WHERE fid='".$row->fid."' AND tid='".$row->id."' ORDER BY id LIMIT 1";
   			$ergebnis4   = mysql_query($abfrage4);
   			$autor = mysql_fetch_array($ergebnis4);
   			
 		 $abfrage5	= "SELECT * FROM board_answers WHERE fid='".$row->fid."' AND tid='".$row->id."' ";
   			$ergebnis5   = mysql_query($abfrage5);
   			$anzahl_posts = mysql_num_rows($ergebnis5) - 1;
   			
 			$postseiten = ceil($anzahl_posts / $maxposts);	 		//Seitenanzahl ermitteln
   			$poststart = $_GET['page'] - 1;
   			$poststart2 = $poststart * $maxposts;
   
 		 $abfrage6	= "SELECT * FROM board_answers WHERE fid='".$_GET['fid']."' AND tid='".$row->id."' ORDER BY id DESC LIMIT 1";
   			$ergebnis6   = mysql_query($abfrage6);
   			$last_post = mysql_fetch_array($ergebnis6);
   			
 		 $abfrage7	= "SELECT * FROM benutzerdaten WHERE id='".$autor['userid']."'";
   			$ergebnis7   = mysql_query($abfrage7);
   			$first_poster = mysql_fetch_array($ergebnis7);
   			
 		 $abfrage8	= "SELECT * FROM benutzerdaten WHERE id='".$last_post['userid']."'";
   			$ergebnis8   = mysql_query($abfrage8);
   			$last_poster = mysql_fetch_array($ergebnis8);
   			
   			
   			
   			if ($autor['userid'] > 0) {
 				$user = $first_poster['Nickname'];}
   			else {
   				$user = $autor['gastname'];}
   				
   			if ($last_post['userid'] > 0) {
 				$luser = $last_poster['Nickname'];}
   			else {
 				$luser = $last_post['gastname'];} 
   			
 			$created = substr($last_post['created'], 8, 2) . "." . substr($last_post['created'], 5, 2) . "." . substr($last_post['created'], 0, 4).', '. substr($last_post['created'], 10, 6);
   			
   			include ("./includes/tpl/forum_showthreads.tpl");
   			
   			}
   			include ("./includes/tpl/forum_showthreads3.tpl"); 
   			
   ?>
 
Wenn der Inhalt von der ID = 1 ist,
dann lese den Row von 1 Aus..

Und dann kontrollierst du...
Ist write_tread == true... wenn ja, dann bla...
wenn nicht, dann blubs.-.-.
 
Das ist ja auch nicht das Problem. Das soll ja die forum_rechte.php machen. Und das macht sie ja auch.

Diese Datei (forum_rechte.php) habe ich in die forum_showthreads.php und in die forum_showposts.php includet.

Und das Problem ist...In der forum_showthreads.php funktioniert das ganze auch einwandfrei. Die Abfrage aus der includeten forum_rechte.php wird immer wieder ausgeführt. Egal wie oft ich auf Seite aktualisieren klicke. So wie es auch sein soll.

Aber in der forum_showposts.php in die ja die gleiche Datei (forum_rechte.php) includet ist, und die gleiche Abfrage machen soll wie in der forum_showthreads.php, funktioniert es nicht. Bzw. nur ein mal. Beim ersten Seitenaufruf. Wenn ich dann auf aktualisieren klicke wird diese Abfrage aus der includeten forum_rechte.php nicht mehr ausgeführt.

Ich muß mich dann erst ausloggen und wieder einloggen. Dann funktioniert es wieder. Aber auch wieder nur ein mal.

Es ist also kein Fehler in der forum_rechte.php. Sondern irgent ein Fehler in der forum_showposts.php, der nach dem ersten aufruf irgent etwas macht womit er diese Abfrage aus der forum_rechte.php blockiert.

Was könnte so etwas verursachen?
 
OK...Hat sich erledigt. Hab den Fehler gefunden. Ich hatte in der forum_showposts.php einem Array den gleichen Namen gegeben wie einer SESSION.

Hab das Array umbenannt und jetzt geht es. Kleiner Fehler große Wirkung kann ich da nur sagen.

Aber trotzdem Dankefür die Hilfe
 
Status
Nicht offen für weitere Antworten.
Zurück