Knobelei für MySQL Experten
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aktuellen tabelle
beleg
book
break
chapter
datensatz
eid
element
entsprechender datensatz
erlaubnis
folgende struktur
gefundenem datensatz
grund
latein
schreibe
spalten
spezieller datensatz
tabelle
user
zugangsregelung
-
Ich schreibe gerade an einem Script, das mit einer Art Wiki verglichen werden kann.
Es soll jedoch eine Zugangsregelung geben, damit nur explizit authorisierte User auf die einzelnen Datens?tze Zugriff haben.
Ich verwende dazu einen dynamischen MySQL-query, der sich nach bestimmten Kritierien zusammensetzt:
if(isset($_POST['tid']))$tid=$_POST['tid'];else $tid=1; //liest $tid aus, das f?r die Tabellenwahl wichtig ist
switch($tid)//$tid gibt an, aus welcher Tabelle die Infos geholt werden
{
case 1:$table='cats';break;
case 2:$table='books';break;
case 3:$table='chapters';break;
case 4:$table='sub';break;
case 5:$table='users';break;
default:$table='cats';break;
}
$sql=''; //initialisieren des Query-string
if(isset($_POST['eid']))$eid=$_POST['eid'];else $eid=0; //belegen des element-id's, das dann auf die Spalte "id" in der aktuellen Tabelle zugreifen soll.
if($tid!=5)$sql=$sql.' AND '.$table.'.id=permis.user'; //hier ist mein Problem, Erl?uterung unten
if($eid==0)$sql=' 1=1'.''.$sql;//wenn kein spezieller Datensatz ausgew?hlt werden soll
else $sql=' '.$table.'.id='.$eid.''.$sql; //wenn ein spezieller Datensatz per "id" ausgew?hlt werden soll
$sql=$table.'.* WHERE'.$sql;
$sql='SELECT permis.* '.$sql;
Ich verwende 5 verschiedene Tabellen + eine Erlaubnistabelle.
Alle 5 ersten Tabellen haben eine id-Spalte und so k?nnen die Datens?tze auch angesprochen werden.
Die Erlaubnistabelle hat folgende Struktur :
id INT AUTO_INCREMENT PRIMARY KEY
user INT
tid INT
eid INT
mit "user" wird festgelegt, welcher User die Erlaubnis hat den Datensatz anzuzeigen.
mit "tid" aus welcher Tabelle[cats,books,chapters,sub] ("users" ist nicht wichtig)
und "eid" welcher Datensatz mit der id="eid" ausgelesen werden darf.
Ich hoffe ich habe es soweit gut verst?ndlich erkl?rt.
Mein Problem ist jetzt, ich wei? nicht wie ich den Query formulieren muss, damit er bei jedem gefundenem Datensatz in der Tabelle[$tid] ?berpr?ft, ob ein entsprechender Datensatz in der Tabelle "permis" existiert.
Wenn er existiert, darf der Datensatz ausgelesen werden, wenn nicht, dann darf er nicht ausgelesen werden.
Eine Ausnahme bildet die 5. Tabelle "users" dort d?rfen grunds?tzlich alle Datens?tze ausgelesen werden.
ps. im Quelltext wird der Query r?ckw?rts aufgebaut. Ist in diesem Fall einfach praktischer.
Danke f?r alle, die sich die M?he machen sich mit dem Problem zu befassen, ich bin mit meinem kleinen MySQL-Latein leider am Ende.
mfg, bladehunter
Beitrag ge?ndert am 10.08.2005 13:38 von bladehunter -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habe mal ein wenig gegoogelt:
Man kann aus zwei Tabellen gleichzeitig abfragen:
SELECT Spalte1, Spalte2 FROM Tab1, Tab2
Als ich den String ausprobiert habe, war Spalte 1 in Tab1 und Spalte2 in Tab2.
Man m?sste da eigentlich auch allerlei "Where"-Bedingungen einbauen k?nnen.
MfG lagerhaus -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage