PHP function - Variable übergeben und wieder erhalten

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Ich möchte gerne nach einem Login jeden Besucher mit seinem Benutzernamen begrüßen.

In meiner Adressleiste wird zuerst die UserId aus der Datenbank eingetragen und wird dann wieder von mir ausgelesen. Diese UserId möchte ich dann an die function get_user() übergeben und in dieser Funktion ist dann eine SQL-Abfrage, die mir dann zu dieser UserId dann den UserName ausspucken und die dann wieder zurück an den Absender schicken soll.

Das ganze hier mal in Quelltextform:
PHP:
//Wenn der User eingeloggt ist, dann Menü anzeigen:
if(isset($_GET['userid']))
{
	$userid = $_GET['userid'];  
}
if($userid)
{
	include("sessionhelpers.inc.php");
	$user = get_user($userid,$username);
	echo 'Willkommen '.$user.'.';
}
Hier wird der Link ausgelesen und dann die Funktion get_user() aufgerufen. In der get_user steht folgendes:
PHP:
function get_user($userid,$username)
{
	$sql="SELECT UserName FROM users
			WHERE UserId = '".$username."'";
	$result = mysql_query($sql);
	return $username;
}
Wie kann ich in der Funktion nun den Namen wieder zurück senden?
 
mysql_fetch_array z.b. du schickst den query ja nur los und erhälst ein handle, aber nicht die eigentlichen daten. btw steht dies auch in der dokumentation.
Nur bei SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine neue Ergebnis-Kennung, die Sie an die Funktion mysql_fetch_array() und andere Funktionen, die mit Ergebnistabellen umgehen können, übergeben können.
 
Und BITTE escape den Usernamen bevor du ihn in die Query schreibst mit mysql_real_escape_string ODER überprüfe ihn ob er numerisch ist (is_numeric, intval) falls es eine ID ist!!!
WHERE UserId = '".$username."'";
hört sich übrigens für mich seltsam an. Gehts nun um ne ID oder einen Usernamen? Das sollte wohl eher
WHERE UserId = ".intval($userid);
sein oder? Die Funktion müsste dann auch nur mit
function get_user($userid)
deklariert werden.
 
Zuletzt bearbeitet:
Das mit dem mysqlescape hab ich schon mal gelesen wegen dieser mysql injektion...
Aber muss ich das tatsächlich bei jeder Abfrage einsetzen?
 
BerniG schrieb:
Und BITTE escape den Usernamen bevor du ihn in die Query schreibst mit mysql_real_escape_string ODER überprüfe ihn ob er numerisch ist (is_numeric, intval) falls es eine ID ist!!!

hört sich übrigens für mich seltsam an. Gehts nun um ne ID oder einen Usernamen? Das sollte wohl eher

sein oder? Die Funktion müsste dann auch nur mit

deklariert werden.

Ich möchte die UserId, die Oben in den Link geschrieben wird an die Funktion übergeben...
Die Funktion benutzt dann die UserId um den Benutzernamen aus der Tabelle zu bekommen und soll den Usernamen danach wieder zurück geben damit ich den Benutzer mit dem Namen begrüßen kann...
Könnte die Abfrage zwar direkt schreiben aber ich find es schöner wenn ich einmal eine function schreibe und jedesmal wenn ich den Benutzernamen brauche diese Funktion einfach aufrufen muss
 
BerniG schrieb:
Code:
WHERE UserId = ".intval($userid);
ein (int)$userid wäre wohl schöner und einfacher zu schreiben. ;)

@ raven16:
ja, die funktion musst du dann vor jede variable schreiben. du könntest dich aber auch in die pdo einarbeiten, welche immense vorteile bietet und mysql injections zum großteil schon mit ausschließt.
 
raven16 schrieb:
Wie wärs mit sowas?

PHP:
//Wenn der User eingeloggt ist, dann Menü anzeigen:
if(isset($_GET['userid']))
{
	$userid = $_GET['userid'];  
}
if($userid)
{
	include("sessionhelpers.inc.php");
	$user = get_user($userid);
	echo 'Willkommen '.$user.'.';
}

PHP:
function get_user($userid)
{
	$sql="SELECT UserName FROM users
			WHERE UserId = '".mysql_real_escape_string($userid)."'";
	$result = mysql_query($sql);
    if ($result) {
     $res = mysql_fetch_assoc($result);
     return $res['UserName'];
    } else {
     //eigentlich errorhandling...
     return "";
    }
}
ungetestet - könnte syntaxfehler haben, aber der grundsatz sollte klar sein ;)
 
PHP:
//Wenn der User eingeloggt ist, dann Menü anzeigen:
if(isset($_GET['userid']))
{
	$userid = $_GET['userid'];  
}
if($userid)
{
	include("sessionhelpers.inc.php");
	$user = get_user($userid);
	echo 'Willkommen '.$user.'.';
}

