perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 31
Click for quality!




08.02.2012 / 22:35

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl/CGI: Scripts des Perl-Archiv zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragbestellscript wird geblockt von XP und anderen
Seitenanfang
Hallo,
ich schleppe seit Jahren ein Warenkorb Script mit mir rum, das auf dem server installiert ist, und wenn der kunde bestellung absenden drückt, dann schreibt das script "Bestellung übertragen - OK" in ein zuvor geöffnetes Popup. diese scripting aktion wird nicht nur von norton internet security geblockt sondern auch von Windows IE wenn die sicherheitsstufe auf hoch steht.
Daher habe ich schon ein paar mal versucht den unnötigen Text "Bestellung übertragen -OK-" einfach aus dem script rauszulöschen. danach funktioniert regelmässig das script nicht mehr.
ich mach irgenwas falsch beim löschen. das ist der code:
#!/usr/bin/perl
#
$mailprog = "/usr/sbin/sendmail";

&ReadParse;
&processOrder;
&print_danke;
exit(0);

sub processOrder {
$boundary = time;
@str = ();
push(@str,"| $mailprog -t");
$- = 0;
foreach $str (@str) {
open(FILE, $str) || &return_failed_file_open($str);
print FILE "To: $in{'To'}\n";
print FILE "From: $in{'From'}\n";
print FILE "Reply-To: $in{'From'}\n";
print FILE "Subject: $in{'Subject'}\n";
print FILE "X-Mailer: Super Mailer\n";
print FILE "MIME-Version: 1.0\n";
print FILE "Content-Type: multipart/mixed; boundary=\"_" . $boundary . "_\"\n\n";
print FILE "--_" . $boundary . "_\n";
print FILE "Content-Type: text/plain; charset=\"us-ascii\"\n\n";
print FILE "$in{'Message'}\n";
print FILE "--_" . $boundary . "_\n";
print FILE "Content-Type: text/plain; charset=\"us-ascii\"\n";
print FILE "Content-Disposition: attachment; filename=\"order" . $boundary . ".osm\"\n\n";
print FILE "$in{'Attachment'}\n\n\n";
print FILE "--_" . $boundary . "_\n";
close(FILE);
}
#} wenn kein user email dann klammer

# Send E-Mail to User
#
@str = ();
push(@str,"| $mailprog -t");
$- = 0;
foreach $str (@str) {
open(FILE, $str) || &return_failed_file_open($str);
print FILE "To: $in{'From'}\n";
print FILE "From: $in{'To'}\n";
print FILE "Reply-To: $in{'To'}\n";
print FILE "Subject: ihre mail\n";
print FILE "X-Mailer: Superman\n\n";
$in{'Message'} = "bla,bla,bla

\n\n".$in{'Message'};
# $in{'Message'} = $in{'Message'}."XXX";
print FILE "$in{'Message'}\n\n";
close(FILE);
}
}
sub print_danke {
print "Content-type: text/html\n\n";
print qq|
<html>
<head>
<title>$in{'Subject'}</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" OnLoad="self.focus()">
<center>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td align="center">
<form>
<font face="Arial, Helvetica, sans-serif" size="2"><b>Bestellung erfolgreich übertragen!</b>
<p><input type="button" value="OK" onclick="self.close()"></p>
</form>
</td>
</tr>
</table>
</center>
</body>
</html>
|;
}

sub return_failed_file_open {
print "Content-type: text/html\n\n";
print "Couldn't open file $_[0]: $!";
exit(1); }

sub ReadParse {
if (@_) {
local (*in) = @_;
}
local ($i, $loc, $key, $val);
# Read in text
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$in = $ENV{'QUERY_STRING'};
} elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $in, $ENV{'CONTENT_LENGTH'});
}
# Puffern des Input
$in_buffer = $in;
@in = split(/&/,$in);
foreach $i (0 .. $#in) {
# Convert plus's to spaces
$in[$i] =~ s/\+/ /g;
# Convert %XX from hex numbers to alphanumeric
$in[$i] =~ s/%(..)/pack("c",hex($1))/ge;
# Split into key and value.
$loc = index($in[$i],"=");
$key = substr($in[$i],0,$loc);
$val = substr($in[$i],$loc+1);
$in{$key} .= '\0' if (defined($in{$key})); # \0 is the multiple separator
$in{$key} .= $val;
## $in{'Message'} =~ s/\n//gi; ## eines von beidem...
$in{'Message'} =~ s/\r//gi;
}
return 1; # just for fun
}

Datum: 03.12.2005-15:50

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
Hi,

so wie ich es sehe, ist das Problem nicht der Code, den Du gepostet hast, sondern vielmehr der Aufruf desselben im anderen Skript. Das ist wahrscheinlich eine Javaskript Funktion, die als unsicher gilt.

Wie wird denn das Skript genau aufgerufen, also das, was passiert, wenn im Original Skript der Submit Button gedrückt wird - da steht wahrscheinlich ein "onsubmit", welches ein JavaSkript Funktion aufruft - das wird das Problem sein.

Datum: 09.12.2005-10:09

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
auf der webseite steht :
      <script language="JavaScript">
<!--
document.write(parent.printEMail());
//-->
</script>

das dort aufgerufene printEMail()

