http://qs321.pair.com?node_id=874934


in reply to Re^2: Duplicity Check Help!
in thread Duplicity Check Help!

Right but what I'm trying to say is your insert code will run anytime $flag_pic is NOT EQUAL to '1' and in your while loop you are incrementing $flag_pic by 1 anytime the image name and pic exist.
This is done four times in the while loop, which is fine, except in your IF (for inserting) you are saying if (flag_pic ne '1'). You need to check if ($flag_pic == 0) because $flag_pic is not equal to 1 if it equals 0 (which is what you are looking for) but it's also not equal to 1 if it equals 2,3 or 4 ... etc. Does that make sense?
Try updating the code and see if it helps please.

Replies are listed 'Best First'.
Re^4: Duplicity Check Help!
by wallisds (Beadle) on Dec 02, 2010 at 17:05 UTC

    Here is some test code I wrote based on what you posted. Maybe it will describe better what I was trying to explain in paragraph form... If you try running this I have two modes $test_do_insert = 1 or $test_do_insert = 0 so you can test multiple cases, etc. If this works for you, all you need to do is put your mysql query and insert lines into the code where applicable. Does this solve your problem?

    #!/usr/bin/perl use strict; use warnings; my @pics; my $test_do_insert = 1; #change value to 0 to change variables to test + a case where it should not insert my $image_name_1 = ""; $image_name_1 = "test_image1.jpg" if (!$test_do_insert); $pics[0] = 'test1.jpg'; my $image_name_2 = ""; #$image_name_2 = "test_image2.jpg" if (!$test_do_insert); $pics[1] = "test2.jpg"; my $image_name_3 = ""; #$image_name_3 = "test_image3.jpg" if (!$test_do_insert); $pics[2] = "test3.jpg"; my $image_name_4 = ""; #$image_name_4 = "test_image4.jpg" if (!$test_do_insert); $pics[3] = "test4.jpg"; if (@pics) { my $flag_pic = 0; # while (my $row = $sth->fetchrow_hashref()) { $flag_pic += &check_empty($image_name_1, $pics[0]); print $flag_pic."\n"; $flag_pic += &check_empty($image_name_2, $pics[1]); print $flag_pic."\n"; $flag_pic += &check_empty($image_name_3, $pics[2]); print $flag_pic."\n"; $flag_pic += &check_empty($image_name_4, $pics[3]); print $flag_pic."\n"; # } print "<br>751**$flag_pic**<br>"; # End check if ( $flag_pic == 0 ) { print "doing insert"; } else { print "not doing insert"; } } sub check_empty() { my $img = shift; my $pic = shift; if ( $img ne "" && $pic ne "" ) { return 1; } else { return 0; } }
Re^4: Duplicity Check Help!
by Anonymous Monk on Dec 02, 2010 at 16:47 UTC
    It makes sense what you said, but the issue is on these lines
    if(($row->{image_name_1} ne "") eq ($pics[0] ne "")){$flag_pic ++=1;} if(($row->{image_name_2} ne "") eq ($pics[1] ne "")){$flag_pic ++=1;} if(($row->{image_name_3} ne "") eq ($pics[2] ne "")){$flag_pic ++=1;} if(($row->{image_name_4} ne "") eq ($pics[3] ne "")){$flag_pic ++=1;}
    It is not considering the equality, even if the images are not a match it is still incrementing $flag_pic+=1.

      Oh. I'm sorry. I see what you mean. If flag_pic is incremented every time, do me a favor and run this:

      if(($row->{image_name_1} ne "") eq ($pics[0] ne "")){ print "IMG NAME is '$image_name_1'\n"; print "PICS-0 is '$pics[0]'\n"; $flag_pic+=1; }

      This will help in troubleshooting because I am not sure what values to expect for these two variables. Right now you are checking to see:
      1. if the image name is not equal to '' (empty string)
      AND
      2. if the pic is not equal to '' (empty string)
      Am I correct in my understanding that $pic[x] #(where x is 0-3) will not usually be an empty string because it's the file the user is trying to upload?
      Maybe you want to change your if to evaluate against the image name compared to the picture name?