[Zope] Newbie: How to UPDATE records in MySQL?

Alexander Staubo alex@mop.no
Wed, 7 Jul 1999 05:18:14 +0200


Here's a small example.

The DTML Method to view your table should look something like this::

...
<!--#in AllRecordsSql-->
  <!--#if sequence-start-->
  <table>
  <tr>
    <th>Name</th>
    <th>Age</th>
  </tr>
  <!--#/if-->
  <tr>
    <td><a href="ViewRecord?id:int=<!--#var recid-->"><!--#var
name--></a></td>
    <td><!--#var age--></td>
  </tr>
  <!--#if sequence-end-->
  </table>
  <!--#/if-->
<!--#else-->
  No records.
<!--#/in-->
...

where AllRecordsSql is an SQL Method that returns the whole table, with
columns "recid", "name", and "age".

Your ViewRecord DTML Method should look like so::

<!--#in "FindRecordSql(match_id = REQUEST.id)" size="1"-->
  <form action="<!--#var URL1-->" method="post">
  <input type="hidden" name="id:int" value="<!--#var id-->">
  <table>
    <tr>
      <th align="right">Name</th>
      <td><input type="text" name="name" value="<!--#var name-->"></td>
    </tr>
    <tr>
      <th align="right">Age</th>
      <td><input type="text" name="age:int" value="<!--#var
age-->"></td>
    </tr>
  </table>
  <input type="submit" name="SaveRecord:method" value="OK">
  <input type="submit" name="index_html:method" value="Cancel">
  </form>
<!--#else-->
  Record not found.
<!--#/in-->

where FindRecordSql is an SQL Method that does something like

  select recid, name, age from people
  where recid = <!--#sqlvar match_id type=int-->

This form uses a Zope trick that allows you to have multiple submit
buttons, each triggering a different method on the parent folder. Also
note how I use things like ":int" to indicate the type of form
variables; otherwise Zope will just stringize everything.

Your SaveRecord DTML Method could look like this::

<!--#call "UpdateRecordSql(match_id = REQUEST.id, name = REQUEST.name,
  age = REQUEST.age)"-->

Or it could look like this::

<!--#call "UpdateRecordSql(match_id = REQUEST.id, REQUEST)"-->

Or like something else; I do prefer myself to pass SQL arguments
explicitly, though, rather than just pushing the complete REQUEST
namespace. You can also use _.namespace() to pass your arguments.
Finally, UpdateRecordSql is an SQL Method that says something like:

  update people
  set name = <!--#var name type=string-->,
  age = <!--#var age type=int-->
  where recid = <!--#sqlvar match_id type=int-->

With me so far?

--
Alexander Staubo             http://www.mop.no/~alex/
"What the hell, he thought, you're only young once, and threw
himself out of the window. That would at least keep the element of
surprise on his side."
--Douglas Adams, _The Hitchhiker's Guide to the Galaxy_

>-----Original Message-----
>From: zope-admin@zope.org [mailto:zope-admin@zope.org]On Behalf Of
>piotrk@ibb.waw.pl
>Sent: 7. juli 1999 04:08
>To: zope@zope.org
>Subject: [Zope] Newbie: How to UPDATE records in MySQL?
>
>
>I have MySQL database connected to ZOPE 1.10.3. I can search
>and INSERT new records, but I don't know how to edit and
>UPDATE single records.
>
>
>I think that a single record in a database can be updated in
>the following way:
>
>1. Search the database and display the results in tabular
>format (it is already working).
>
>2. Select a single record to edit - I do not know how to make
>a link from tabular search result to a single record (i.e.
>hyperlink from a record first field to page with forms
>containing data preloaded from fields to be edited.
>
>4. POST the changed form and UPDATE the database record.
>
>
>Could you please send me some sample code? Are there any
>on-line documentation I can read? I have found plenty of
>information about searching and inserting data into internet
>accessible databases but no information about updating
>database records.
>
>TIA
>
>
>
>_______________________________________________
>Zope maillist  -  Zope@zope.org
>http://www.zope.org/mailman/listinfo/zope
>
>(For developer-specific issues, use the companion list,
>zope-dev@zope.org - http://www.zope.org/mailman/listinfo/zope-dev )
>