473,378 Members | 1,354 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,378 software developers and data experts.

multiple parameters in if statement

Kun
I am trying to make an if-statement that will not do anything and print
'nothing entered' if there is nothing entered in a form. I have the
following code that does that, however, now even if I enter something
into the form, the code still outputs 'nothing entered'. This violates
the if statement and I am wondering what I did wrong.

if form.has_key("delete_id") and form["delete_id"].value != "" and
form.has_key("delete_date") and form["delete_date"].value != "" and
form.has_key("delete_purchasetype") and
form["delete_purchasetype"].value != "" and form.has_key("delete_price")
and form["delete_price"].value != "" and form.has_key("delete_comment")
and form["delete_comment"].value != "":
delete_id=form['delete_id'].value
delete_date=form['delete_date'].value
delete_purchasetype=form['delete_purchasetype'].value
delete_price=form['delete_price'].value
delete_comment=form['delete_comment'].value
else:
print "ERROR: Nothing entered!"
raise Exception

Apr 16 '06 #1
6 2845
On Sat, 15 Apr 2006 20:28:47 -0400, Kun wrote:
I am trying to make an if-statement that will not do anything and print
'nothing entered' if there is nothing entered in a form. I have the
following code that does that, however, now even if I enter something
into the form, the code still outputs 'nothing entered'. This violates
the if statement and I am wondering what I did wrong.

if form.has_key("delete_id") and form["delete_id"].value != "" and
form.has_key("delete_date") and form["delete_date"].value != "" and
form.has_key("delete_purchasetype") and
form["delete_purchasetype"].value != "" and form.has_key("delete_price")
and form["delete_price"].value != "" and form.has_key("delete_comment")
and form["delete_comment"].value != "":
delete_id=form['delete_id'].value
delete_date=form['delete_date'].value
delete_purchasetype=form['delete_purchasetype'].value
delete_price=form['delete_price'].value
delete_comment=form['delete_comment'].value
else:
print "ERROR: Nothing entered!"
raise Exception

That's rather, um, unfortunate looking code.

Instead of making lots of tests like this:

if form.has_key(key) and form[key].value != "" ...

you might find it useful to create a helper function:

def get(form, key):
if form.has_key(key):
return form[key].value
else:
return ""

Now you don't need to test for existence and non-emptiness, because
missing values will be empty. You just use it like this:

if get(form, key) != "" and ...
Using the get helper function, your test becomes much simpler:

if get(form, "delete_id") != "" and get(form, "delete_date") != "" \
and get(form, "delete_purchasetype") != "" and \
get(form, "delete_price") != "" and get(form, "delete_comment") != "":
do_something()
else:
raise ValueError("nothing entered")

But that's still too complicated. In Python, every object can be
tested by if...else directly. Strings are all True, except for the empty
string, which is False.

As an experiment, try this:

if "something":
print "Something is not nothing."
else:
print "Empty string."

if "":
print "Something is not nothing"
else:
print "Empty string."
So your if...else test becomes simpler:

if get(form, "delete_id") and get(form, "delete_date") and \
get(form, "delete_purchasetype") and get(form, "delete_price") and \
get(form, "delete_comment"):
do_something()
else:
raise ValueError("nothing entered")
Now your test checks that every field is non-empty, and if so, calls
do_something(), otherwise it raises an error.

But in fact, that gets the logic backwards. You want to raise an error
only if every field is empty. So your test becomes:

if get(form, "delete_id") or get(form, "delete_date") or \
get(form, "delete_purchasetype") or get(form, "delete_price") or \
get(form, "delete_comment"):
do_something()
else:
raise ValueError("nothing entered")


--
Steven.

Apr 16 '06 #2
On 16/04/2006 10:28 AM, Kun wrote:
I am trying to make an if-statement that will not do anything and print
'nothing entered' if there is nothing entered in a form. I have the
following code that does that, however, now even if I enter something
into the form, the code still outputs 'nothing entered'. This violates
the if statement and I am wondering what I did wrong.

if form.has_key("delete_id") and form["delete_id"].value != "" and


Unless your code needs to run on Python 2.1, consider using the <key> in
<dict> construct instead of <dict>.has_key(<key>) -- it's not only less
wear and tear on the the eyeballs and fingers, it's faster.

Python 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] on win32
foo = {}; foo['bar'] = 'zot'
foo.has_key('bar') 1 'bar' in foo Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: 'in' or 'not in' needs sequence right argument
Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32 foo = {}; foo['bar'] = 'zot'
foo.has_key('bar') 1 'bar' in foo 1

Apr 16 '06 #3
Try this:

if form.get("delete_id","") != "" and form.get("delete_data","") != ""
and...

the "get" method lets you have an optional second argument that gets
returned if the key is not in the dictionary.

Also, am I reading your code right? If I enter some fields but not all,
you print a message that says "Nothing entered." Nothing?

The other thing I'd recommend is stick that long list of fields in a
list, and then do operations on that list:

fields = ['delete_id', 'delete_date', 'delete_purchasetype',
'delete_price', 'delete_comment']

then to see if all those fields are empty:

everything = ""
for field in fields:
everything += form.get(field,"")
if everything == "":
print "Absolutely nothing entered!"

Kun wrote:
I am trying to make an if-statement that will not do anything and print
'nothing entered' if there is nothing entered in a form. I have the
following code that does that, however, now even if I enter something
into the form, the code still outputs 'nothing entered'. This violates
the if statement and I am wondering what I did wrong.

