Fehlermeldung in der error_log

Hallo zusammen,
wer kann mir bei folgender Fehlermeldung helfen?

[Tue Aug 21 13:44:17 2007] [error] [client 78.51.52.113] [Tue Aug 21 13:44:17 2007] anmelden.pl: Operator or semicolon missing before %F6 at anmelden.pl line 60., referer: http://www.letsfind.de/
[Tue Aug 21 13:44:17 2007] [error] [client 78.51.52.113] [Tue Aug 21 13:44:17 2007] anmelden.pl: Ambiguous use of % resolved as operator % at anmelden.pl line 60., referer: http://www.letsfind.de/

Scriptauszug:

$value=~s/%FC/?; #=Line 60

Danke schon mal im vorraus für Eure Hilfe
Gruß Thomas
Team: Auf Wunsch des Autors bearbeitet

Hallo,

Du solltest die „Vars“-Funktion aus CGI.pm verwenden wenn Du Formulardaten ausliest:

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $cgi = CGI->new();
my %params = $cgi->Vars();

Aber zu Deinem Problem:

$value=~s/%FC/?; #=Line 60
$value=~s/%F6/?;

muss

$value=~s/%FC/?/; #=Line 60
$value=~s/%F6/?/;

heissen.

Hallo zusammen,
wer kann mir bei folgender Fehlermeldung helfen?

[Tue Aug 21 13:44:17 2007] [error] [client 78.51.52.113] [Tue
Aug 21 13:44:17 2007] anmelden.pl: Operator or semicolon
missing before %F6 at anmelden.pl line 60., referer:
http://www.letsfind.de/
[Tue Aug 21 13:44:17 2007] [error] [client 78.51.52.113] [Tue
Aug 21 13:44:17 2007] anmelden.pl: Ambiguous use of % resolved
as operator % at anmelden.pl line 60., referer:
http://www.letsfind.de/

Scriptauszug:

@pairs=split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value)=split(/=/,$pair);
$value =~ tr/+/ /;
$value=~s/.25_.25/._./gi;
$value=~s/.25jj.25/.jj./gi;
$value=~s/.25$crawlersoft.25/.$crawlersoft./gi;
$value=~s/%3A/:/gi;
$value=~s/%3D/=/gi;
$value=~s/%2F///gi;
$value=~s/%20/ /;
$value=~s/%40/@/gi;
$value=~s/%2B/+/gi;
$value=~s/%28/(/gi;
$value=~s/%29/)/gi;
$value=~s/%DF/ß/gi;
$value=~s/%0D%0A/\
/gi;

$value=~s/%FC/?; #=Line 60

$value=~s/%F6/?;
$value=~s/%EB/믧i;
$value=~s/%E4/䯧i;
$value=~s/%D6/Ö¯gi;
$value=~s/%DC/ܯgi;
$value=~s/%CB/˯gi;
$value=~s/%C4/įgi;
$value=~s/%A2/?/gi;
$value=~s/%24/$/gi;
$value=~s/%2C/,/gi;
$value=~s/%7C/|/gi;
$value=~s/%26/&/gi;
$value=~s/%7E/~/gi;
$value=~s/%21/!/gi;
$value=~ s/\n/ /g;
$input=~ s/\n/ /g;
$f{$name}=$value;
}

Danke schon mal im vorraus für Eure Hilfe
Gruß Thomas

Hallo,

wie schon von Renee geschrieben, solltest du die Paramter nicht selbst parsen, sondern das ganze von dem CGI-Modul machen lassen.

Wers nicht glaubt lese bitte http://users.easystreet.com/ovid/cgi_course/lessons/… durch - da wird ausführlich erklärt, dass man leicht alles mögliche falsch machen kann.

Grüße,
Moritz

Hallo Renee,
ich hab es gleich geändert und erhalte aber jetzt den nächsten Fehler:


Software error:
Unrecognized character \xE4 at anmelden.pl line 63.

Woran liegt den jetzt der neue Fehler?

Team: Vollzitat gelöscht


Software error:
Unrecognized character \xE4 at anmelden.pl line 63.

Woran liegt den jetzt der neue Fehler?

Wie sieht denn die Zeile 63 aus?

Jetzt hab ich folgenden Fehler:

