# User-Profil mit PHP und MySQL erstellen



## tobie64 (29. Mai 2006)

Hallo zusammen!

Ich habe mir eine HP gecodet.

Nun möchte ich es so machen.

Das einige Seiten nur ab einem bestimmten Status aufrufen kann.
z.B. ein Gast kommt auf die Seite und sieht nur die Willkommen Seite und das Gestebuch.
Nach dem er sich Angemeldet hat sieht er in der Navigation den Link zum Forum, Galerie, und so weiter.
Wie mache ich das, das die User nur die links sehen können wenn die den Status dazu haben ?

Und dann noch was.
Ich möchte noch machen damit die User ihr Profil ändern können.
z.B. die gehen auf Edit-Profil und sehen da ihre Daten ( Username, Kommentar, Forum Beiträge und so weiter.
Und können die dann auch Ändern.
Wie mache ich das den Usern deren Daten auf der Seite angezeigt werden ?
Will nicht für jeden User eine eigene Seite machen, sondern für alle nur eine die sich für jeden User anpasst.

Wie ich für die Felder die Daten aus der Datenbank auslese weis ich, nur weis ich nicht wie ich es für jeden User mache das nur seine Ausgelesen werden.

Habe es mit dem Code gemacht:

```
//
// Werte auslesen
//
$sql = "SELECT * FROM profil";
$ergebnis = mysql_query($sql);
while($row = mysql_fetch_object($ergebnis)){$name=$row->name; $passwort=$row->passwort; $kommentar=$row->kommentar; $fbeitrege=$row->fbeitrege;}
```


Bitte um Hilfe.


----------



## Gumbo (29. Mai 2006)

Hast du dir schon mal das Tutorial „Login-System mit Sessions“ durchgelesen?


----------



## tobie64 (29. Mai 2006)

Hi 

Ja habe ich, aber da steht doch nichts über das was ich machen will.

Will das die werte per user_id aus der Datenbank gelesen werden und auf der Seite wider gegeben werden.
Und das einige Links in der Navigation erst angezeigt, werden wenn der User das nötige Recht dazu hat.

Wie mache ich das ?

Ich habe ja schon ein Login System für mich alls admin.
Wenn ich mich aber einloge komme ich auf die Admin Seite und kann mich auf der Admin Seiten bewegen.
Und wenn ich nicht einlogt bin und versuche auf die Admin Seite zu gelangen werde ich ich zum login geleitet.


----------



## Gumbo (29. Mai 2006)

Ich glaube auch nicht, dass du eine Lösung findest, die 100%ig deinen Vorstellungen entspricht. Es geht vielmehr darum, dass du _verstehst_, wie so etwas zu realisieren ist.
Vergib den Benutzern doch Rechte, die darüber entscheiden was sie dürfen und was nicht. Dazu kannst du auch den Algorithmus übernehmen, der die Umleitung regelt.


----------



## cille (29. Mai 2006)

Theoretisch brauchst du einfach nur von deinem LOGIN system die Berechtigungsstufen einstellen, und dies mit fast dem selben code einbinden.
Da ich grad in der scool bin kann ick dir jetzt nicht den genauen code schreiben,
erst wenn ick zu haus bin.

mfg, cille


----------



## terravotion (29. Mai 2006)

Wenn du nur einige feste Rechtetypen besitzt (Admin, Superuser, User, Gast), dann kannst du diesen jah einen Wert zuweisen, beispielsweise:

Admin = 1
Superuser = 2
User = 3
Gast = nichts

Und beim einloggen machst du ne DB Abfragem was der User für en Rechtetyp ist und schreibst das in die Session... Und die Navigation kannst du dan abhängig vom inhalt dieser Sessionvarible machen...


```
if($_SESSION[rights] == 1) {include("admin_navig.php");}
else if($_SESSION[rights] == 2)  {include("superuser_navig.php");}
```


Vielleicht hilft dir das,
Hunab


----------



## tobie64 (29. Mai 2006)

@Hunab-Ku

Das hielft mir nicht so ganz, also ich kann mit dem code nicht wircklich viell anfangen.

Kannst du mir vieleicht eine Tut geben oder wo ich mehr zu dem code finde ?

Also wie ich den rest so code und so.
Weiss nicht wie ich den Login erstellen muss und die DB und so weiter damit es mit diesem code geht.


----------



## Admi (30. Mai 2006)

Die Grundgedanken wurden gegeben. Dir fehlt eher grundlegendes Verständnis.

Die User sind ja in der DB. Baue eine weitere Spalte in die UserDB ein für die Rechtevergabe. Weise ihnen die Rechte zu. ZB Admin = 1 oder was auch immer.

Bei der Loginabfrage nimmst du die Benutzerdaten entgegen und prüfst sie mit deiner UserDB ab, liest die Rechte des anmeldenden Users aus und speicherst sie in eine Session.

Mit diesem Sessiondatensatz kannst du nun dem Skript sagen, welche Links, etc. für den jeweiligen Nutzer sichtbar sein sollen.


----------



## Gumbo (30. Mai 2006)

Karl Försters Tutorial beschreibt doch, wie solch eine Authentifizierung ablaufen kann.
Oder suchst du etwa eine kopierfertige Lösung? Dann wirst du hier wohl an der falschen Anlaufstelle sein.


----------



## deinpapa (2. Juni 2006)

Hallo


Allso das mit dem User Profil habe ich jetzt geschaft.

Aber das mit den Linkx geht noch nicht, weiss einfach nicht wie ich das da machen soll.


Und habe noch eine frage.

Wie kann ich machen das der Server status angezeigt wird ?
Habe schon einige code versucht aber keiner geht.
Will das der auf einen entfernten Server zugreift.
die status abfrage sollte wer IP und Port gehen.

Hatte ein code bei dem konnte ich nur WebSeiten status abfragen, aber die anderen code gingen nicht.

Ich habe so ein code schon vor ca. 1 jahr gehabt und benutzt, da konnte ich die IP und den Prot angeben und er hat nur angezeigr ob der Server on oder off ist.
Finde aber so was nicht mehr und habe den code auch nicht mehr ( leider )

Hoffe ihr könnt mir helfen.
Habe schon die Suche benutzt aber nichts was mir geholfen hat gefunden.


----------



## mAu (2. Juni 2006)

```
<?php
$ip	= '192.168.0.1';	// Ip-Adresse, kann auch eine Webseite sein, jedoch ohne http://
$port	= 80;			 // Port

if(($sStatus = fsockopen($ip, $port)) !== false){
	echo 'Online!';
	fclose($sStatus);
} else{
	echo 'Offline!';
}
?>
```

Wenn du also eingeloggt bist, dann schreibst du den Status des Users in die Session, z.B. so:

```
$_SESSION['userStatus'] = $row->userStatus; // Wenn dein Feld so heißt
```

Dann kannst du auf den Seiten prüfen, ob der User sie sehen darf, z.B. so:

```
if($_SESSION['userStatus'] == 1){
echo "Adminseite";
} else{
echo "Kein Zutritt!";
}
```

Willst du für die einzelnen "Benutzergruppen", wie z.B. Admin, User und Gast, unterschiedliche Menüs einbinden, dann machst du es, wie *Hunab-Ku* gesagt hat, also so:

```
switch($_SESSION['userStatus']){
case 1:
	include('adminMenue.php');
	break;
case 2:
	include('userMenue.php');
	break;
case 3:
	include('gastMenue.php');
	break;
default:
	include('gastMenue.php');
}
```


----------



## Dennis Wronka (2. Juni 2006)

Oder Du hast ein Menue-Script und baust darin das Menue entsprechend den Rechten auf.
Ich arbeite bei mir mit User-Levels und da sieht das dann ungefaehr so aus:

```
if ($user['userlevel']==255)
{
 //Admin-Menu
}
if ($user['userlevel']>0)
{
 //User-Menu
}
//Public-Menu
```


----------



## deinpapa (2. Juni 2006)

hi

Danke.

Habe gerade das mit dem Status getestet und das kam raus.
Das ist der Fehler der beim aufrug rausgekommen ist:

```
Warning: fsockopen() [function.fsockopen]: unable to connect to 192.168.0.1:80 in /home/test/index.php on line 5
Offline
```
und so habe ich es in die index.php eingebaut:
index.php

```
<?php
$ip    = '192.168.0.1';    // Ip-Adresse, kann auch eine Webseite sein, jedoch ohne http://
$port    = 80;             // Port

if(($sStatus = fsockopen($ip, $port)) !== false){
    echo 'Online!';
    fclose($sStatus);
} else{
    echo 'Offline!';
}
?>
```

Das gleiche problem habe ich bei den anderen skripts.

P.S.: Die IP und den Port habe ich auch angepast. 


Den rest mit dem Links ( Menü ) mache ich später.


----------



## mAu (2. Juni 2006)

Aja, dann ist der Server halt offline oder es ist ein anderer Fehler, nimm mal folgenden Code:

```
<?php
$ip	 = '192.168.0.1';	// Ip-Adresse, kann auch eine Webseite sein, jedoch ohne http://
$port   = 80;			   // Port
$timeout= 5;				// Timeout in Sekunden

if(($sStatus = @fsockopen($ip, $port,$errNo, $errStr, $timeout)) !== false){
	echo 'Online!';
	fclose($sStatus);
} else{
	echo 'Offline!.<br />';
	echo 'Fehler['.$errNo.']: ' . $errStr;
}
?>
```


----------



## viper33 (8. Juni 2006)

Bin auf der suche nach einem Server-Status code für meine Homepage.
Und da fand ich den hier und gleich habe ich den getestet aber der geht nicht so wie ich es brauche.
Also.
Ich gebe meine Daten da ein und rufe es dann mit dem InternetExplorer auf.
Und da kommt das der Server Offline ist, wo der aber Online ist.
Habe dann die IP gelassen aber Den Port in 21 oder 80 geändert und man sehe es kommt Online.
Also ich habe einen CS 1.6 Server auf einem root-Server laufen und die Homepage auf einem anderen root-Server.

Wie kann ich es machen das der CS 1.6 Server Status auch engezeigt wird ?
Oder wo Ran kann es den liegen ?

Würde mich über Hilfe freun.


----------



## Dennis Wronka (9. Juni 2006)

Hi, willkommen im Forum.

Laeuft CS ueber TCP oder UDP?
Bei UDP reicht es nicht aus einfach zu versuchen zu "verbinden" (ist nicht ganz das richtige Wort, da die Kommunikation bei UDP verbindungsfrei ablaeuft). Hier muss wirklich ein Datenaustausch stattfinden um sicher zu gehen, dass der Port offen ist und der Server laeuft.


----------



## viper33 (9. Juni 2006)

> Laeuft CS ueber TCP oder UDP?



Was der unterschied ?

Und wie sehe ich das ?

Der CS 1.6 Server wird mit der IP im Start Befell gestartet.

Wie kann man es machen das der CS 1.6 Server mit TCP ( glaube das er damit laufen soll ) leuft ?


----------



## Dennis Wronka (9. Juni 2006)

viper33 hat gesagt.:
			
		

> Was der unterschied ?


TCP ist verbindungsgebunden, das heisst, dass zwischen den Rechnern eine richtige Verbindung aufgebaut wird und zum Schluss getrennt wird. Hierbei kommt es vor allem darauf an, dass alle Daten zuverlaessig uebertragen werden und weniger auf die Geschwindigkeit. Geht ein Paket unterwegs verloren schickt der Empfaenger eine Info, dass das Paket nochmal geschickt werden muss.
UDP arbeitet ohne Verbindung und auch ohne diese Kontrolle ob ein Paket angekommen ist. Hier ist die Geschwindigkeit im Vordergrund. Pakete werden einfach geschickt und es ist nicht so wichtig ob nun ein Paket mal nicht ankommt.
Wenn ich mich recht erinner laeuft z.B. UnrealTournament (und eben auch die Spiele die auf der UT-Engine basieren) ueber UDP.



			
				viper33 hat gesagt.:
			
		

> Und wie sehe ich das ?


Das sollte sich im Internet herausfinden lassen, oder auch mit einem simplen Port-Scan.



			
				viper33 hat gesagt.:
			
		

> Wie kann man es machen das der CS 1.6 Server mit TCP ( glaube das er damit laufen soll ) leuft ?


Ich denke nicht, dass man sich das aussuchen kann, entweder laeuft das ganze ueber TCP oder eben nicht.


----------



## viper33 (9. Juni 2006)

Allso

Ich kann auf den Server drauf und auch gut spielen, habe auch gut Pings.
Ist auch Stabiel.

Der Server wird auch bei CS in der Server Lieste anhezeigt und ist auch beliebt da immer gleichzeitig ca. 20 User drauf sind.

Aber ich kann den Status vom Server nicht abfragen.

Auf dem Root-Server wo der CS-Server drauf ist ist Linux Debian drauf.

Was ich mir gedacht habe.
Kann es vieleicht sein das Debian eine Standart Firewal hat die den TCP verkar blokt ?

Es muss doch gehen das ich den Status vom Server auslessen kann da es ja Cs-Server Status Skripte gibt aber die gehen bei mir nicht.

#EDIT#
Hier ist was von: http://counter-strike.de/content/server/linux_steam.php

Solltet ihr den Server hinter einer Firewall oder einem Router betreiben, muss der Serverport (Standard ist UDP 27015) von dort auf den CS-Server geforwarded werden.
Ebenso müssen diese Ports geöffnet sein:

UDP 1200
UDP 27000 to 27015 inclusive
TCP 27030 to 27039 inclusive

#/EDIT\#


----------



## Dennis Wronka (9. Juni 2006)

Also laut Deinem Text da scheint das ganze ja, wie UT, ueber UDP zu laufen.
Im Grunde nicht verwunderlich da bei Spielen im Grunde eher die Performance als die Zuverlaessigkeit im Vordergrund steht.
Dementsprechend muss bei einer Verbindung mit fsockopen() noch udp:// vor die Addresse des Servers gesetzt werden. Und, wie zuvor schon angesprochen, muss ein Datenaustausch stattfinden um sicher zu sein, dass der Game-Server auch wirklich laeuft.

Als ich mal Debian testweise installiert hab hab ich nichts davon gesehen, dass da standardmaessig ein Paketfilter eingerichtet war. Da Du sagst, dass es ein Root-Server ist solltest Du das ganz einfach ueberpruefen koennen. Mittels *iptables -L* kannst Du die Filterregeln sehen.


----------



## viper33 (9. Juni 2006)

> Dementsprechend muss bei einer Verbindung mit fsockopen() noch udp:// vor die Addresse des Servers gesetzt werden. Und, wie zuvor schon angesprochen, muss ein Datenaustausch stattfinden um sicher zu sein, dass der Game-Server auch wirklich laeuft.



ja und wie mache ich das?

Weiss leider keinen code und habe auch keinen finden können. ( habe erst gesucht und dann alles getestet und erst dann habe ich hier gepostet )

Kannst du mir einen code geben oder so ?


----------



## Dennis Wronka (9. Juni 2006)

Ich hab mit CS nichts am Hut, dementsprechend kann ich jetzt auch nichts mal eben aus dem Aermel schuetteln.
Du musst halt per fsockopen() die "Verbindung" aufbauen und dann einen Befehl an den CS-Server schicken. Anschliessend liest Du die Antwort aus. Wenn Du eine bekommst, dann ist alles klar.


----------

