[Perl[ Verplichte velden

Pagina: 1
Acties:

  • BFS
  • Registratie: Augustus 2001
  • Laatst online: 21-08 15:47

BFS

Rude awakening

Topicstarter
Ik heb een uitstapje gewaagd naar server side scripting, in dit geval perl. Ik heb dus een mailform gemaakt en daarbij een perl script wat dit form verwerkt en door stuurt naar een mailadres.

Nu wil ik het script eigenlijk uitbreiden met een aantal verplichte velden maar met de (Google) tutorials die ik heb kunnen vinden kan ik het helaas niet voor elkaar krijgen. Ook de search op GoT levert 1 bruikbare post op, deze heb ik geprobeerd maar krijg het niet werkende.

Het script bij een geraapt van bestaande scripts:

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/perl -w
#


# Perl pragmas
# use 5.003;
use strict;


# Make sure CGI output is not buffered
$|=1;



# Email Stuff
my $mail_program           = '/usr/lib/sendmail -t';
my $admin_email            = "ik\@mijndomein.com";
my %form;

&cgi_header;
&parse_form_data;
&request_condor_update;

#
# Subroutine request_condor_update
#

sub request_condor_update {

    #Local vars
    my $header;
    my $body;
    my $key;
    
    # Email header
    $header  = "To: $admin_email\n";
    $header .= "From: Condor Template. <$admin_email>\n";
    $header .= "Subject: ConDor Update!\n";

    # Email body, include file content
    $body    = "Hi,\n\n";
    
    # foreach $key (keys %form) {
    #    $body .= "$key : $form{$key}\n"
    #    }
    $body   .= "Announcement type     : $form{'announce_type'}\n";
    $body   .= "Geo                   : $form{'geo'}\n";
    $body   .= "Country               : $form{'country'}\n";
    $body   .= "Price List            : $form{'pricelist'}\n";
    $body   .= "Currency              : $form{'currency'}\n\n";
    $body   .= "Part number details   : $form{'partnumber_details'}\n";
    $body   .= "Pricing information   : $form{'pricing_information'}\n\n";
    $body   .= "Effective date from   : $form{'effectivefrom_date'}\n";
    $body   .= "Effective date through: $form{'effectivethrough_date'}\n\n";
    $body   .= "Special comments      : $form{'special_comments'}\n\n";
    $body   .= "Kind Regards,\n";
    $body   .= "ConDor Webbased Update Tool\n\n";

    # Send email
    open (MAIL, "|$mail_program") or die ("Can't open $mail_program for sending email.");
    print MAIL $header;
    print MAIL $body;
    close (MAIL);

}


#
# Subroutine cgi_header
#

sub cgi_header {

    # Print CGI header
    print "Content-type: text/html\n\n";
}


#
# Subroutine parse_form_data
#

sub parse_form_data {

    # Local variables
    my $request_method = $ENV{'REQUEST_METHOD'} || '';
    my $content_length = $ENV{'CONTENT_LENGTH'};
    my $buffer;
    my @pairs;
    my $pair;
    my $name;
    my $value;

    # Determine buffer based on request method
    if ($request_method =~ /^(get|head)$/i) {
        $buffer = $ENV {'QUERY_STRING'}
    }
    elsif ($request_method =~ /^(post)$/i) {
        read (STDIN, $buffer, $content_length)
    }

    # Determine name/value pairs
    $buffer =~ tr/+/ /;
    @pairs = split (/&/, $buffer);
    foreach $pair (@pairs) {
        ($name, $value) = split (/=/, $pair);
        $name  =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        if (exists $form{$name}) { $form{$name} .= "|$value" }
        else { $form{$name} = $value }
    }
}



Kan iemand mij op weg helpen met een goede tutorial of een uitleg van wat er moet gebeuren om dit voor elkaar te krijgen?

Owh, boeken over Perl zijn al besteld dus ik hoop dit soort vragen in het vervolg achterwege te laten.

When did I realize I was God? Well, I was praying and suddenly I realized that I was talking to myself


Verwijderd

Je kunt het op 2 manieren doen:
1) In javascript een "alert" return als een bepaald veld niet is ingevuld op de onsubmit event van het form.

2) Vang met een aantal if constructies af of de waarde ingevuld is of niet, zo nee dan mag ie niet door gaan met emailen, maar de fout op het scherm afdrukken.

  • BFS
  • Registratie: Augustus 2001
  • Laatst online: 21-08 15:47

BFS

Rude awakening

Topicstarter
Ik wil het graag in mijn perl script verwerken want java word hier niet gebruikt, dus ik was al wel bekend met het feit dat er een aantal If statements gemaakt moesten worden.

