Despite what you might think, it's fairly easy to write MySQL-based Web applications with Zope. In this case study, find out how to do just that by building a Zope-based online poll which uses MySQL to store poll questions and user responses, and DTML Methods to extract and present this information.
So that takes care of the mechanics of displaying a question, registering votes, and displaying totals. The next item to address is the ability to view an archive of previous polls. The DTML Method to accomplish this is called "viewPollResults", and it looks like this:
This method is extremely simple - it merely calls the "getPollResults" Z SQL Method without any arguments, and iterates through the returned result set to display a list of previous polls.
At this point, you should be thinking to yourself, "...that doesn't compute". This is because a couple of paragraphs ago, I said that the "getPollResults" required the question ID as mandatory argument. And now I'm contradicting myself by saying that I'm going to call the same method without passing it any arguments. Huh?
Well, you're right - calling "getPollResults" without any arguments is sure to make Zope barf. Unless, that is, I alter the Z SQL Method and add a little more intelligence to it, so that it can make a decision about which query to execute based on the presence or absence of the question ID.
<dtml-if qid>
SELECT question, response1, response2, response3, votes1, votes2,votes3, date from poll WHERE qid = <dtml-sqlvar qid type="int"><dtml-else> SELECT question, response1, response2, response3, votes1,votes2, votes3, date from poll </dtml-if>