Klaus Mock: 2 Scripte zusammenführen

Beitrag lesen

Hallo,

if($query_string !~ /\S|=/){
        &produce_error(
                "You Did not access the script through an HTML form"
                );
        }

WAS HEISST DAS?

Schrei nicht so;-)

Wie ich schon früher sagte, werden in beiden Scripts die CGI-Parameter eingelesen. Einmal mittels Modul CGI.pm, einmal mit selbstgeschriebenem Code.
Beim Zusammenführen beider Scripts nimmt quasi ein Teil dem anderen die Parameter weg. Dabei ist es unerheblich welcher Teil zuerst aufgerufen wird. Der zweite Teil hat immer das nachsehen.
Im Falle, daß sendMail zuerst aufgerufen wird, scheitert das read(...), wodurch $query_string leer bleibt, und daher die Fehlermeldung.

Wenn Du Dich dafür  entscheidest, Die Parameter mit CGI.pm auszulesen, wiue es im MAilscript passiert, dann solltest Du diese Parameter auch für den DB-Teil verwenden.

Analysiere mal die Zeilen
<code>
read(STDIN,$query_string,$ENV{'CONTENT_LENGTH'});
$time_gap=$time_transfare_seconds+($time_transfare_minutes*60)+($time_transfare_hours*60*60);
if($query_string !~ /\S|=/){
&produce_error(
"You Did not access the script through an HTML form"
);
}
unless($csv_file=&pick_up("file",$query_string)){
&produce_error(
"You did not provide your HTML form with a CSV file path."
);
}
@pairs=split("&",$query_string);
$l=0;
foreach $pair (@pairs){
if($pair=~/[;<>&\*|]/){ &produce\_error( "Using [;<>&\\*|] meta-characters is frobidden for security reasons."
);
}
($e_names[$l],$e_values[$l])=split("=",$pair);
$e_names[$l]=~s/%([\dA-Fa-f][\dA-Fa-f])/pack("C",hex($1))/eg;
$e_names[$l]=~tr/+/ /;
$e_values[$l]=~s/%([\dA-Fa-f][\dA-Fa-f])/pack("C",hex($1))/eg;
$e_values[$l]=~tr/+/ /;
if($e_names[$l]=~/"|,/){
$e_names[$l]=~s/"/""/g;
$e_names[$l]=""".$e_names[$l].""";
}
if($e_values[$l]=~/"|,/){
$e_values[$l]=~s/"/""/g;
$e_values[$l]=""".$e_values[$l].""";
}
$l=$l+1;
}
</code>

Dann versuche, den parameterrelevanten Teil durch CGI.pm zu ersetzen. Ist gar nicht mal so schwer.
Wichtige Bestandteile dieser Codesuppe sind read(), $query_string, @pairs, @e_names,@e_values.
Leider werden in diesem Codefragment neben dem reinen Parameterauslesen auch noch einige Modifikationen vorgenommen. Da mußt Du dann schon aufpassen.

Einen modifizierten Code will ich hier aber nicht posten, da Du ihn höchstwahrscheinlich einfach rüberkopieren würdest und nichts verstanden hast. Beim nächsten Problem würdest Du wieder anstehen, was auf Dauer Unmengen an Zeit kosten würde. Vor allem für Dich.
Deshalb mein Tip: Lerne Perl und HTTP bzw. CGI verstehen. Dann mache es selbst.

Grüße
  Klaus