PHP: auf Funktionen verlinken

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_auf_funktionen_verlinken_61685/page_1 - zur Vollversion wechseln!


grOOvekill@ schrieb am 06.01.2003 um 13:02

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!


Vivo schrieb am 06.01.2003 um 13:58

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 ...


grOOvekill@ schrieb am 06.01.2003 um 14:32

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 schrieb am 06.01.2003 um 14:41

ä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 schrieb am 06.01.2003 um 14:47

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 schrieb am 06.01.2003 um 14:56

ich glaub, das ist nicht was er will - er will die funktion beim klick aufrufen nicht den return-wert als HREF einsetzen.


schrieb am 06.01.2003 um 15:04

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 schrieb am 06.01.2003 um 15:26

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 schrieb am 07.01.2003 um 00:24

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 schrieb am 07.01.2003 um 11:58

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 schrieb am 07.01.2003 um 21:30

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 schrieb am 07.01.2003 um 23:06

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 schrieb am 08.01.2003 um 00:40

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... :)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025