Hi

I've noticed something strange. I've created a site for some warehouse - they want to show their products and all related documentation. So there is a form with 15 files for upload pdfs. During the tests I realised, that when uploading two identical files - only the first one is written. The rest has size 0. Is it the feature of HTTP, CGI.pm or Apache::ASP - or my code?

//hashes definitions

my %ki_pdf1 = qw (
        f_field f_filepdf1  postfix _ki1  db_field pdf1  del_field f_delpdf1 );
...
my %ki_gfx1 = qw (
        f_field f_filegfx1  postfix _ki1  db_field gfx1  del_field f_delgfx1 );

my %pats = ( "kat_item", [ \%ki_pdf1, \%ki_pdf2, ..., \%ki_pdf15, \%ki_gfx1 ] );


sub upload_files {


my $fileup;
my $filehandle;
my $i;
my $in_buffer;
my $ext;
my $filecomm;
my $count;
for ( $i = 0 ; $i <= $#{$pats{$_[0]}} ; $i++ ) {
  if ( $form->{$pats{$_[0]}[$i]{f_field}} ) {
    $fileup = $Request->{FileUpload}{$pats{$_[0]}[$i]{f_field}};
    $filehandle = $fileup->{FileHandle};
    $_ = $fileup->{ContentType};
    SWITCH: {
                /image\/gif/    && do { $ext = ".gif"; $refresh = "yes"; last };
                /image\/jpeg/   && do { $ext = ".jpg"; $refresh = "yes"; last };
                /application\/pdf/      && do { $ext = ".pdf"; last };
    }
    my $localname = $_[1] . $pats{$_[0]}[$i]{postfix} . $ext;
    $localname =~ /\w/;
    $filehandle =~ /\w/;
    $count = 0;
    if ( sysopen( OUTPUT, "../files/" . $localname, 0x0601 ) ) {
      while ( read( $filehandle, $in_buffer, 2048 ) ) {
        print OUTPUT $in_buffer; $count++; }    
        $Session->{ErrorMesg} .= "$count buffers written to file $localname";
        if ( $count == 0 ) { $Session->{ErrorMesg} .= "<b> - FAILED!</b><br>";
          } else { $Session->{ErrorMesg} .= "<br>"; }
        close OUTPUT;
        $msth = $mdbh->prepare(
                "UPDATE $_[0] SET $pats{$_[0]}[$i]{db_field}=? WHERE id=?" );
        $msth->execute( ( $_[1] . $pats{$_[0]}[$i]{postfix} . $ext ), $_[1] );
      }
    }
    $filecomm = ( $pats{$_[0]}[$i]{f_field} . "desc" );
    if ( $form->{$filecomm} ) {      
      $msth = $mdbh->prepare(
        "UPDATE $_[0] SET " . $pats{$_[0]}[$i]{db_field} .
                "desc=? WHERE id=?" );
      $msth->execute( $form->{$filecomm}, $_[1] );
    }
  }
}

So, example call looks like this

sub save_kat {
        //read data from text fields in form and insert it into database
        //$prefix = item id in the database, smallint
        upload_files( "kat_item", $prefix );
}

Regards

--
CPU hotplug is not for removing the processor from single-CPU x86 box.
Kiddie: "The new kernel has CPU hotplug support, here, watch... oh CRAP."

Bruno Czekay - bruno(at)domar.pl

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to