"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

PHP: auf Funktionen verlinken

grOOvekill@ 06.01.2003 - 13:02 886 12
Posts

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
Hallo!

Habe folgendes vor:
In einem Skript befinden sich beispielsweise 10 Funktionen. Diese Funktionen soll man in einer Startseite anhand von Links aufrufen können. Die Funktionen befinden sich aber alle in einem einzigen Skript. Nachdem jede Funktion ausgeführt wurde und ein Ergebnis angezeigt hat, soll darunter wieder ein Link zur Verfügung stehen, der mich zur Hauptseite zurückbringt, die alle Funktionslinks beinhaltet.

Ich hab's auf diese Art probiert, aber hat nicht hingehauen:

echo ("Eine der Schaltflächen klicken um die jeweilige Funktion aufzurufen:<br>");
echo ("<a href=\"function1($var1)\">Funktion 1</a>");
echo ("<a href=\"function2($var1,$var2)\">Funktion 2</a>");
echo ("<a href=\"function3($var1,$var3)\">Funktion 3</a>");


Hab ich irgendwelche Parameter vergessen oder wie geht das?
<?php echo $PHP_SELF ?> könnte da ja möglicherweise auch helfen, oder nicht?

Danke für Eure Hilfe!
Bearbeitet von grOOvekill@ am 06.01.2003, 13:05

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von grOOvekill@
echo ("<a href=\"function1($var1)\">Funktion 1</a>");
echo ("<a href=\"function2($var1,$var2)\">Funktion 2</a>");
echo ("<a href=\"function3($var1,$var3)\">Funktion 3</a>");

Ganz spontan würd ich mal sagen der \ gehört erst nach dem " ... :

echo "<a href=\".function1($var1)."\ >Funktion 1</a>";
echo "<a href=\".function2($var1,$var2)."\ >Funktion 2</a>";
echo "<a href=\"function3($var1,$var3)."\ >Funktion 3</a>";

bzw. würd ich den Backslahs ganz weglassen ...
Aber sonst seh ich da keinen Fehler ... gib einfach mal die Werte die von den Funktionen geliefert werden mit einem echo aus .. dann siehst ja ob das sonst richtig funzt ...
Bearbeitet von Vivo am 06.01.2003, 14:01

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
Zitat von Vivo
Ganz spontan würd ich mal sagen der \ gehört erst nach dem " ... :

echo "<a href=\".function1($var1)."\ >Funktion 1</a>";
echo "<a href=\".function2($var1,$var2)."\ >Funktion 2</a>";
echo "<a href=\"function3($var1,$var3)."\ >Funktion 3</a>";

Hm, die /'s sind ja lediglich da um die "'s verwenden zu können. Ich denke nicht, daß die da eine Rolle spielen. Aber wenn ich richtig gesehen habe, verwendest du vor und nach function einen Punkt. Mal sehen, ob das was hilft. oder war das ein irrtum? ;)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
ähh... ich glaube hier wird total falsch vorgegangen - normalerweise passiert das in etwa so:
Code:
<? 
switch ($action) {
  case function1:
    echo "ich bin funktion 1";    
    echo $var1;
    echo $var2;
    break;
  case function2:
    ....
    break;
  default:
    echo "<a href=\"{$SCRIPT_NAME}?action=function1&var1=xxxx&var2=yyyy\">f1</A>";
    echo "<a href=\"{$SCRIPT_NAME}?action=function1&var1=xxxx\">f2</A>";
    break;
  }
?>

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 1922
Zitat von grOOvekill@
echo ("Eine der Schaltflächen klicken um die jeweilige Funktion aufzurufen:<br>");
echo ("<a href=\"function1($var1)\">Funktion 1</a>");
echo ("<a href=\"function2($var1,$var2)\">Funktion 2</a>");
echo ("<a href=\"function3($var1,$var3)\">Funktion 3</a>");

Vom Syntax korrekt wäre:
Code: PHP
echo "Eine der Schaltflächen klicken um die jeweilige Funktion aufzurufen:<br />";
echo "<a href=\"".function1($var1)."\">Funktion 1</a>";
echo "<a href=\"".function2($var1,$var2)."\">Funktion 2</a>";
echo "<a href=\"".function3($var1,$var3)."\">Funktion 3</a>";

Was wird das eigentlich?

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
ich glaub, das ist nicht was er will - er will die funktion beim klick aufrufen nicht den return-wert als HREF einsetzen.

Guest

Deleted User
Registered: n/a
Location:
Posts: n/a
mach eine klasse und dann schau dir mal get_class_methods() an ;)
dann machst in der Datei
$class->$action($params);

get_class_methods brauchst zur ausgabe der liste und zur validierung des requests.

Vivo

Dreamworker
Avatar
Registered: May 2002
Location: Tal der Könige
Posts: 1478
Zitat von grOOvekill@
Hm, die /'s sind ja lediglich da um die "'s verwenden zu können. Ich denke nicht, daß die da eine Rolle spielen. Aber wenn ich richtig gesehen habe, verwendest du vor und nach function einen Punkt. Mal sehen, ob das was hilft. oder war das ein irrtum? ;)

