NYCPHP Meetup

[nycphp-talk] Query result state strategy

Cliff Hirsch cliff at pinestream.com
Wed Feb 15 14:19:14 EST 2006


Thanks for the reply Chris -- see, I've become a believer...

Ok, so here's one case:

I display a bunch of rows. Each row has several fields, including a few
status fields (some displayed, some not).

Various actions (buttons) are allowed based on combinations of the
status fields. (As a side-note, this relates to the state table thread I
started last week). I disable buttons that are not allowed, so only
valid actions can be submitted, but it would be trivial to submit a
button that has been disabled.

When I receive a button submission for a particular row, I query the row
from the db, and check to see if this action is allowed based upon the
status fields.

If it were as simple as checking for a userid, I could do a single step
update on the row using something like WHERE row = submittedrowid and
userid = guyloggedin. In fact, I will probably double check the logic
flow to see if the validation and DB update can be compressed into a
single query. Like "UPDATE SET price = price + submission WHERE fields
meet conditions" Failed update == failed validation, or something like
that. But the button actions are based on a complex set of status codes
and launch a flurry of processes. So this scenario might not work.

Stream of consciousness going here... As I think about this, it seems
like I can still only compress a DB read and write to a single update --
with a lot of work.

What about some sort of encrypted key stored in a hidden field on the
client side? I could encrypt all the possible options and then cross
check the submission against the encrypted value. I guess that's just
shifting state info to the client -- is that safe if its encrypted?

Thoughts?

Hi Cliff,

Cliff Hirsch wrote:
> Lately, it seems like I need to execute queries twice -- the first 
> time to gather data and set actions for the presentation layer. That's

> fine.
>  
> What disturbs me is that I need to do this all over again when 
> receiving actionable input, going along with the theory that all input

> from the client is evil unless proved otherwise. Thank you Chris.

You're welcome? :-)

Can you give us a more concrete example? It seems likely that you can 
avoid having to query the database multiple times just to be able to 
maintain a healthy level of suspicion.

Chris




More information about the talk mailing list