Avatar billede christian_h Nybegynder
11. april 2002 - 06:09 Der er 9 kommentarer og
1 løsning

Få et CGI script til lave en på html side

Hej Alle
Jeg har et CGI script, som jeg bruger på min HP, til at processe en vare bestilling, incl. kunde oplysninger med, scriptet er pt. lavet, så det bare henter en dødsyg side, der hedder tak.htm.
Men er der nogen af jer eksperter, der kan lave scriptet om, så det (når man har ekserkveret scriptet) laver en pæn html side ud fra de oplysninger som scriptet har indsamlet ??, evt. med en knap i bunden som åbner "udskriv" vinduet så kunden kan få skrevet sin ordre ud ??.
Jeg håber det er OK at poste hele scriptet her.

Håber nogen kan hjælpe.

Mvh. Christian H

#!/usr/bin/perl
print "Content-type: text/html\n\n";

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
$counter=0;
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$counter=$counter+1;
$Titel{$counter}=$name;
$FORM{$name} = $value;
}

use Net::SMTP;
$smtp = Net::SMTP->new('smtp.mail.dk', Hello => 'rr.com');
$smtp->mail('herogder@post.tele.dk');
$smtp->to('herogder@post.tele.dk');
$smtp->data();
$smtp->datasend("To: herogder@post.dk\n");
$smtp->datasend("From: $FORM{'bemail'}\n");
$smtp->datasend("Subject: Bestilling fra herogder.dk\n");
$smtp->datasend("\n");

print<<ENDE_AUSGABE;
<HTML>
<HEAD>
<TITLE>Email afsendt</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
<center>
<SCRIPT>
self.location.href="$FORM['url']tak.htm"
</SCRIPT>
ENDE_AUSGABE


$smtp->datasend("Hej ".$FORM{'bname'}."\n\n");
$smtp->datasend("Du har afgivet følgende oplysninger/bestilling:\n\n");
$smtp->datasend("Evt. Kundennummer:".$FORM{'bkdnr'}."\nEvn Firma: ".$FORM{'bfirma'}."\nNavn: ".$FORM{'bname'}."\n");
$smtp->datasend("Gade: ".$FORM{'bstrasse'}."\nPost nr. & BY: ".$FORM{'bpostcode'}." ".$FORM{'bstadt'}."\nTelefon:".$FORM{'btelefon'}."\nEmail:".$FORM{'bemail'}."\nKommentar:\n".$FORM{'Kommentar'});
#$smtp->datasend("\n\nLieferadresse:\nFirma: ".$FORM{'lfirma'}."\nName: ".$FORM{'lnachname'}."\nPLZ/Ort: ".$FORM{'lpostcode'}." ".$FORM{'lstadt'}."\nStrasse:".$FORM{'lstrasse'});

if ($FORM{'orderm'} eq "Kontoeinzug") {
    $mailbody=$mailbody."\n\nKontendaten:\nBank:".$FORM{'ktoinst'}."\nBLZ:".$FORM{'ktoblz'}."\nKtoNummer:".$FORM{'ktonr'}."\nInhaber:".$FORM{'ktoinh'};
}
if ($FORM{'orderm'} eq "Kreditkarte") {
    $mailbody=$mailbody."\n\nKreditkarte:\nInstitut:".$FORM{'kredart'}."\nKartennummer:".$FORM{'krednr'}."\nAblauf Datum:".$FORM{'kredablauf'};
    if ($FORM{'faxja'} eq "on") {
        $mailbody=$mailbody."\nKreditkarteninformationen werden per Fax gesendet";
    }
}

$smtp->datasend("\n\nØnsker at bestille:\n\n");
$smtp->datasend("Betaling via ".$FORM{'orderm'}."\n");
$an=1;

while ($FORM{'item'.$an})  {
    $artikel='item'.$an;
    $menge='quantity'.$an;
    $einzelpreis='priceeach'.$an;
    $vollpreis='totalcost'.$an;
       
$smtp->datasend($FORM{$artikel}."  Antal:".$FORM{$menge}."  Stk. Pris:".$FORM{$einzelpreis}.$pr."  Total pris:".$FORM{$vollpreis}."\n");

$an++;
}

$smtp->dataend();
$smtp->quit;
Avatar billede otis Nybegynder
11. april 2002 - 06:14 #1
du kan vel bruge `touch` som laver filen, og så selv definere outputtet ?
noget alá:
ecec("touch fil.html");
$foo > fil.html;
hvis det kan passe ?
Avatar billede christian_h Nybegynder
11. april 2002 - 06:15 #2
Det kunne se ud som om at ALLE "Backslash´erne" foran "backslash n" er forsvundet i postningen, men de er der altså i det originale script

:-( christian H
Avatar billede thomasledet Nybegynder
11. april 2002 - 08:41 #3
send scriptet til mig: eksperten@sitemakerz.dk, så kigger jeg på det i løbet af i dag...
Avatar billede thomasledet Nybegynder
12. april 2002 - 00:22 #4
her er en løsning på dit problem... den er ikke testet, så skriv endelig, hvis det fejler eller ikke virker efter hensigten... fremtidig korrespondance bedes foregå over dette spørgsmål.

#!/usr/bin/perl
print "Content-type: text/html\n\n";

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
$counter=0;
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

$counter=$counter+1;
$Titel{$counter}=$name;
$FORM{$name} = $value;
}

use Net::SMTP;
$smtp = Net::SMTP->new('smtp.mail.dk', Hello => 'rr.com');
$smtp->mail('herogder@post.tele.dk');
$smtp->to('herogder@post.tele.dk');
$smtp->data();
$smtp->datasend("To: herogder@post.dk\n");
$smtp->datasend("From: $FORM{'bemail'}\n");
$smtp->datasend("Subject: Bestilling fra Herogder.dk\n");
$smtp->datasend("\n");