Daar zit dus een beetje mijn probleem, ik krijg maar heel weinig bruikbare resultaten op google (Verplichte velden perl/Mail form perl/mandatory fields perl en nog wat andere gangbare woord combinaties voor deze zoekopdracht).

When did I realize I was God? Well, I was praying and suddenly I realized that I was talking to myself


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ik heb hier ook een perl script die wel die check doet:

Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
&no_data unless $queryelt{'email'};

...

sub no_data {
    print "Content-type: text/html\n\n";
    $value = "";
    print "<br>\n";
    print "<H3><CENTER>It would seem that you've forgotten to fill in one or more of \n";

    print "the required fields.  Please use your <B>Back</B> button to \n";
    print "do that now.  Thanks\!\n";
    print "</H3></CENTER>\n";
    exit;
}


Waarbij email dan een veldnaam is.

[ Voor 38% gewijzigd door BtM909 op 20-05-2003 11:21 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • BFS
  • Registratie: Augustus 2001
  • Laatst online: 21-08 15:47

BFS

Rude awakening

Topicstarter
Als ik ipv 'email' 'announce_type' in vul krijg ik:
This server has encountered an internal error which prevents it from fulfilling your request. The most likely cause is a misconfiguration. Please ask the administrator to look for messages in the server's error log.
Als ik perl scriptnaam uitvoer in een terminal krijg ik als uitvoer:

Global symbol "$value" requires explicit package name at tryout1.pl line 125.

When did I realize I was God? Well, I was praying and suddenly I realized that I was talking to myself


  • Graaf
  • Registratie: Oktober 2001
  • Laatst online: 20-03-2024

Graaf

blup

zet eens 'my' voor $value

  • BFS
  • Registratie: Augustus 2001
  • Laatst online: 21-08 15:47

BFS

Rude awakening

Topicstarter
perl tryout1.pl
Content-type: text/html

Use of uninitialized value at tryout1.pl line 103.
Use of uninitialized value at tryout1.pl line 104.
Use of uninitialized value at tryout1.pl line 46.
Use of uninitialized value at tryout1.pl line 47.
Use of uninitialized value at tryout1.pl line 48.
Use of uninitialized value at tryout1.pl line 49.
Use of uninitialized value at tryout1.pl line 50.
Use of uninitialized value at tryout1.pl line 51.
Use of uninitialized value at tryout1.pl line 52.
Use of uninitialized value at tryout1.pl line 53.
Use of uninitialized value at tryout1.pl line 54.
Use of uninitialized value at tryout1.pl line 55.
Content-type: text/html

<br>
<H3><CENTER>It would seem that you've forgotten to fill in one or more of
the required fields. Please use your <B>Back</B> button to
do that now. Thanks!
</H3></CENTER>


Hij loopt nu het script dus wel door alleen op de site zelf werkt het nog niet, krijg weer de melding:

This server has encountered an internal error which prevents it from fulfilling your request. The most likely cause is a misconfiguration. Please ask the administrator to look for messages in the server's error log.

When did I realize I was God? Well, I was praying and suddenly I realized that I was talking to myself


  • Graaf
  • Registratie: Oktober 2001
  • Laatst online: 20-03-2024

Graaf

blup

Wat zegt je webserver error log ?

  • Juup
  • Registratie: Februari 2000
  • Niet online
Even een paar algemene tips
  1. Gebruik de CGI module 'use CGI;' als je zelf een script wil schrijven
  2. Gebruik de scripts van nms. Dit zijn de enige (!) goede, veilige, nette Perl scripts voor deze taken.
  3. Ga NOOIT zelf de cgi header parsen want daar zitten gegarandeerd fouten in.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • BFS
  • Registratie: Augustus 2001
  • Laatst online: 21-08 15:47

BFS

Rude awakening

Topicstarter
Helaas heb ik geen toegang tot die logs.

En dit script is geschreven door een van de programmeurs op mijn afdeling, ik heb dat uitgekleed waar mogelijk maar heb bepaalde delen op zijn aanraden laten staan. Vandaar de module en het parsen van de header.

Ik heb inmiddels nog wat verder naar informatie gezocht (blijf natuurlijk niet stil zitten ;)) en ik denk dat ik met if statements verder kom als no_data.

Heeft iemand hier wat extra informatie of tips over?

[ Voor 30% gewijzigd door BFS op 20-05-2003 12:24 ]

When did I realize I was God? Well, I was praying and suddenly I realized that I was talking to myself

Pagina: 1