Trevor, Why not try simplify it to 2 fields and remove most of the validation code? If that works, then you can binary add/delete code until it fails. BTW 'Red' I guess only works on certain mail clients, but not mine, so sorry if I missed something obvious. Regards, Andy.
Trevor Morrison wrote: > > Hi, > > I am running the latest MySql on a windows 200 machine. I also use the > control center gui to do all my work with. I have a Perl program that > parses online order data and then using Perl's DBI I write this data to the > database. Now, It all works fine except that each order and orders items > are written twice to the database. I have looked over my code but only see > one insert statement for order information and the ordered items. I guess I > need a fresh set of eyes to see where my error is. > > I have included the code below with the database connection information > highlighted in red: > > TIA > > Trevor > > #!/usr/local/bin/perl > > #============ > # Main script > #------------ > use strict; > use MivaOrder; > use Data::Dumper; > > #Use Perl's Database Interface (DBI) with the NySQL module to connect the > Maverick database > use DBI; > my %attr = (PrintError => 1, RaiseError => 1); > my $dbname='maverick'; > my $dbuser='root'; > my $dbpass=''; > my > $dbh=DBI->connect('DBI:mysql:database=maverick;host=localhost;port=3306',"$d > buser","$dbpass", \%attr) || die "Unable to connect to database maverick on > localhost: $DBI::errstr\n"; > > my @new_orders; > #my $email = qw(c:\\maverick\\trevor_trial2.txt); > open(ORDER,$ARGV[0]) or die "Error opening \"$ARGV[0]\": $!\n"; > > my $order = undef; > while(<ORDER>) { > > # Keep appending to the order string until we reach the end of the order. > unless(/^Site rating\.\.\: \"/) { > $order .= $_ and next; > } > > # We are done with the order. > > my $obj = MivaOrder->new($order); > #print Dumper(\$obj); > push @new_orders,$obj; > $order = undef; > } > > my $sth1 =$dbh->prepare("INSERT INTO > miva_retail_orders(wholesale_company,order_number,date,credit_card_type,ship > ped,shiptype,bill_name,bill_company,bill_addr1,bill_addr2,bill_city,bill_sta > te,bill_zip,bill_country,ship_name,ship_addr1,ship_addr2,ship_city,ship_stat > e,ship_zip,ship_country,email,bill_phone_number,bill_phone_number2,ship_phon > e_number,ship_phone_number2,sales_tax,shipping_amount,coupon_type,coupon_amo > unt,total) VALUES > (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"); > foreach my $new_order(@new_orders) { > > # Enter the database and write the data > $sth1->execute($new_order->wholesale_company(),$new_order->order_number(),$n > ew_order->date(),$new_order->credit_card_type(),$new_order->shipped(),$new_o > rder->ship_type(),$new_order->bill_name(),$new_order->bill_company_name(),$n > ew_order->bill_to_street(),$new_order->bill_to_street2(),$new_order->bill_to > _city(),$new_order->bill_to_state(),$new_order->bill_to_zip(),$new_order->bi > ll_to_country(),$new_order->ship_name(),$new_order->ship_to_street(),$new_or > der->ship_to_street2(),$new_order->ship_to_city(),$new_order->ship_to_state( > ),$new_order->ship_to_zip(),$new_order->ship_to_country(),$new_order->email_ > address(),$new_order->bill_phone_number(),$new_order->bill_phone_number2(),$ > new_order->ship_phone_number(),$new_order->ship_phone_number2(),$new_order-> > sales_tax(),$new_order->shipping_amount(),$new_order->coupon_type(),$new_ord > er->coupon_amount(),$new_order->total()); > > } > > $sth1->finish; > $dbh->disconnect; > > #================== > # Package MivaOrder > #------------------ > package MivaOrder; > use strict; > use Carp; > use English; > use vars qw($AUTOLOAD); > > my %fields = ( > wholesale_company =>undef, > order_number =>undef, > date =>undef, > > bill_name =>undef, > bill_email_address =>undef, > bill_phone_number =>undef, > bill_phone_number2 =>undef, > bill_business_name =>undef, > bill_to_street =>undef, > bill_to_city =>undef, > bill_to_state =>undef, > bill_to_zip =>undef, > bill_to_country =>undef, > > ship_name =>undef, > ship_email_address =>undef, > ship_phone_number =>undef, > ship_phone_number2 =>undef, > ship_business_name =>undef, > ship_to_street =>undef, > ship_to_city =>undef, > ship_to_state =>undef, > ship_to_zip =>undef, > ship_to_country =>undef, > > code =>undef, > name =>undef, > quantity =>undef, > price =>undef, > > shipping_method =>undef, > shipping_amount =>undef, > > sales_tax =>undef, > total =>undef, > > notes =>undef, > coupon_type =>undef, > coupon_amount =>undef, > > credit_card_type =>undef, > COD > =>undef > ); > > sub AUTOLOAD { > my ($self,$value) = @_; > $AUTOLOAD =~ /.*::(\w+)/; > $self->{$1} = $value if($value); > return $self->{$1}; > } > > sub new { > my ($that,$order) = @_; > croak "Order file is undefined" if(!$order); > my $class = ref($that) || $that; > my $self = {}; > $self->{$_} = $fields{$_} foreach(keys %fields); > bless $self, $class; > $self->init($order); > return $self; > } > > sub init { > open(TREVOR, "> c:\\maverick\\HITHERE.txt") or die "Error opening > HITHERE.txt $!\n"; > my ($self,$order) = @_; > my @lines = split(/\n/,$order); > my $in_address = undef; > my $in_order = undef; > > foreach my $line(@lines) { > > #our $n += 1 if $line =~/Order Number :/; > #print $n; > #next unless($line =~ /\w+/); > chomp ($line); > > if($line=~ /([EMAIL PROTECTED])\s+\"/i) { > $self->{wholesale_company} = $1; > #print $1 . "\n"; > } > > elsif($line =~ /Order\s+Number\s+:\s+(.*)$/i) { > $self->{order_number} = $1; > #print $1 . "\n"; > } > > elsif ($line =~ > /Placed\s+:\s+([0-9]{2})\/([0-9]{2})\/([0-9]{4})\s+([0-9]{2}:[0-9]{2}:[0-9]{ > 2})/i) { > my $mon=$1; > my $day=$2; > my $year = $3; > my $time=$4; > my $date = $year . "-" . $mon . "-" . $day . > " " . $time ; > $self->{date} = $date; > #print $date . "\n"; > } > > elsif (($line =~ /Ship To:/i) || defined($in_address)) { > $in_address = 1 and next if(!defined($in_address)); > my $regex = qr#(.{0,41})(.{0,41})#; > if (!defined($self->{bill_name})) > > ($self->{bill_name},$self->{ship_name}) > = ($line =~ /$regex/); > } elsif (!defined($self->{ship_email_address})) { > ($self->{ship_email_address},$self->{bill_email_address}) > = ($line =~ /$regex/); > #print $1 . > "\n"; > #print $2 . > "\n"; > } elsif (!defined($self->{ship_phone_number})) { > ($self->{ship_phone_number},$self->{bill_phone_number}) > = ($line =~ /$regex/); > #print $1 . > "\n"; > #print $2 . > "\n"; > } elsif > (!defined($self->{ship_phone_number2})) { > > ($self->{ship_phone_number2},$self->{bill_phone_number2})= ($line =~ > /$regex/); > # $self->{ship_phone_number2}= ($line =~ > /^\(?[0-9]{3}\)?-?|s?[0-9]{3}-?|s?[0-9]$/); > > #$self->{bill_phone_number2} = ($line =~ > /\(?[0-9]{3}\)?-?|s?[0-9]{3}-?|s?[0-9]$/); > #print $1 . > "\n"; > #print $2 > . "\n"; > } elsif > (!defined($self->{bill_business_name}) > ||!defined($self->{ship_business_name})) { > ($self->{ship_business_name},$self->{bill_business_name}) > = ($line =~ /$regex/); > > #print $1 . "\n"; > #print $2 . > "\n"; > } elsif (!defined($self->{bill_to_street}) > ||!defined($self->{ship_to_street})) > > ($self->{ship_to_street},$self->{bill_to_street}) > = ($line =~ /$regex/); > #print $1 . > "\n"; > #print $2 . > "\n"; > } elsif (!defined($self->{ship_to_city}) > ||!defined($self->{bill_to_city})){ > my ($ship_to,$bill_to) = ($line =~ > /$regex/); > ($self->{ship_to_zip},$self->{ship_to_state},$self->{ship_to_city} ) > # = split(/\s+/,$ship_to); > # > = ($ship_to =~ > /^(.*)\s+([A-Za-z]{2})\s+([0-9]{5}(-[0-9]{4})?)/);#^(\w+\s+?\w+?\s+?\w+?\s+\w+)\s(\w+)\s(\d{5}-?(\d{4})?)/); > #^(\w+\s?\w*.?\s?\w+)\s(\w+)\s(\d{5}(\W)?(\d{5})?)/); > > = map { scalar reverse } split ' ', ( reverse $ship_to), 3; > > print TREVOR $self->{order_number}. "\n"; > > print TREVOR $1 . "\ > n"; > > print TREVOR $2 . "\n"; > > print TREVOR $3 . "\n"; > > ($self->{bill_to_zip},$self->{bill_to_state},$self->{bill_to_city} ) > #= split(/\s+/,$bill_to); > > #= ($line =~ > /\s{2,}(\w+.?\s?\w*.?\s?\w+.?)\s?(\w{2})\s?([0-9]{5}-?([0-9]{4})?)/); > #= > ($bill_to =~ > /\s{2,}(.*)\s+([A-Za-z]{2})\s+([0-9]{5}(-[0-9]{4})?)$/);#\s{2,}(\w+(\s+\w+)? > \s+\w+)\s+(\w{2})\s?([0-9]{5}-?([0-9]{4})?)/); > > = map { scalar reverse } split ' ', ( reverse $bill_to), 3; > > #print $1 . "\n"; > > #print $2 . "\n"; > > #print $3 . "\n"; > > } elsif > (!defined($self->{ship_to_country})) { > ($self->{ship_to_country},$self->{bill_to_country}) = ($line > =~ /$regex/); > > #print $1 . "\n"; > > #print $2 . "\n"; > $in_address = undef; > } > } > > elsif (($line =~ /Code/) || defined($in_order)) { > $in_order = 1 and next if(!defined($in_order)); > #if(!defined($self->{code}) && !defined($self->{quantity}) && > !defined($self->{price})) { > if($line =~ > /^(\w+)\s+(.*?)\s+(\d+)\s+(\$\d+\.\d+)/) > > > ($self->{code},$self->{name},$self->{quantity},$self->{price}) = > ($line =~ /^(\w+)\s+(.*?)\s+(\d+)\s+(\$\d+\.\d+)/); > #print $1 > . "\n"; > #print $3 . > "\n"; > #print $4 . > "\n"; > > # Need to write items to > table at this point in case we have multiple > items ordered. > #if > (defined($self->{code})&&defined($self->{quantity}) > &&defined($self->{price})) { > my $sth > =$dbh->prepare("INSERT INTO > miva_retail_items_ordered(order_number,part_number,quantity,price) VALUES > (?,?,?,?)"); > > $sth->execute($self->{order_number},$self->{code},$self->{quantity},$self->{ > price}); > > # ($self->{code},$self->{quantity},$self->{price}) = undef; > #} > #print" Defined is: > $self->{coupon_type} \n"; > }elsif ($line =~ > /Coupon:\s+(.*):\s+\(\$(\d+\.\d+)\)/){ > #print "In > coupon\n"; > ($self->{coupon_type},$self->{coupon_amount}) = ($line =~ > /Coupon:\s+(.*):\s+\(\$(\d+\.\d+)\)/); > #print "Coupon is " . $1 . "\n"; > #print > "Coupon type is " . $2 . "\n"; > }elsif ($line =~ > /Shipping:(\s+.*:)?\s+\$(\d+\.\d+)/){ > ($self->{shipping_method},$self->{shipping_amount}) = ($line > =~ /Shipping:(\s+.*:)?\s+\$(\d+\.\d+)/); > #print "In > shipping\n"; > #print "Shipping > Method is: " . $1 . "\n"; > #print $2 . "\n"; > }elsif ($line =~ /Sales > Tax\:\s+\$(\d+\.\d+)/) { > ( > $self->{sales_tax}) = ($line =~ /Sales Tax\:\s+\$(\d+\.\d+)/); > # print "In sales > tax: $self->{sales_tax}\n"; > #print "Sales Tax > is: " . $1 . "\n"; > > #}elsif (!defined($self->{COD})){ > }elsif($line =~ /COD\s+Charge:\s+\$(\d+\.\d+)/){ > ($self->{COD}) = ($line =~ > /COD\s+Charge:\s+\$(\d+\.\d+)/); > #print "DOC > is: ". $1 . "\n"; > #$in_order = undef; > }elsif ($line =~ > /\s+Total:\s+\$(\d+\.\d+)/) { > > $self->{total}= $1; > print PARSED > "Shippint: $self->{total}\n"; > } # endif > > } > } > > # Trim all the spaces before and after the field. > $self->{$_} =~ s/^\s+|\s+$// foreach (keys %$self); > > } > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]