in reply to Re^10: CGI Action call
in thread CGI Action call

In addition to Corion's comments the first line of this sub is incorrect, the scalar $ref will be 1, the count of elements in @_

sub hash_display_listing{ # my $ref = @_; my ($ref) = @_; # or # my $ref = shift ;
$sth->execute($searchterm) or die "Unable to execute query: " . $sth->errstr; warn("Finished sub search record"); $result = generateResponseHash($sth);

You are calling $sth->execute() twice, first time with a parameter and again in generateResponseHash($sth) without parameter

Breaking long code into subroutines is usually good practice but be careful not to overdo it :)

elsif ($action eq "updatetable_167"){ warn("Entered updatetable_167"); my $kind = $query->param('kind'); die "ERROR \$kind='$kind'" if ($kind < 0 || $kind > 2 ); my $searchterm = $query->param('searchterm'); warn("\$searchterm = '$searchterm'"); my $searchfield = ['userid','lastname','business']->[$kind]; warn("\$searchfield = '$searchfield'"); my $stmt = "SELECT * FROM users WHERE $searchfield = ?"; warn("\$stmt = '$stmt'"); my $sth = $dbh->prepare($stmt); $sth->execute($searchterm); warn("Finished sub search record"); my $count = $sth->rows; warn("\$count = '$count'"); if ($count == 0) { warn("Failed Search: '$searchfield' equal to '$searchterm' "); } else { my $ref = $sth->fetchrow_hashref(); my $hashref = hash_display_listing($ref); completeResultHash( $hashref ); } $sth->finish (); } sub hash_display_listing{ my ($ref) = @_; my %hash = %$ref; print Dumper \%hash; return \%hash; } sub completeResultHash{ my $hashref = shift; warn("completeResultHash line 631"); my $json_str = encode_json($hashref); print $json_str; warn("after jason_str print"); }
poj

Replies are listed 'Best First'.
Re^12: CGI Action call
by tultalk (Monk) on Mar 14, 2018 at 20:34 UTC

    JSON I cut off all the sub calls after the action updatetable_167 call.

    my $stmt = "SELECT * FROM users WHERE $searchfield = ?"; warn("statement = '$stmt'"); my $sth = $dbh->prepare ($stmt) or die "Error Preparing:\n" . $stm +t . "\nDBI returned: \n", $dbh->errstr; $sth->execute($searchterm) or die "Unable to execute query: " . $s +th->errstr; my $refresult = $sth->fetchrow_hashref(); my $count = $sth->rows; warn("count = '$count'"); if ($count == 0) { warn("Failed Search: '$searchfield' equal to '$searchterm' "); exit(1); } else { warn("count = '$count'"); my $json = JSON->new; $json->canonical(1); $json = encode_json($refresult); print $json; warn("Finished print '$json_str'"); exit(0); }

    output:

    {"DD":"2019-01-30","DP":"2018-12-31","MD":"120.00","MJ":"2018-01-30"," +address1":"1471 Meeks Rd","address2":null,"business":"JZ Electroplati +ng","city":"Warran","comments":"This is a test entry","email":"jze@ya +hoo.com","forename":"John","id":57,"lastname":"Zinzer","password":"12 +34","phone_cell":"517-240-1004","phone_home":"517-233-4378","pin":"Jb +wmZ","position":"General Member","state":"MI","user_id":19,"username" +:"bwm19","zip":"45789-2334"}

    Don;t understand why not in order after $json->canonical(1);

      Why do you think the keys are not in sorted order? To me, they look sorted:

      { "DD":"2019-01-30", "DP":"2018-12-31", "MD":"120.00", "MJ":"2018-01-30", "address1":"1471 Meeks Rd", "address2":null, "business":"JZ Electroplating", "city":"Warran", "comments":"This is a test entry", "email":"jze@yahoo.com", "forename":"John", "id":57, "lastname":"Zinzer", "password":"1234", "phone_cell":"517-240-1004", "phone_home":"517-233-4378", "pin":"JbwmZ", "position":"General Member", "state":"MI", "user_id":19, "username":"bwm19", "zip":"45789-2334" }

      At least under the assumption that "sorted" means "sorted as sort would sort", I don't see any contradition.

        By "sorted" I mean the order the columns appear in the table

        I read your full response and understand. Is there a preference as to how the data is returned as the purpose is to load the response data back into the fields on the calling form.

        I am just trying to pull one record at a time and not a chunk of the entire table

      I think you are confusing the OO and Functional interfaces. Use either OO

      my $json = JSON->new; $json->canonical(1); my $json_str = $json->encode($hashref); print $json_str;

      or Functional

      my $json_str = to_json($hashref, {canonical => 1});
      poj