How can I code to get more than One value from checkbox? (Revised Version)

Shufen s4046441 at student.uq.edu.au
Sat Oct 2 21:33:06 EDT 2004


Hi,

Sorry I know this is kinda of long, but please give me a helping hand
if you understand what I'm looking for.

The following attached is my revised version of my code. I added some
stuffs into it and now it can really run - error (I supposed my method
is wrong again, but I hope my idea is there).

This is what is I have:
I have a bunch of stuffs in a database table named
"shot_descriptions".

And this is what I wanna my page to do:
The columns of this table consists of project name, date, shot number,
notes and etc. And these fields are the stuffs that I wanna to present
them in checkboxes form so that the user can select the number of
information they wanna to see in the results (output). And a textbox
for user to key in a specific shot number in order to perform a
search. So, if there is no input in the shot no textbox, an error msg
will show (this is one of the part that is not working now, please
help). I wanna to display the output in a table form and I'm currently
using dictionary to help me with this task. But I'm wondering is there
a better way to show it? I mean other than dictionary, how can I code
it so that the results will display nicely in a html type of table
with columns and rows instead of key: blah blah and value: blah blah.
If someone can help me on this part, it will be very nice, cos I'm
concern about the presentation of the output too.

Revised Version:
What I did is include a section where it will display an error msg
when no input is given. Besides, my code (earlier version) displayed
results in a repeated loop form when there is more than a tick in the
checkboxes.

It will show somthing like this:
You entered Shot Number: xxxx

key: xxxx   value: xxxx

You entered Shot Number: xxxx

key: xxxx   value: xxxx

And it just went on....depending the number of ticks.

Thus, in this revised version, I separated into 2 conditions.
Condition 1 taking care of more than one input and Condition 2 taking
care of only ONE input. But somehow, there is error in this code and I
suspected I did something very wrong again so please help me. I wonder
if there is any way to display the results in a nice table form for
Input that is more than ONE?

Any help is very very much appreciated. 

I hope that will be someone responding to this as I took a long time
to figure out this revised code (I'm not good in programming - new)
and of cos to write this msg.

Thanks for any help.

Shufen


###############################################################################
#!/usr/bin/env python
#Author: Chong Soo Fern
#Created on: 30/09/04
#Modified on: 02/10/04
#Help from Lee Harr, Danny Yoo and Steve - Python Tutor

import cgi, os, sys, string
import cgitb; cgitb.enable()
import pg

def form():
    print """<form method="post" action="">
           <table border="0" width="750" cellspacing="2"
cellpadding="2">
           <tr><td width="150" align="left">
           <input type=checkbox name="qtype" value="*" checked
/>All</td>
           <td width="150" align="left">
           <input type=checkbox name="qtype" value="project"
/>Project</td>
           <td width="150" align="left">
           <input type=checkbox name="qtype" value="notes"
/>Notes</td>
           <td width="150" align="left">
           <input type=checkbox name="qtype" value="date_string"
/>Date</td>
           </table>
       
         <p>Search by shot number:<br>
         <input type=text name="shot_no" value="" tabindex="1" />
         <input type="submit" value="SEARCH" tabindex="2" /> 
         <input type="reset" value="RESET" tabindex="3" /><br />
         </form>"""
             
          
if __name__ == "__main__":
    
    print "Content-Type: text/html\n\n"
    print "<head><title>Quick Search using Run
No</title></head><body>"
    
    sys.stderr = sys.stdout
    data = cgi.FieldStorage()

    #Get the shot_no first, followed by each value of the checkboxes.
    shot_no = data.getfirst("shot_no", "")
    qtype = data.getvalue("qtype")


    #I wanna to show the error msg if no input is given.
    if not (data.has_key("qtype") and data.has_key("shot_no")):
        print "You have not select an option!\n"
        print "Please tick at least one checkbox provided!\n"
        print "You have no enter a shot number\n!"
        print "Please type a in shot number in order to perform a
search\n!"

        #I don't know why this function kept showing error... please
advice
        #Error: SyntaxError: 'return' outside function 
        return form() 
    
    if isinstance(qtype, list):

        # Conditon 1: The user selected more than one qtype.
        # Display the results in one way, different from condition 2.

        print "You entered Shot Number:", shot_no
        
        #Will take care of the security problems later...
        #Defined a username and connect to the database...
        username = os.environ.get('USER')
        if username == "None":
            username = "apache"

        db = pg.connect("moncdata", user=username, passwd=None)
        query = """SELECT %s FROM shot_descriptions WHERE
shot_number=%s""" % (qtype, shot_no)
        qresult = db.query(query)
        listOfResults = qresult.dictresult()
        print listOfResults
        
        db.close()

    else:

        # Condition 2: The user selected only ONE qtype.
        # Display the results in another way.
        # I don't want each qtype to showed in sort of a repeated
results loop way.
        
        print "You entered Shot Number:", shot_no
        
        #Will take care of the security problems later...
        #Defined a username and connect to the database...
        username = os.environ.get('USER')
        if username == "None":
            username = "apache"

        db = pg.connect("moncdata", user=username, passwd=None)
        query = """SELECT %s FROM shot_descriptions WHERE
shot_number=%s""" % (qtype, shot_no)
        qresult = db.query(query)
        listOfResults = qresult.dictresult()
        print """<p>Example of pulling the list of dictionary results
apart.</p>"""
        for record in listOfResults:
            print "<p><table>"
            for k in record.keys():
                print '<tr>'
                print '<td>key:</td> <td>', k, '</td>'
                print '<br />'
                print '<td>value:</td><td>', record[k], '</td>'
                print '</tr>'
                print '</table></p>'

        db.close()
                     
print "</body></html>"

###############################################################################



More information about the Python-list mailing list