Wenn du im String statt den " ein ' hernimmst, hast du das nicht nötig ...
Aber stimmt ... da oben hab ich wirklich was vergeigt :)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von grOOvekill@
Hallo!

Habe folgendes vor:
In einem Skript befinden sich beispielsweise 10 Funktionen. Diese Funktionen soll man in einer Startseite anhand von Links aufrufen können. Die Funktionen befinden sich aber alle in einem einzigen Skript. Nachdem jede Funktion ausgeführt wurde und ein Ergebnis angezeigt hat, soll darunter wieder ein Link zur Verfügung stehen, der mich zur Hauptseite zurückbringt, die alle Funktionslinks beinhaltet.

Ich hab's auf diese Art probiert, aber hat nicht hingehauen:

echo ("Eine der Schaltflächen klicken um die jeweilige Funktion aufzurufen:<br>");
echo ("<a href=\"function1($var1)\">Funktion 1</a>");
echo ("<a href=\"function2($var1,$var2)\">Funktion 2</a>");
echo ("<a href=\"function3($var1,$var3)\">Funktion 3</a>");


Hab ich irgendwelche Parameter vergessen oder wie geht das?
<?php echo $PHP_SELF ?> könnte da ja möglicherweise auch helfen, oder nicht?

Danke für Eure Hilfe!
ich täts so (oder so ähnlich) machen:
Code: PHP
// testvariablen
$var1=$var2=$var3=$var4=$var5='dreck';
// die ausgabe...
echo ('Eine der Schaltflächen klicken um die jeweilige Funktion aufzurufen:<br>');
echo ("<a href=\"?f=function1&args[0]=$var1\">Funktion 1</a><br>");
echo ("<a href=\"?f=function2&args[0]=$var2&args[1]=$var3\">Funktion 2</a><br>");
echo ("<a href=\"?f=function3&args[0]=$var4&args[1]=$var5\">Funktion 3</a><br><br>");

// aufrufteil...
if(isset($_GET['f']))
{
	$ret = $_GET['f']($_GET['args']);
}

// funktionen:
function function1($x)
{
	echo 'function 1<br>';
}
function function2($x)
{
	echo 'function 2<br>';
	foreach($x as $dummy)
	{
		echo $dummy.'<br>';
	}
}
function function3($x)
{
	echo 'function 3<br>';
	foreach($x as $dummy)
	{
		echo $dummy.'<br>';
	}
}
ich frag mich aber mal nicht, wofür man sowas überhaupt braucht :rolleyes: :D

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Zitat von atrox
ähh... ich glaube hier wird total falsch vorgegangen - normalerweise passiert das in etwa so:
Code:
<? 
switch ($action) {
  case function1:
    echo "ich bin funktion 1";    
    echo $var1;
    echo $var2;
    break;
  case function2:
    ....
    break;
  default:
    echo "<a href=\"{$SCRIPT_NAME}?action=function1&var1=xxxx&var2=yyyy\">f1</a>";
    echo "<a href=\"{$SCRIPT_NAME}?action=function1&var1=xxxx\">f2</a>";
    break;
  }
?>

Also meiner Meinung nach, sollte das die Lösung des Problems sein ... nur halt statt echo $var; einfach die function aufrufen ...

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Maehmann
Also meiner Meinung nach, sollte das die Lösung des Problems sein ... nur halt statt echo $var; einfach die function aufrufen ...
meine lösung is halt eleganter :D

ich muss zwar zugeben, sie bietet u.u. sicherheitsrisiken, aber sie trifft genau die anforderung: über einen link eine funktion aufrufen....
muss mal probieren, ob man exec('format c:') ausführen kann :D

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
um jeden versuch der absicherung von vorherein zu untergraben, könnte man den parameter auch gleich an eval() übergeben :)

btw.. isset funktioniert nicht auf funktionen, man muß function_exists() verwenden.

einer von vielen wegen, wie man einen filter machen könnte bevor man die funktion direkt aufruft, wäre:

if (in_array($_GET[f],array("func1","func2",...)) && functions_exists($_GET[f])) {
...
}

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von atrox
um jeden versuch der absicherung von vorherein zu untergraben, könnte man den parameter auch gleich an eval() übergeben :)

btw.. isset funktioniert nicht auf funktionen, man muß function_exists() verwenden.

einer von vielen wegen, wie man einen filter machen könnte bevor man die funktion direkt aufruft, wäre:

if (in_array($_GET[f],array("func1","func2",...)) && functions_exists($_GET[f])) {
...
}
ah - an eval hab ich garnicht gedacht :D - verzeih mir meine nachlässigkeit :p
isset() sollte nur überprüfen, ob die variable ('f') überhaupt existiert, was ja bei get-variablen nich wirklich zwingend ist, oder? function_exists dürfte imho ebenfalls einen fehler ausgeben, wenn die übergabevariable eben keine ist... ich will mich jetzt aber nich näher damit beschäftigen... es ist halt eine gewaltige sicherheitslücke.... :rolleyes:

ps: imho wäre noch eine möglichkeit objekte zu verwenden... :)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz