Login  Regeln Aktuelles Datum und Uhrzeit: 09.01.2009, 14:04  
Startseite
Registrieren
Profil
Suchen
Mitgliederliste
Verzeichnis
Impressum



Partner
kostenlose Homepage
Fussball
Kostenloses Forum
SMS kostenlos
Webhosting
Webmasterportal
Kostenlos
Kredit ohne Schufa
Esoterik-Forum
Selbsthilfeforum
Artikel Backlink
Datenrettung
MySQL Feldinhalte aufteilen

 
Neues Thema eröffnen   Neue Antwort erstellen    Webmaster Forum -> Serverseitige Websprachen
Vorheriges Thema anzeigen Nächstes Thema anzeigen 
Autor Nachricht
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 202

BeitragVerfasst am: 11.09.2008, 13:39    Titel: MySQL Feldinhalte aufteilen Antworten mit Zitat

Hallo zusammen,

bin gerade dabei für Kunden und mich eine Art projekt manager zu erstellen.
Nun sollen natürlich mehrere Kunden auf ein Projekt zugreifen können.
Meine Herausforderung:
Ich möchte ein Feld mit dem Namen "Rechte" haben, in der die benutzer (oder benuzter ids) gespeichert sind, unzwar in solcher form:
"adolf, stephan, karl-heinz"
Diese drei personen können meinetwegen auf das Projekt zugreifen, dass unter der id gespeichert ist (projekt id und rechte in gleicher zeile).
Wie trenne ich nun die benuzter von einander und lese sie einzelnd aus, damit benutzer adolf nun darauf zugreifen kann, aber ein franz-josef nicht.
Bei nur einer berechtigten person ist das ja kein problem, da nur ein wert.

Danke für jede Hilfe

Grüße
Dennis

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
JFM
Beliebter [User]
Beliebter



Anmeldung: 25.09.05
Beiträge: 437
Wohnort: Gütersloh

BeitragVerfasst am: 11.09.2008, 14:25    Titel: Antworten mit Zitat

Mit SPLIT() kannst du die Namen am Leerzeichen Trennen - setzt natürlich Voraus das keine Doppelnamen mit Leerzeichen Vorkomen.

Dann schreibst du die Daten in ein Array, dann erzeugst du eine Schleife die so oft durchläuft wie Daten im Array zu finden sind und prüfst darin jeweils ob einer der Arrayinhalte mit dem User der Aktuellen Session übereinstimmt. Wenn dieses der Fall ist, setzt du eine Variable von False auf True,

Wenn die Variable True ist gibt es Zugang zum Bereich, wenn die Variable False ist, bleibt man drausen ..

_________________
http://www.onestripe.de --- Ihr Weg ins Internet


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 202

BeitragVerfasst am: 11.09.2008, 14:52    Titel: Antworten mit Zitat

danke für deine antwort.

Dachte mir schon, dass es mit Arrays gelöst werden muss. Nur leider steige ich da nicht dahinter, sql speichern, aufrufen, ändern, alles einfach. Nur arrays verstehe ich komplett nicht Smilie-

Habe hier mal das kopiert, womit ich die daten auslese:
Code:

<table class="main_content">
<tr>
<td>Projekt ID</td><td>Name des Projektes</td>
</tr>
<?php
//alle projekte mit zugriffsberechtigung auslesen
$rechte = "SELECT * from projekte WHERE rechte = '".sicher($_SESSION["user_id"])."'";
$ergebnis = mysql_query($rechte);
while($row = mysql_fetch_object($ergebnis))
{
echo'
<tr>
<td>'.$row->id.'</td><td>'.$row->name.'</td>
</tr>
';
}

?>
</table>


Könntest du mir sagen, wie es aussehen muss, damit das mit folgendem "rechte" sql feld geht? :
"1 2 5 8"
demnach hätten die userids 1,2,5, und8 zugriff auf dieses projekt.
Wie macht man das mit dem array? Danke nochmal.

Dennis

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
JFM
Beliebter [User]
Beliebter



Anmeldung: 25.09.05
Beiträge: 437
Wohnort: Gütersloh

BeitragVerfasst am: 11.09.2008, 15:17    Titel: Antworten mit Zitat

Code:

$zugriff ="nein"; //$zugriff auf nein Setzen
$userrecht=5; //Die Benutzerstufe des Users, bekommst du sicher aus der User-DB oder so ...
$zugriffsrechte="1 2 5 8"; //Die Zugriffsrechte die man braucht um auf die Daten zuzugreifen, kommen auch aus einer DB nehme ich an

$zugang= split(" ", $zugriffsrechte); //Die Variable zugriffsrechte wird zerlegt und im Array Zugang gespeichert.

