webForumDet fria alternativet

Anropa funktion från formulär?

PHP

8 svar · 505 visningar · startad av Compusa

Medlem sedan jan. 20023 327 inlägg
Frågan#1

Har en php fil och en tillhörande template fil. Php-filen är tänkt att fungera som en controler.

En submit-knapp i ett formulär i min template fil skulle kunna se ut så här:

<p><input type="submit" id="f_reg" [B]onclick="reg"[/B] tabindex="6" value="Registrera mig" /></p>

Går det på något smart sätt anropa en funktion med samma namn som värdet onclick i php filen? Php-filen (controlern) är en class med olika events funktioner. I detta fall ska submit knappen anropa en funktion som heter reg. Eftersöker en funktionalitet liknande den som finns i asp.net

Medlem sedan dec. 19996 721 inlägg
#2

onclick-attributet kan du inte pilla på, eftersom det kräver att en motsvarande javascript-funktion finns deklarerad. ASP.NET löser detta genom att anropa en generell funktion för alla knappar o.dyl., som skickar med namnet på knappen som klickades och eventuella argument (genom 2 hidden-fält).

<form ......>
<script ......>
function doPostback(eventForm,eventTarget,eventArgs)
{
   eventForm.eventtarget.value=eventTarget;
   eventForm.eventargs.value=eventArgs;
}
</script>   
<input type="hidden" name="eventtarget" value="">
<input type="hidden" name="eventargs" value="">
<p><input type="submit" id="f_reg" onclick="doPostback(this.form,this.id,this.value);" tabindex="6" value="Registrera mig" /></p>

Om du verkligen vill ha ASP.NET-liknande funktionalitet så bör du ta en titt på Prado

Medlem sedan jan. 20023 327 inlägg
#3

Tack :)
Hur fungerar detta om användaren har avaktiverat JavaScript?
Jo jag känner till Prado, jag postade en tråd om det för ett bra tag sedan. Tänkte dock bygga något eget.

Medlem sedan dec. 19996 721 inlägg
#4

Compusa skrev:

Hur fungerar detta om användaren har avaktiverat JavaScript?

Inte alls (precis som i ASP.NET eller Prado), men det går ju ändå inte att få något intressant att hända med en input-button utan att ta hjälp av Javascript. Vill du komma någon vart utan javascript så får du leka med submit-knappar i stället, eftersom de skickar med sitt värde och namn om man klickar på dem.

Medlem sedan jan. 20023 327 inlägg
#5

Okej det är nog jag som snurrat till det, tack för hjälpen :)
Man kanske kan bestäma vilken funktion/event som ska triggas med hjälp av en submit-buttons namn...Skulle vilja ha en dynamisk lösning dvs om användaren trycker på knappen "subUser" trigga då ett event som anropar funktionen subUser().

Medlem sedan mars 20034 471 inlägg
#6

Compusa skrev:

Okej det är nog jag som snurrat till det, tack för hjälpen :)
Man kanske kan bestäma vilken funktion/event som ska triggas med hjälp av en submit-buttons namn...Skulle vilja ha en dynamisk lösning dvs om användaren trycker på knappen "subUser" trigga då ett event som anropar funktionen subUser().

PHP är ju serverside. Men du kan ju ha en form med flera olika submittknappar:

<input type="submit" name="knapp1" value="1">
<input type="submit" name="knapp2" value="2">
<input type="submit" name="knapp3" value="3">

Om formen postas med POST kan du i actionsidan ha kod enligt:

if (isSet($_POST['knapp1'])) do_function_1();
elseif (isSet($_POST['knapp2'])) do_function_2();
elseif (isSet($_POST['knapp3'])) do_function_3();
else //om ingen knapp tryckts på...

Om get, använts så finns värdena i $_GET istället. Men dessa funktioner måste då vara PHP-funktioner. I gengäld funkar det utmärkt vare sig användarna har JS-stöd eller ej, eftersom allt sköts av servern.

Medlem sedan jan. 20023 327 inlägg
#7

Jo jag vet mycket väl att PHP är serverside.

aasah skrev:

if (isSet($_POST['knapp1'])) do_function_1();
elseif (isSet($_POST['knapp2'])) do_function_2();
elseif (isSet($_POST['knapp3'])) do_function_3();
else //om ingen knapp tryckts på...

Det är just detta tillvägagångssättet jag vill undvika. Jag vill ha en generell funktion som mappar en knapp till en funktion. Är detta möjligt.

"Pseudo" kod

functionMapper(buttonName) {
buttonName(); // anropa funktionen som har samma namn som knappen
Medlem sedan jan. 20065 inlägg
#8

Vet att det går i Perl men har inte behövt använda det i PHP, men det kan funka:

functionMapper($buttonName) {
${buttonName}();
}

Något liknande den ovanstående koden kanske funkar, har (som jag tidigare nämnt) bara använt det i Perl dock, aldrig behövt använda det i PHP. Tanken är att anropa en funktion som har namnet som ligger i variabeln, hela alltet använder sig av "variabelinterpolation" (eller vad det nu heter på svenska).

Medlem sedan jan. 20023 327 inlägg
#9

Tack esrange, precis vad jag söker. Har inte testat det ännu men nu vet jag ungefär hur det kan se ut :)

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)