Finde ich auch etwas unglücklich. Du überprüfst ob es das Get gibt und schreibst es in userid, danach überprüfst du ob es $userid gibt. Das könnte man eigentlich locker mit einer if abfrage lösen.
 
Jo, ein
PHP:
if(!empty($_GET['userid'])) 
{ 
    include("sessionhelpers.inc.php"); 
    $user = get_user($_GET['userid']); 
    echo 'Willkommen '.$user.'.'; 
}
häts auch gelöst.
 
Ja tut mir leid wenns net ganz so elegant zum teil ist :rolleyes:
Bin noch sozusagen im Anfangsstadium wo man sowas soo programmiert, dass es überhaupt erst einmal funktioniert ;)

Damit das allen nochmal klar wird *g* hatte vorhin noch einen kleinen Fehler eingebaut der für verwirrung sorgen kann... :D


PHP:
//Wenn der User eingeloggt ist, dann Menü anzeigen:
if(isset($_GET['userid']))
{
	$userid = $_GET['userid'];  
}
if($userid)
{
	include("sessionhelpers.inc.php");
	$user = get_user($userid,$username);
	echo 'Willkommen '.$user.'.';
}

PHP:
function get_user($userid,$username)
{
	$sql="SELECT UserName FROM users
			WHERE UserId = '".$userid."'";
	$result = mysql_query($sql);
	return $username;
}

Hier werden beide Werte angegeben: UserId und UserName ...
Die UserId hab ich aus dem Link genommen mit $_GET[] und übergebe diese an die Funktion get_user() ... Die sucht anhand der UserId den UserName heraus aus der Datenbank und soll diesen nun wieder zurückgeben mit return... Den UserName möchte ich dann in einer Variable haben und danach den Benutzer mit dem richtigen UserName begrüßen... echo 'Willkommen '.$user.'.'; :)

Also wird sozusagen durch die UserId der UserName identifiziert und als begrüßung steht dann beispielsweise Willkommen raven16.

So kann ich mir das auch zu Nutze machen und für jeden Benutzer sein eigenes Menü bereitzustellen ^^
 
Zuletzt bearbeitet:
PHP:
    echo 'Willkommen '.get_user($userid,$username).'.';

würde auch gehen.

ps: ist mir klar das du "anfänger" bist, deswegen versuche ich dich ja drauf hinzuweisen. Wenn man von anfang an drauf achtet wirds einem später leichter fallen, finde ich.
 
:)
Okay solche Sachen erleichtern die Schreibarbeit...

Nun mal zur funktionellen Ebene:
Irgendwas läuft noch schief bei meiner Funktion...

Die Abfrage ist aber jedoch korrekt. Die hab ich mal so bei PHPMyAdmin ausprobiert...

Nur den Benutzernamen an die Ausgabe zurückzugeben könnte noch ein Problem haben :-/
 
Wieso benutzt du kein mysql_real_escape_string() ? Ich finde das ziemlich wichtig.
 
Hab auf rat eines anderen WHERE UserId = '".intval($userid)."'"; eingebaut ;)

reicht das?^^
 
Ja so geht es natuerlich auch. Bei Nicht-Integers sollte man aber escapen.
 
Zuletzt bearbeitet:
Super jetzt weiß ich wann ich wegen der MySQL-Injection aufpassen muss....
Aber nun zurück zum Problem:

Hab es bis jetzt leider immernoch nicht hinbekommen die UserId an die Funktion zu geben und dann den UserNamen wieder zurückzugeben zum Funktionsaufruf...
Weiß hier jemand noch was mein Fehler sein könnte?
 
Ja danke...
Hab das gestern versucht und es lief nicht...
Aber heute hat es komischerweise hingehaun...

Jetzt muss ich nur noch erreichen, dass ich eine Datei schreibe die auf jeder Seite die ich aufrufe den Login kontrolliert und das personifizierte Menü für den Benutzer ausgibt ...
Da hab ich mir auch was vorgenommen :D

Wie kann man eig. am besten erreichen, dass die UserId automatisch bei jeder weiteren Seite nach dem Login weitergereicht wird?
 
raven16 schrieb:
Ja danke...
Hab das gestern versucht und es lief nicht...
Aber heute hat es komischerweise hingehaun...

Jetzt muss ich nur noch erreichen, dass ich eine Datei schreibe die auf jeder Seite die ich aufrufe den Login kontrolliert und das personifizierte Menü für den Benutzer ausgibt ...
Da hab ich mir auch was vorgenommen :D

Wie kann man eig. am besten erreichen, dass die UserId automatisch bei jeder weiteren Seite nach dem Login weitergereicht wird?

Indem Du z. B. die UserID in eine $_SESSION['userid'] schreibst und diese auf den Unterseiten abgleichst.
 
Zurück
Oben