print qq½<HTML>
<HEAD>
<TITLE>Email afsendt</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
<DIV align="center">½;
printf("Hej %s<BR><BR>\n", $FORM{'bname'});
print("Du har afgivet følgende oplysninger/bestilling:<BR>\n");
printf("Evt. Kundennummer: %s<BR>Evt. firma: %s<BR>Navn: %s<BR>\n",$FORM{'bkdnr'}, $FORM{'bfirma'}, $FORM{'bname'});
printf("Gade: %s<BR>Postnummer og by: %s %s<BR>Telefon: %s<BR>Email: %s<BR>Kommentar: %s<BR><BR>\n", $FORM{'bstrasse'}, $FORM{'bpostcode'}, $FORM{'bstadt'}, $FORM{'btelefon'}, $FORM{'bemail'}, $FORM{'Kommentar'});

$smtp->datasend("Hej ".$FORM{'bname'}."\n\n");
$smtp->datasend("Du har afgivet følgende oplysninger/bestilling:\n\n");
$smtp->datasend("Evt. Kundennummer:".$FORM{'bkdnr'}."\nEvn Firma: ".$FORM{'bfirma'}."\nNavn: ".$FORM{'bname'}."\n");
$smtp->datasend("Gade: ".$FORM{'bstrasse'}."\nPost nr. & BY: ".$FORM{'bpostcode'}." ".$FORM{'bstadt'}."\nTelefon:".$FORM{'btelefon'}."\nEmail:".$FORM{'bemail'}."\nKommentar:\n".$FORM{'Kommentar'});
#$smtp->datasend("\n\nLieferadresse:\nFirma: ".$FORM{'lfirma'}."\nName: ".$FORM{'lnachname'}."\nPLZ/Ort: ".$FORM{'lpostcode'}." ".$FORM{'lstadt'}."\nStrasse:".$FORM{'lstrasse'});

if ($FORM{'orderm'} eq "Kontoeinzug") {
    $mailbody=$mailbody."\n\nKontendaten:\nBank:".$FORM{'ktoinst'}."\nBLZ:".$FORM{'ktoblz'}."\nKtoNummer:".$FORM{'ktonr'}."\nInhaber:".$FORM{'ktoinh'};
}
if ($FORM{'orderm'} eq "Kreditkarte") {
    $mailbody=$mailbody."\n\nKreditkarte:\nInstitut:".$FORM{'kredart'}."\nKartennummer:".$FORM{'krednr'}."\nAblauf Datum:".$FORM{'kredablauf'};
    if ($FORM{'faxja'} eq "on") {
        $mailbody=$mailbody."\nKreditkarteninformationen werden per Fax gesendet";
    }
}

print("Ønsker at bestille:<BR><BR>\n");
printf("Betaling via %s<BR>",$FORM{'orderm'});

$smtp->datasend("\n\nØnsker at bestille:\n\n");
$smtp->datasend("Betaling via ".$FORM{'orderm'}."\n");
$an=1;

while ($FORM{'item'.$an})  {
    $artikel='item'.$an;
    $menge='quantity'.$an;
    $einzelpreis='priceeach'.$an;
    $vollpreis='totalcost'.$an;
       
$smtp->datasend($FORM{$artikel}."  Antal:".$FORM{$menge}."  Stk. Pris:".$FORM{$einzelpreis}.$pr."  Total pris:".$FORM{$vollpreis}."\n");
printg("Artikel: %s<BR>Antal: %s<BR>Stk. pris: %s %s<BR>Totalpris: %s<BR><BR>", $FORM{$artikel}, $FORM{$menge}, $FORM{$einzelpreis}, $pr, $FORM{$vollpreis});
$an++;
}

printf("Mange tak for din bestilling! Bekræftelse er sendt til %s.", $FORM{'bemail'});
print("</DIV></BODY></HTML>");

$smtp->dataend();
$smtp->quit;
Avatar billede thomasledet Nybegynder
12. april 2002 - 00:23 #5
har allerede selv fundet en fejl... der, hvor der står "printg" næsten nederst... der skulle selvfølgelig stå "printf"
Avatar billede thomasledet Nybegynder
12. april 2002 - 00:23 #6
... det er ikke sådan at holde styr på de fede fingre på denne tid af døgnet... :)
Avatar billede christian_h Nybegynder
12. april 2002 - 07:52 #7
Indtil videre tak, jeg tester det lige så snart jeg har tid, og melder herefter tilbage.

mvh Christian H
Avatar billede christian_h Nybegynder
13. april 2002 - 10:51 #8
Hej Thomas

Det du har lavet virker fint, lige på nær at den kun sender mail til ham der bestiller varen, hvis jeg sætter en # foran printf("Mange tak for din bestilling! Bekræftelse er sendt til %s.", $FORM{'bemail'});
sender scriptet til mig, men så selvfølge ikke til ham, men det er faktisk OK, da jeg manuelt skal tilføje noget i ordre tilbagemeldingen, men det kunne da være rart at vide hvad der kunne være galt.

Kunne du evt. besvare den sidste del af mit ?
Hvordan man laver 2 knapper på den html side de bliver genereret, den ene skal være "tilbage til start" og den anden skal åbne "udskriv vinduet".

Mvh.

Christian H
Avatar billede thomasledet Nybegynder
13. april 2002 - 16:40 #9
det nemmeste vil nok være at finde nogle eksempler ude på nettet...
Avatar billede christian_h Nybegynder
13. april 2002 - 20:18 #10
Hej Thomas.

Hmmmmm, et lidt kedligt svar ;-), men jeg tildeler dig dine point nu, du har jo trods alt hjulpet mig med en del af mit ?, TAK for det.

:-)

Christian H
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester