<HTML> <Head><Title>Client Editor</Title></Head> <Body> [- use Apache::DBI; -] [- $dbh = DBI->connect("DBI:mysql:test:localhost"); -] [- @colnames = qw(id name address1 address2 city state country zip contact_name contact_phone1 contact_phone2 contact_fax initial_contact_date dollars_per_hour); $colnames = join ', ', @colnames; -] [$ if scalar keys %fdat > 0 $] <!-- ===================================== --> <!-- Should we add a new client? --> [$ if $fdat{"modify-0"} ne "" $] <!-- Make sure we avoid setting the ID --> [- @insert_colnames = grep !/^id$/, @colnames; -] [- $insert_colnames = join ', ', @insert_colnames; -] <!-- Create the query --> [- $values = join '", "', map {$fdat{$_ . "-0"}} @insert_colnames -] [+ $sql = "INSERT INTO Clients ($insert_colnames) VALUES (\"$values\")"; +] <!-- Send the SQL --> [- $sth = $dbh->prepare($sql); -] [- $sth->execute; -] [- $id = $sth->{"insertid"} -] <!-- If error, print the message --> <P><B>[+ $sth->errstr +]</B></P> [$ endif $] <!-- ===================================== --> <!-- Should we update existing clients? --> [$ foreach $clientid (grep {($_ =~ /^modify-\d+$/) && ($fdat{$_} eq "modify")} (sort keys %fdat)) $] <!-- Create the query --> [+ $clientid =~ m/(\d+)$/; $pairs = join ', ', map {"$_ = '" . $fdat{$_ . "-$1"} . "'"} grep (!/^id$/, @colnames); $sql = "UPDATE Clients SET $pairs WHERE id = $1"; +] <!-- Do the query --> [- $sth = $dbh->prepare($sql); -] [- $sth->execute; -] <!-- If error, print a message --> <P>[+ $sth->errstr +]</P> [$ endforeach $] <!-- ===================================== --> <!-- Should we delete existing clients? --> [$ foreach $clientid (grep {($_ =~ /^modify-\d+$/) && ($fdat{$_} eq "delete")} (sort keys %fdat)) $] <!-- Grab the ID, and create the SQL --> [+ $clientid =~ m/^modify-(\d+)$/; $sql = "DELETE FROM Clients WHERE id = $1" +]; <!-- Do the query --> [- $sth = $dbh->prepare($sql); -] [- $sth->execute; -] <!-- If error, print a message --> <P>[+ $sth->errstr +]</P> [$ endforeach $] [$ endif $] <!-- ============================================== --> <!-- Here is the manual HTML part of the file, for entering new clients --> <H1>Add/Modify Client Information</H1> <Form method="POST" action="/embperl/client-editor.html"> <P><input type="submit" value="Add/update values"> <input type="reset" value="Revert values"></P> <Table border="2"> <TD colspan="2" bgcolor="#abcdef"> <P><input type="checkbox" name="modify-0"> Add this new client <P> </TD> <!-- Create table for entering new client --> [$ foreach $column @colnames $] [$ if $column ne "id" $] <TR> <TD> [+ $column +] </TD> <TD> <input type="text" name="[+ $column +]-0" size="40" maxlength="40" > </TD> </TR> [$ endif $] [$ endforeach $] </Table> <!-- Set up the SQL query for existing information --> [- $sql = "SELECT $colnames FROM Clients"; -] <!-- Send the query --> [- $sth = $dbh->prepare ($sql) -] <!-- If error, print the message --> <P><B>[+ $sth->errstr +]</B></P> <!-- Execute the query --> [- $sth->execute -] <!-- If error, print the message --> <P><B>[+ $sth->errstr +]</B></P> <!-- Iterate through each row (record) --> [$ while ($record = $sth->fetchrow_arrayref) $] <!-- Get the unique ID for this record --> [- $recordid = $record->[0]; -] <P><input type="submit" value="Add/update values"> <input type="reset" value="Revert values"></P> <Table border="1"> <TR bgcolor="#abcdef"> <TD colspan="2"> <P><input type="radio" value="nothing" name="modify-[+$recordid +]" checked> Do nothing <input type="radio" value="modify" name="modify-[+$recordid +]"> Modify this client <input type="radio" value="delete" name="modify-[+$recordid +]"> Delete this client </TD> </TR> <!-- Iterate through each field --> [- $fieldcounter = 0; -] [$ foreach $field @$record $] <!-- Don't print ID numbers --> [$ if $colnames[$fieldcounter] ne "id" $] <!-- Print value in editable field --> <TR> <TD>[+ $colnames[$fieldcounter] +]</TD> <TD> <input type="text" name="[+ $colnames[$fieldcounter] . '-' . $recordid +]" size="50" maxlength="100" value="[+ $field +]"> </TD> </TR> [$ endif $] <!-- Increment our counter --> [- $fieldcounter++; -] [$ endforeach $] <!-- End table and add whitespace --> </Table><P></P> [$ endwhile $] <P><input type="submit" value="Add/update values"> <input type="reset" value="Revert values"></P> </Form> </Body> </HTML>