Software error:
Unrecognized character \xC3 at anmelden.pl line 63.

In der error_log ist folgende Meldung:

[Tue Aug 21 16:23:02 2007] [error] [client 78.51.52.113] [Tue Aug 21 16:23:02 2007] anmelden.pl: Operator or semicolon missing before %E4 at anmelden.pl line 63., referer: http://www.letsfind.de/
[Tue Aug 21 16:23:02 2007] [error] [client 78.51.52.113] [Tue Aug 21 16:23:02 2007] anmelden.pl: Ambiguous use of % resolved as operator % at anmelden.pl line 63., referer: http://www.letsfind.de/
[Tue Aug 21 16:23:02 2007] [error] [client 78.51.52.113] [Tue Aug 21 16:23:02 2007] anmelden.pl: Unrecognized character \xC3 at anmelden.pl line 63., referer: http://www.letsfind.de/

Hier folgt der Scriptteil:

$value=~s/%E4/䯧i; #Zeile 63

Team: Artikel auf Wunsch des Autoren verändert

Jetzt hab ich folgenden Fehler:

tja, wenn du $cgi->Vars verwenden würdest, wärst du jetzt schon fertig.
warum ignorierst du den rat von renee?

Tja Tina,
ich habe noch nie mit Modulen gearbeitet und habe mir Perl nur durch das lesen von Büchern halbwegs beigebracht, aber jetzt stoß ich scheinbar an meine Grenzen.

Jetzt hab ich folgenden Fehler:

tja, wenn du $cgi->Vars verwenden würdest, wärst du jetzt
schon fertig.
warum ignorierst du den rat von renee?

ich habe noch nie mit Modulen gearbeitet und habe mir Perl nur
durch das lesen von Büchern halbwegs beigebracht, aber jetzt
stoß ich scheinbar an meine Grenzen.

entschuldigung, aber der folgende code:

use CGI;
my $cgi = CGI-\>new();
my %params = $cgi-\>Vars();

liest alle cgi-parameter in den hash %params ein.
ich weiss nicht, wo genau du da jetzt an deine
grenzen stoesst.
immer diese paranoia vor modulen. es ist einfach ein
„use Modul“. das liest die zugehörige Modul.pm datei ein.
das ist keine magie!
ich würde eher bei deinen vielen regexes an meine grenzen stossen.
also bitte, was genau stört dich an den 3 zeilen oben?
wenn du das konkret sagst, kann man dir vielleicht auch weiterhelfen.

Tja Tina,
ich habe noch nie mit Modulen gearbeitet und habe mir Perl nur
durch das lesen von Büchern halbwegs beigebracht, aber jetzt
stoß ich scheinbar an meine Grenzen.

Aktuelle Literatur rät ebenfalls schon seit langem zur Nutzung der Standardmodule - dazu gehört auch das Modul CGI. Es gehört seit sehr vielen Jahren zur Standardinstallation von Perl und ist auf sämtlichen Webservern, wie auch in ActivePerl und bei allen aktuellen Linux-Distributionen enthalten.

Auch die Perl-Dokumentation enthält zu allen Modulen einfache Anwendungsbeispiele. Solltest Du Perl nicht auf dem eigenen Rechner installiert haben, solltest Du es nachholen. Perl für Windows gibts kostenlos u.a. von ActiveState, bei Linux sollte es vorinstalliert sein. Perl-Dokumentation wird von ActiveState als HTML geliefert, oder man tippt an der Eingabeaufforderung „perldoc CGI“ (oder einen anderen Modulnamen). Perl auf dem eigenen Computer hilft auch bei der Fehlersuche …

Abschließend noch ein paar gute Gründe, das CGI-Modul zu benutzen.

  • Man braucht das Rad nicht 2x erfinden.
  • Die Variante mit use CGI ist übersichtlicher.
  • CGI hat jahrelange Weiterentwicklung und Fehlersuche schon hinter sich.
  • Die vorgestellte Eigenlösung ist fehleranfällig.
  • Die vorgestellte Eigenlösung könnte Sicherheitslücken enthalten.

Jetzt hab ich folgenden Fehler:

tja, wenn du $cgi->Vars verwenden würdest, wärst du jetzt
schon fertig.
warum ignorierst du den rat von renee?