for($i=0; $i < count($zugang); $i++) // Eine schleife wird so oft ausgeführt wie das Array Inhalte hat
{

   if($zugang[$i] == $userrecht) //wenn dje Zugriffsrechte übereinstimmen wird die Variable zugriff auf Ja gesetzt.
   {
   $zugriff ="ja";   
   }

}


Wenn $zugriff nun "ja" ethält lässt du den Zugriff zu, ansonsten nicht. So würde ich das Lösen ohne angaben zur sicherheit machen zu können ...

_________________
http://www.onestripe.de --- Ihr Weg ins Internet


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1500
Wohnort: Speyer

BeitragVerfasst am: 11.09.2008, 15:48    Titel: Antworten mit Zitat

JFM hat folgendes geschrieben:
Mit SPLIT() kannst du die Namen am Leerzeichen Trennen - setzt natürlich Voraus das keine Doppelnamen mit Leerzeichen Vorkomen.

Dann schreibst du die Daten in ein Array, dann erzeugst du eine Schleife die so oft durchläuft wie Daten im Array


darf ich mir Oberlehrerhaft erlauben anzumeken das das langfristig keine gute Lösung ist

es müßen immer alle SQL Daten ausgelesen weredn, da der SELECT qusie erst im PHP gemacht wird ....
... ok, naja, im SELECT könnte noch ein WHERE script='Vote' oder WHERE script='Fotoalbum' sein ... was reduziert


ich habe in so einem Fall einen String, wo das Trennzeichen zwischen den Wörtern auch vor und nach dem String ist

z.B.
Users = ',Andy,JFM,wiwardeinname?,BillGates,'
$USER = der NickName des eingelogten
im SELECT dann einen Like ....

Code:

$query .= " LIKE Users = '%,$USER,%' ";


Das mit dem Trennzeichen ist etwas problematisch .... bei User hinzufügen oder löschen ... da entstehen manchmal dann doppelte

wenn man nicht zusätzlich bissel rumlöscht, nur für den fall das eben welche doppelt sind

Code:

$addUSER='neuerUser';

$users = str_replace( ','.$addUSER.','  , ','  , $users ); // erstmal löschen, falss schon dort gewesen

$users = str_replace( ','  , ' '  , $users ); // komma zu leerzeichen
$users = str_replace( '  '  , ' '  , $users );  // zwei leerzeichen zu 1 leerzeichen
$users = str_replace( '  '  , ' '  , $users );  // glaubs mir
$users = str_replace( '  '  , ' '  , $users );  // den Befehl sollte man mehrfach

$users = $addUSER.' '.trim( $users ).' ';  // neuen User hinzufügen
$users = str_replace( ' '  , ','  , $users );  // zurück zum Komma .. und dann in die SQL




mann kann es sich natürlich auch etwas einfacher machen und einfach immer
vor + nach ... dem Usernamen das Trennzeichen setzen .... und zwischen zwei Usern das doppelte Trennzeichen lassen .....


wichtig ist auch noch
nicht leerzeichen oder NewLine als Trennzeichen nutzen
... SQL mach da das linke oder rechte irgendwie weg ....
... wie php.net/trim
aber eben nur auf einer Seite, weswegen das LIKE dann nicht mehr funktionieren tut


Achtung, ab hier vielleicht nicht mehr lesen

Besser ist aber vielleicht (problem, dann dürfen es nur 32 oder 64 User werden)
ein Bitfeld
ein int wo eben die Bits via
&1
&2
&4
&8
abgefragt werden
User 1 = &1
User 2 = &2
User 3 = &4
User 4 = &8
User 5 = &16


User hinzufügen

Code:

UPDATE users = users |4

Pipe = das StrichDings bei < > ... Taste Links neben "Y"

löschen ist glaub exkusivoder
Code:

UPDATE users = users ^4

links neben Taste "1"


Achtung ... wenn man mit dem ExplusivOder einen "Member" löschen will der garkein "Member" ist ... dann wird er "Member" ....
... vielleicht besser wie ich früher

$alle8 = 256;

$dell = 0 | 4;
$alle8 = 256 - $dell;

$users = $users & $alle8;


in $alle8 fehlt ja der eine, und nur der eine
undVerknüpfung gibt nur 1 wenn auf beiden Bits 1 war .... so wird er gelöscht




gehe ich recht in der Annahme das keiner versteht was ich sage?

Gruß
Andy 800XE Zmuda

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::
ich bin nicht unhöflich, ich bin binär


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 202

BeitragVerfasst am: 11.09.2008, 15:55    Titel: Antworten mit Zitat

jap... Sehr glücklich

@ JFM:

Ist $userrecht irgentein pseudowert?
Oder ist es die User id?

Weil jeder angemeldete User hat eine ID, die mittels session gespeichert wird.
Wäre dann die Session id = $userrecht?

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 202

BeitragVerfasst am: 11.09.2008, 16:30    Titel: Antworten mit Zitat

So, nun funzt es soweit auch, nur ist das Problem, dass immer nur das letzte Projekt angezeigt wird.

Code:
<?php
   $rechte = "SELECT * from projekte";
$ergebnis = mysql_query($rechte); 
   while($row = mysql_fetch_object($ergebnis))
{
$id = $row->id;
$rechte = $row->rechte;
$name = $row->name;
}
$zugriff ="nein"; //$zugriff auf nein Setzen
$userrecht=sicher($_SESSION["user_id"]); //Die Benutzerstufe des Users, bekommst du sicher aus der User-DB oder so ...
$zugriffsrechte=$rechte; //Die Zugriffsrechte die man braucht um auf die Daten zuzugreifen, kommen auch aus einer DB nehme ich an

$zugang= split(" ", $zugriffsrechte); //Die Variable zugriffsrechte wird zerlegt und im Array Zugang gespeichert.

for($i=0; $i < count($zugang); $i++) // Eine schleife wird so oft ausgeführt wie das Array Inhalte hat
{

   if($zugang[$i] == $userrecht) //wenn dje Zugriffsrechte übereinstimmen wird die Variable zugriff auf Ja gesetzt.
   {
   $zugriff ="ja";
   
echo'
<tr>
<td>'.$id.'</td><td>'.$name.'</td>
</tr>
';

   }

}

?>

Habe 3 Projekte zum Test angelegt, mit den ids 1,2 und 3.
Nur 3 wird angezeigt, habe mir selbst rechte für 1 und 3 gegeben.

Was muss ich bei if $zugriff ="ja"; hinzufügen, damit das immer wieder durchläuft und alle projekte mit zugriff =) ja anzeigt?

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1500
Wohnort: Speyer

BeitragVerfasst am: 11.09.2008, 16:45    Titel: Antworten mit Zitat

placido hat folgendes geschrieben:
So, nun funzt es soweit auch, nur ist das Problem, dass immer nur das letzte Projekt angezeigt wird.

Code:
<?php
   $rechte = "SELECT * from projekte";
$ergebnis = mysql_query($rechte); 
   while($row = mysql_fetch_object($ergebnis))
{
$id = $row->id;
$rechte = $row->rechte;
$name = $row->name;
}


in diesem "while block" wird die DB ausgelesen .....
in diesem "while block" sollte das SPLIT sein

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::
ich bin nicht unhöflich, ich bin binär


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 202

BeitragVerfasst am: 11.09.2008, 16:51    Titel: Antworten mit Zitat

wie peinlich Smilie
Danke

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1500
Wohnort: Speyer

BeitragVerfasst am: 11.09.2008, 17:01    Titel: Antworten mit Zitat

placido hat folgendes geschrieben:
wie peinlich Smilie
Danke

kommt vor ....

was für einen Editor benutzt du
bzw (was ich wissen will) kann der Blöcke "einrücken" und ausrücken
= mehrere Zeilen merkieren und dann "TAB" füt einrücken ... Quanta = STRG+i für "ausrücken"

gewöhne dir an, immer schön die Blöcke ein und auszurücken ....
dann sieht man gleich das was nicht stimmt

bzw
ich fahre gerne mit dem Cursor die {} hoch oder runter um "das Andere Ende" zu finden .... kleben alle Blöcke links ohne eingerückt zu sein .... auaua



PS
du rückst ein wie ich ...
Code:

  if ( .... )
  {
  }


die "Profis" machen das glaub meist anders
Code:

  if ( .... ) {
  }

frag mich warum ..... aber wenigstens funktioniert "mein Scrolling" hier noch via


Befehl
}

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::
ich bin nicht unhöflich, ich bin binär


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
placido
Helfer [User]
Helfer



Anmeldung: 16.10.07
Beiträge: 202

BeitragVerfasst am: 11.09.2008, 17:11    Titel: Antworten mit Zitat

Benutze Dreamweaver, sowohl für html als auch php
ein und ausrückem mit strg + alt + ä/ö

hab doch eingerückt, zumindest die if anweiseung was die klammern berifft, der text ist leider wieder nach hinten gerutscht, hab da wohl nicht aufgepasst.
normalerweise achte ich auch darauf, nur bei so einem kleinen code schnipsel war mir das erstmal so lange latte bis es geklappt hat.
Ist vielleicht nicht richtig, aber solange ich nur ein stück code ausprobiere und verändere lasse ich das mit dem einrücken.

