Perl -> PHP port vraagjes

Pagina: 1
Acties:

  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 10:21

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
Mja, belachelijke titel, maar weet ff niet hoe ik het moet omschrijven.
Enfin, sinds een tijdje piel ik dus aan in PHP, voorheen was dat in Perl.

Als ik in Perl bezig was, gebruikte ik het volgende (mijzelf aangeleerde) truukje:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
sub post_get {

    ############################################################################
    # POST actie omzetten naar vars
    ############################################################################
    if ($ENV{'REQUEST_METHOD'} eq 'POST')
    {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
        @pairs = split(/&/, $buffer);
        foreach $pair (@pairs)
        {
            ($name, $value) = split(/=/, $pair);
            $value =~ tr/+/ /;
            $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
            $contents{$name} = $value;
             
        }
    }
    ############################################################################
    ############################################################################
    # GET actie omzetten naar vars
    ############################################################################
    if ($ENV{'REQUEST_METHOD'} eq 'GET')
    {
        if (length ($ENV{'QUERY_STRING'}) > 0){
             $buffer = $ENV{'QUERY_STRING'};
             @pairs = split(/&/, $buffer);
             foreach $pair (@pairs){
                  ($name, $value) = split(/=/, $pair);
                  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
                  $contents{$name} = $value; 
             }
    }
    }
    ############################################################################
}


if ($action ne '') 
{
        foreach $allowed_action (@allowed_action)
       { 
              if ($action eq $allowed_action) { &$action; }
       }
}


Wat dus eigenlijk neer komt op het volgende;

• Bevat de variabele $action een waarde ?
• Indien ja, kijken of die inhoud toegestaan is (controleren dmv een array)
• Indien de waarde OK is, een subroutine aanroepen met dezelfde naam als de inhoud.

Oftewel, staat de variabele de inhoud woei heeft ($action = "woei") dan word de subroutine &woei aangeroepen.

Hoe krijg ik nou ziets in PHP voor elkaar :?
Ik weet dat ik de variabele namen iig al wat beter binnen kan krijgen dmv hetvoglende:

PHP:
1
2
while(list($key,$val)=each($_POST)) {  $$key = $val; }
while(list($key,$val)=each($_GET)) {  $$key = $val; }


Echter, hoe kan ik een subroutine c.q. function aanroepen aan de hand van een variabele inhoud netzoals ik mijn Perl scriptjes doe ?


* Koffie hoopt dat iemand me nog een beetje kan volgen ...

Braaikamer - Smoke&BBQ


Verwijderd

code:
1
$varnaam();

Dan wordt de functie aangeroepen met als naam de waarde van $varnaam :)

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

1. POST of GET variabele opvragen:
PHP:
1
$action = $_REQUEST["action"];


2. checken of waarde voorkomt in array met: in_array()

3. functie uitvoeren dmv trucje van Zef :)

4. HTH

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Koffie
  • Registratie: Augustus 2000
  • Laatst online: 10:21

Koffie

Koffiebierbrouwer

Braaimeneer

Topicstarter
OK dan :Y)
Ik wist niet dat die truc van Zef zo kon, ga het meteen uitproberen!
ThX

Braaikamer - Smoke&BBQ


Verwijderd

Koffie : Wel eens gehoord van de CGI module ... ?

Die doet al die onzin voor je... Het is best zinnig om daar eens naar te kijken .... (perldoc CGI)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/my/perl -w

use strict;
use CGI;

my $cgi = new CGI;

print $cgi->param("naam");       # POST of GET levert geen verschil op...
print $cgi->query_string;          # Er zijn inderdaad ook andere dingen op de interface

# en een volledige interface naar HTML, en content-typen
print $cgi->header();
print $cgi->p, "Een paragraaf", $cgi->hr, "^ lijntje"