sieht so aus:
[code]function printEMail() {
var s = new String("");
var msg = new String("");
var aGb = new String("");
var mailfrom = new String("");
var Now = new Date();
var DateStr = Now.getDate() + '.';
var year = Now.getYear();
if (year < 2000) year += 1900;
if ((Now.getMonth()+1) < 10) DateStr += '0' + (Now.getMonth()+1) + '.' + year
else DateStr += (Now.getMonth()+1) + '.' + year;
msg = printMessage(DateStr);
if (Kunde.email != "") {mailfrom = Kunde.email;} else {mailfrom = "myxxxemail@gmx.net";}
s += '<form method="post" action="http://www.xxx.de/cgis/mws_mail.pl" target="OrderWindow" onSubmit="return parent.initBasket(\'danke.html\',3000)">\n';
s += '<input type="hidden" name="From" value="' + mailfrom + '">\n';
s += '<input type="hidden" name="To" value="myxxxemail@gmx.net">\n';
s += '<input type="hidden" name="Subject" value="Bestellung bei xxx">\n';
s += '<input type="hidden" name="Message" value="' + convertMessage(msg) + '">\n';
s += '<input type="hidden" name="Attachment" value="' + printAttachment(DateStr) + '">\n';
s += '<font face="Arial, Helvetica, sans-serif" size="1"><input type="submit" value="Bestellung absenden" onclick="return pruefen()"></font></form>\n';
return s;
}[code]

Datum: 09.12.2005-13:41

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
und wo wird "OrderWindow" gebaut?
(Ich hasse JavaScript)

svenXY

Datum: 09.12.2005-14:32

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
in der basket.js die im hintergrunf läuft stehen folgende Zeilen:

Zeile 417

	var orderWindow;

Zeile 5.458
var orderWin=window.open("", "OrderWindow", "scrollbars=yes,width=300,height=100");[code]
Zeile 41.121 [code] s += '<form method="post" action="http://www.xxx.de/cgis/mws_mail.pl" target="OrderWindow" onSubmit="return parent.initBasket(\'danke.html\',3000)">\n';

PS: Ich hasse JS auch.

Datum: 09.12.2005-16:28

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
Nochmal wegen code fehler..
In der basket.js die im hintergrund läuft stehen folgende Zeilen:

Zeile 417

	var orderWindow;

Zeile 5.458
var orderWin=window.open("", "OrderWindow", "scrollbars=yes,width=300,height=100");

Zeile 41.121
	s += '<form method="post" action="http://www.xxx.de/cgis/mws_mail.pl" target="OrderWindow" onSubmit="return parent.initBasket(\'danke.html\',3000)">\n';

PS: Ich hasse JS auch.

Datum: 09.12.2005-16:31

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
Hi,

das liegt an den PopupBlockern der Webbrowser, an denen Du mit "window.open(...)" nicht vorbei kommst. Wenn Du das per JavaScript lösen möchtest, wirst Du dazu übergehen müssen, das "Danke-Fenster" als dynamischen Layer zu coden. Die nicht so elegante JavaScript Lösung wäre, den Dank einfach per alert() auszusprechen.

Eine andere und gängige Methode ist, Fächer CGIs zu erstellen, die nach der Verarbeitung gegebenenfalls eine Dankseite mit einem "Zurück-Link" nachschicken.

Nebenbei:
Immer mehr Unternehmen setzen ihre Werbung mittlerweile in solche JavaScript-Layer. Das wird über kurz oder lang dazu führen, dass immer mehr Internetbenutzer JavaScript in ihren Browsern abschalten werden.

Ein weiterer Punkt ist dass Daten, die ein Webserver entgegen nimmt, in jedem Falle durch das CGI Skript geprüft werden müssen. JavaScript reicht da nicht aus, warum sollte klar sein. Somit kann Javascript in der Tat nicht der Weisheit letzter Schluss sein, sondern immer nur eine Notlösung.

-uw

Datum: 10.12.2005-18:41

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
Die popup blocker sind tat. ein problem, aber nicht das größte.
selbst wenn das danke fenster aufgeht, steht manchmal nichts drin, und das script das die bestellung abschickt klemmt.
Deswegen wollte ich den ganzen "danke " krempel aus dem cgi ersatzlos rausstreichen.
bisher habe ich nur im cgi den teil gelöscht, muß aber wohl noch mehr machen, denn : wenn ich das mache, läuft hinterher nichts mehr.

wahrscheinlich muß ich den

var orderWindow;

und den
var orderWin=window.open("", "OrderWindow", "scrollbars=yes,width=300,height=100");

und
s += '<form method="post" action="http://www.xxx.de/cgis/mws_mail.pl" target="OrderWindow" onSubmit="return parent.initBasket(\'danke.html\',3000)">\n';

rausmachen. Nur da steht auch der post teil mittendrin. wie baue ich den post teil um damit das das noch geht, halt ohne danke.

kannst du mir da weiterhelfen, dann würde ichs nochmal anfangen.

Datum: 11.12.2005-20:20

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
Hi,
also ich würde einfach ganz normal das Formular abschicken (ohne JavaScript und ohne target=...), dann wird die Danke-Seite ganz normal aufgerufen und Du brauchst das ganze JS Geraffel nicht mehr. Und dann statt des "Close"-Buttons einen Back-Button und fertig.

Gruss,
svenXY

Datum: 12.12.2005-09:49

Beitragre: bestellscript wird geblockt von XP und anderen
Seitenanfang
Hi,

dem Beitrag von svenXY möchte ich mich anschließen. Schau Dir mal das Kontaktformular meines Schreibsevices an.

http://warp-factor.homelinux.net/cgi-bin/write/contact.cgi

Javascript wird hier nur dazu verwendet, Informationen bereitzustellen. Das CGI gibt die Möglichkeit einen simplen eMail Kontakt herzustellen oder aber direkt eine Bestellung aufzugeben,mit anschließender Danksagung. Alles wird über eine CGI gesteuert, die somit 6 verschiedene Outputs generiert.

-uw

Datum: 13.12.2005-01:39

-






-
-