ertappe mich immer wieder dabei keine kommentare zu machen, hinter her suche ich nach der richtigen stelle...

_________________
Relativitätstheorie:
Wenn ich Dir einen Finger ins Auge stecke, haben wir beide einen Finger im Auge, aber ich bin relativ besser dran
Browserspiele


Nach oben
Private Nachricht senden
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1500
Wohnort: Speyer

BeitragVerfasst am: 11.09.2008, 21:11    Titel: Antworten mit Zitat

mir fiel gerade ein, das du das vielleicht andersrum machen sollest ....
... ich mache es andersrum ....

User-DB hat Spalte wo die "Module" vermerkt sind ....
... so ist nur ein "berechtigt"String zu prüfen

z.B.
CMS800Module . modulgruppe = 'CMS800install'
CMS800User . gruppe = ''S.Y.N.A.P.S,CMS800install,CSVAndLisa,'
Code:

if ( strpos( $_GET['modulgruppe'] , '+++,'  .  $usersql['gruppe'] ) )
{
  echo Access YES
  // hier würde jezt dein SELECT kommen ....
  // und zwar ohne SPLIT, da der USER schon geprüft
}
else
{
  echo Access NO
}
 

die 3 Pluszeichen vor dem Komma
Code:
 '+++,'  .  $usersql['gruppe']

sind ein "quik end Dirty" weil strpos die Position liefert .... und ich für den "if" einen Wert größer 0 brauche .... deswegen pack ich einfach noch etwas "Müll" vornedran damit "suchteil1" eben nicht bei Postition 0 beginnt

sollte man besser mit ===
3 Gleichzeichen = prüfen auf TRUE
dann ist auch eine pos 0 für den if eine 1 ... weil nicht die Positio sondern das TRUE/FALSE zählt .... TRUE = 1 auch wenn Position =0



www.cms800.de/Account/CMS800install.html
ModulGruppe ... CMS800install
und dann unten aufgelistet die Quellcodes dieses Moduls
Code:

if ( strpos( $REQUEST_FILENAME , '+++,'  .  $usersql['gruppe'] ) )
{
   SELECT .... WHERE modulgruppe =  $REQUEST_FILENAME
}
else
{
  echo Access NO
}
 

Code:


CREATE TABLE `CMS800Module` (
  `ts` int(11) NOT NULL default '0',
  `status` int(11) NOT NULL default '0',
  `resource` int(11) NOT NULL auto_increment,
  `modulgruppe` varchar(230) NOT NULL default '',
  `modul` varchar(230) NOT NULL default '',
  `filename` varchar(230) NOT NULL default '',
  `code` text NOT NULL,
  `description` text NOT NULL,
  PRIMARY KEY  (`resource`),
  KEY `ts` (`ts`),
  KEY `modul` (`modul`),
  KEY `modulgruppe` (`modulgruppe`)
) TYPE=MyISAM ;



Code:


CREATE TABLE `CMS800User` (
  `ts` int(11) NOT NULL default '0',
  `user` varchar(23) NOT NULL default '',
  `domain` text NOT NULL,
  `gruppe` text NOT NULL,
  `module` text NOT NULL,
  UNIQUE KEY `user` (`user`),
  KEY `ts` (`ts`)
) TYPE=MyISAM;















placido hat folgendes geschrieben:
ertappe mich immer wieder dabei keine kommentare zu machen, hinter her suche ich nach der richtigen stelle...

Da hab ich auch immer mal wieder ein Problem ....
... meist kuck ich kurz drüber und weis wieder bescheid .... manchmal aber dann doch nicht

und, das wirkliche Problem
in welchem der 5 geIncludeten-Quellcode-Dateien ist jetzt die function .... die ich suche

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::
ich bin nicht unhöflich, ich bin binär


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Gehe zu:  

Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Frage zu MySql und Script eforium Serverseitige Websprachen 1 08.01.2009, 11:17 Letzten Beitrag anzeigen
Keine neuen Beiträge MySQL filtern Arnee Serverseitige Websprachen 5 06.01.2009, 02:41 Letzten Beitrag anzeigen
Keine neuen Beiträge Fehlersuche PHP MySQL placido Serverseitige Websprachen 4 11.12.2008, 19:54 Letzten Beitrag anzeigen
Keine neuen Beiträge Mysql update funktioniert nicht powerup Serverseitige Websprachen 3 22.10.2008, 18:01 Letzten Beitrag anzeigen
Keine neuen Beiträge Php skript im MYSQL einbinden sunnyboy881 Serverseitige Websprachen 1 24.09.2008, 07:37 Letzten Beitrag anzeigen
Threadübersicht