if form.has_key("delete_id") and form["delete_id"].value != "" and
form.has_key("delete_date") and form["delete_date"].value != "" and
form.has_key("delete_purchasetype") and
form["delete_purchasetype"].value != "" and form.has_key("delete_price")
and form["delete_price"].value != "" and form.has_key("delete_comment")
and form["delete_comment"].value != "":
delete_id=form['delete_id'].value
delete_date=form['delete_date'].value
delete_purchasetype=form['delete_purchasetype'].value
delete_price=form['delete_price'].value
delete_comment=form['delete_comment'].value
else:
print "ERROR: Nothing entered!"
raise Exception

Apr 16 '06 #4
On 16/04/2006 1:43 PM, John Zenger wrote:

The other thing I'd recommend is stick that long list of fields in a
list, and then do operations on that list:

fields = ['delete_id', 'delete_date', 'delete_purchasetype',
'delete_price', 'delete_comment']

then to see if all those fields are empty:

everything = ""
for field in fields:
everything += form.get(field,"")
Or everything = "".join(form.get(field, "") for field in fields)

Somewhat labour-intensive. It appears from the OP's description that no
other entries can exist in the dictionary. If this is so, then:

everything = "".join(form.values())

but what the user sees on screen isn't necessarily what you get, so:

everything = "".join(form.values()).strip()
if everything == "":
print "Absolutely nothing entered!"

Apr 16 '06 #5
Yup, join is better. The problem with using form.values() is that it
will break if the HTML changes and adds some sort of new field that this
function does not care about, or if an attacker introduces bogus fields
into his query.

John Machin wrote:
On 16/04/2006 1:43 PM, John Zenger wrote:

The other thing I'd recommend is stick that long list of fields in a
list, and then do operations on that list:

fields = ['delete_id', 'delete_date', 'delete_purchasetype',
'delete_price', 'delete_comment']

then to see if all those fields are empty:

everything = ""
for field in fields:
everything += form.get(field,"")

Or everything = "".join(form.get(field, "") for field in fields)

Somewhat labour-intensive. It appears from the OP's description that no
other entries can exist in the dictionary. If this is so, then:

everything = "".join(form.values())

but what the user sees on screen isn't necessarily what you get, so:

everything = "".join(form.values()).strip()
if everything == "":
print "Absolutely nothing entered!"

Apr 16 '06 #6
On 17/04/2006 5:13 AM, John Zenger top-posted:
Yup, join is better. The problem with using form.values() is that it
will break if the HTML changes and adds some sort of new field that this
function does not care about, or if an attacker introduces bogus fields
into his query.
If one is worried about extra keys introduced by error or malice, then
one should check for that FIRST, and take appropriate action. Code which
is concerned with the values attached to the known/valid keys can then
avoid complications caused by worrying about extra keys.

John Machin wrote:
On 16/04/2006 1:43 PM, John Zenger wrote:

The other thing I'd recommend is stick that long list of fields in a
list, and then do operations on that list:

fields = ['delete_id', 'delete_date', 'delete_purchasetype',
'delete_price', 'delete_comment']

then to see if all those fields are empty:

everything = ""
for field in fields:
everything += form.get(field,"")

Or everything = "".join(form.get(field, "") for field in fields)

Somewhat labour-intensive. It appears from the OP's description that
no other entries can exist in the dictionary. If this is so, then:

everything = "".join(form.values())

but what the user sees on screen isn't necessarily what you get, so:

everything = "".join(form.values()).strip()
if everything == "":
print "Absolutely nothing entered!"

Apr 16 '06 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: merdaad | last post by:
I am trying to read multiple rows from an SP into a datalist. I can easily read and display multiple rows if I use a select statement but when I call an SP to send me a few rows, I only get back...
11
by: Mike | last post by:
Looking to find any information on how to properly configure multiple instances of DB2. This is on Win2k db2 ver 7.2. I am basically looking for information on how the multiple instance settings...
2
by: Mark Mullins | last post by:
have code below: Function ClassColl(strClass As Variant, strColl As Variant) As String ' Comments : ' Parameters : strClass ' strColl ' Returns : String Description '...
32
by: tshad | last post by:
Can you do a search for more that one string in another string? Something like: someString.IndexOf("something1","something2","something3",0) or would you have to do something like: if...
6
by: James Radke | last post by:
Hello, I have a multithreaded windows NT service application (vb.net 2003) that I am working on (my first one), which reads a message queue and creates multiple threads to perform the processing...
3
by: Jesper Jensen | last post by:
I have the following problem: I have created the following SQL for my app. With the below shown code (Example 1) I am able to retrieve the records I need into dataset dsFind. Now however I want...
12
by: Dennis D. | last post by:
Hello: I want a function to return three variables to the calling procedure: Private Function CalcTimes(ByVal iAddDays as Integer, ByVal iAddHours as Integer, ByVal iAddMins as Integer) As...
4
by: arak123 | last post by:
consider the following oversimplified and fictional code public void CreateInvoices(Invoice invoices) { IDbCommand command=Util.CreateDbCommand(); foreach(Invoice invoice in invoices) //lets...
9
by: dan | last post by:
within a loop i am building a sql insert statement to run against my (programatically created) mdb. it works but it seems unreasonably SLOW! Sorry, dont have the code here but the jist is very...
7
by: Ceebaby via AccessMonster.com | last post by:
Hi All Here's hoping someone can help me with this. I have a report based on a query where the criteria for 4 of the fields is set from an unbound form. I want the user to be able to select any...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.