Notes 02 - First Page

The following example provides you with the first working Web page in ]po[.

Please copy this text into the file ~/www/notes02.tcl and then point your browser to the URL "http://localhost/notes02". Enter some text into the input field and enjoy how the list of notes is getting longer.

 

# -----------------------------------------------------
# notes02.tcl
#
# (c) 2009 ]project-open[
# Licensed under the GPL 2.0 or higher
# -----------------------------------------------------

# Please check "TCL for Web Nerds" if you have any questions
# concerning the TCL syntax: http://philip.greenspun.com/tcl/

# -----------------------------------------------------
# The "Page Contract":
#
# ad_page_contract comment parameters
#       The "ad_page_contract" acts similar to a procedure
#       definition in procedural languages such PHP or Java.
#       The command extracts extracts HTTP parameters from
#       the URL ("GET method") or the HTTP request form
#       ("POST method") and maps them into local variables.
#       In this example, the form below includes a field
#       "new_note".
#       Thanks to the ad_page_contract, the value of "new_note"
#       becomes available as a local variable that we can
#       use in the rest of this page.
#
ad_page_contract {
    Notes02 Tutorial
    @param new_note - Value for a new note.
    @author frank.bergmann@project-open.com
} {
    new_note:optional
}

# -----------------------------------------------------
# Create the database table "notes02".
# The table contains just a single text filed for
# storing the note...
#
# catch {...}
#       We put a "catch {...}" around the DB statement so that
#       we won't get an error creating the table if the table
#       already exists (when we run the page a 2nd time...).
#
# db_dml label sql
#       "db_dml" executes a database statement that doesn't
#       return values. The "label" argument is just a name
#       for the SQL statement for debugging and other
#       purposes. The SQL statement is delimited by
#       double quotes. It's OK to span several lines.
#
catch {
    db_dml lable01 "
        create table notes02 (
                note            text
        )
    "
}

# -----------------------------------------------------
# Save values for creating a new note.
# This piece is executed AFTER the user has pressed the
# "Create New Note" button, so this code is executed
# after the user has pressed the button.
#
if {[info exists new_note]} {
    db_dml lable01 "
        insert into notes02 (
                note
        ) values (
                :new_note
        )
    "
}

# -----------------------------------------------------
# Let's display the contents of the notes02 table.
#
# db_foreach label sql code_block
#       Runs the sql statement and executes the
#       code_block for every row returned from the
#       database.
#       Columns pulled out of the DB are mapped
#       into local variables which you can use
#       directly in your code.
#       In the example below, the table column
#       "note" is pulled out of the DB and used
#       in "...<td>$note</td>...".
#
set notes_sql "
        select  note
        from    notes02
"

set table_html ""
db_foreach label02 $notes_sql {
    append table_html "<tr><td>$note</td></tr>\n"
}

set table_html "
        <table>
        $table_html
        </table>
"

# -----------------------------------------------------
# Create a form to add a new note
#
set form_html "
        <form action="notes02" method="get">
        <input name="new_note" type="text" />
        <input value="Create New Note" type="submit" />
        </form>
"

# -----------------------------------------------------
# Let's put the pieces together and return the HTML.
#
doc_return 200 "text/html" "
<h1>Notes02</h1>
$table_html
$form_html
"

 

 

  Contact Us
  Project Open Business Solutions S.L.

Calle Aprestadora 19, 12o-2a

08902 Hospitalet de Llobregat (Barcelona)

Spain

 Tel Europe: +34 609 953 751
 Tel US: +1 415 200 2465
 Mail: info@project-open.com