mirror of
https://github.com/michaelrsweet/mxml.git
synced 2024-11-08 13:39:58 +00:00
Poll stuff.
This commit is contained in:
parent
f367d28d41
commit
cf3827d52a
@ -36,22 +36,22 @@ for your installation:</p>
|
||||
<p>Every piece of information in an XML file (elements, text,
|
||||
numbers) is stored in memory in "nodes". Nodes are defined by
|
||||
the <a
|
||||
href='reference.html#mxml_node_t'><tt>mxml_node_t</tt></a>
|
||||
href='#mxml_node_t'><tt>mxml_node_t</tt></a>
|
||||
structure. The <a
|
||||
href='reference.html#mxml_type_t'><tt>type</tt></a> member
|
||||
href='#mxml_type_t'><tt>type</tt></a> member
|
||||
defines the node type (element, integer, opaque, real, or text)
|
||||
which determines which value you want to look at in the <a
|
||||
href='reference.html#mxml_value_t'><tt>value</tt></a> union.</p>
|
||||
href='#mxml_value_t'><tt>value</tt></a> union.</p>
|
||||
|
||||
<p>New nodes can be created using the <a
|
||||
href='reference.html#mxmlNewElement'><tt>mxmlNewElement()</tt></a>,
|
||||
href='#mxmlNewElement'><tt>mxmlNewElement()</tt></a>,
|
||||
<a
|
||||
href='reference.html#mxmlNewInteger'><tt>mxmlNewInteger()</tt></a>,
|
||||
href='#mxmlNewInteger'><tt>mxmlNewInteger()</tt></a>,
|
||||
<a
|
||||
href='reference.html#mxmlNewOpaque'><tt>mxmlNewOpaque()</tt></a>,
|
||||
<a href='reference.html#mxmlNewReal'><tt>mxmlNewReal()</tt></a>,
|
||||
href='#mxmlNewOpaque'><tt>mxmlNewOpaque()</tt></a>,
|
||||
<a href='#mxmlNewReal'><tt>mxmlNewReal()</tt></a>,
|
||||
and <a
|
||||
href='reference.html#mxmlNewText'><tt>mxmlNewText()</tt></a>
|
||||
href='#mxmlNewText'><tt>mxmlNewText()</tt></a>
|
||||
functions. Only elements can have child nodes, and the top node
|
||||
must be an element, usually "?xml".</p>
|
||||
|
||||
@ -98,7 +98,7 @@ like the following in memory:</p>
|
||||
to the first child node.</p>
|
||||
|
||||
<p>Once you are done with the XML data, use the <a
|
||||
href='reference.html#mxmlDelete'><tt>mxmlDelete()</tt></a>
|
||||
href='#mxmlDelete'><tt>mxmlDelete()</tt></a>
|
||||
function to recursively free the memory that is used for a
|
||||
particular node or the entire tree:</p>
|
||||
|
||||
@ -109,15 +109,15 @@ particular node or the entire tree:</p>
|
||||
<h2>Loading and Saving XML Files</h2>
|
||||
|
||||
<p>You load an XML file using the <a
|
||||
href='reference.html#mxmlLoadFile'><tt>mxmlLoadFile()</tt></a>
|
||||
href='#mxmlLoadFile'><tt>mxmlLoadFile()</tt></a>
|
||||
function:</p>
|
||||
|
||||
<pre>
|
||||
FILE *fp;
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *tree;
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *tree;
|
||||
|
||||
fp = fopen("filename.xml", "r");
|
||||
tree = <a href='reference.html#mxmlLoadFile'>mxmlLoadFile</a>(NULL, fp, MXML_NO_CALLBACK);
|
||||
tree = <a href='#mxmlLoadFile'>mxmlLoadFile</a>(NULL, fp, MXML_NO_CALLBACK);
|
||||
fclose(fp);
|
||||
</pre>
|
||||
|
||||
@ -131,15 +131,15 @@ attribute values to determine the proper value type to return.
|
||||
The default value type is MXML_TEXT if no callback is used.</p>
|
||||
|
||||
<p>Similarly, you save an XML file using the <a
|
||||
href='reference.html#mxmlSaveFile'><tt>mxmlSaveFile()</tt></a>
|
||||
href='#mxmlSaveFile'><tt>mxmlSaveFile()</tt></a>
|
||||
function:</p>
|
||||
|
||||
<pre>
|
||||
FILE *fp;
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *tree;
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *tree;
|
||||
|
||||
fp = fopen("filename.xml", "w");
|
||||
<a href='reference.html#mxmlSaveFile'>mxmlSaveFile</a>(tree, fp, MXML_NO_CALLBACK);
|
||||
<a href='#mxmlSaveFile'>mxmlSaveFile</a>(tree, fp, MXML_NO_CALLBACK);
|
||||
fclose(fp);
|
||||
</pre>
|
||||
|
||||
@ -154,49 +154,49 @@ whitespace should be added and the string to insert (spaces,
|
||||
tabs, carriage returns, and newlines) otherwise.</p>
|
||||
|
||||
<p>The <a
|
||||
href='reference.html#mxmlLoadString'><tt>mxmlLoadString()</tt></a>,
|
||||
href='#mxmlLoadString'><tt>mxmlLoadString()</tt></a>,
|
||||
<a
|
||||
href='reference.html#mxmlSaveAllocString'><tt>mxmlSaveAllocString()</tt></a>,
|
||||
href='#mxmlSaveAllocString'><tt>mxmlSaveAllocString()</tt></a>,
|
||||
and <a
|
||||
href='reference.html#mxmlSaveString'><tt>mxmlSaveString()</tt></a>
|
||||
href='#mxmlSaveString'><tt>mxmlSaveString()</tt></a>
|
||||
functions load XML node trees from and save XML node trees to
|
||||
strings:</p>
|
||||
|
||||
<pre>
|
||||
char buffer[8192];
|
||||
char *ptr;
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *tree;
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *tree;
|
||||
|
||||
...
|
||||
tree = <a href='reference.html#mxmlLoadString'>mxmlLoadString</a>(NULL, buffer, MXML_NO_CALLBACK);
|
||||
tree = <a href='#mxmlLoadString'>mxmlLoadString</a>(NULL, buffer, MXML_NO_CALLBACK);
|
||||
|
||||
...
|
||||
<a href='reference.html#mxmlSaveString'>mxmlSaveString</a>(tree, buffer, sizeof(buffer), MXML_NO_CALLBACK);
|
||||
<a href='#mxmlSaveString'>mxmlSaveString</a>(tree, buffer, sizeof(buffer), MXML_NO_CALLBACK);
|
||||
|
||||
...
|
||||
ptr = <a href='reference.html#mxmlSaveAllocString'>mxmlSaveAllocString</a>(tree, MXML_NO_CALLBACK);
|
||||
ptr = <a href='#mxmlSaveAllocString'>mxmlSaveAllocString</a>(tree, MXML_NO_CALLBACK);
|
||||
</pre>
|
||||
|
||||
<h3>Finding and Iterating Nodes</h3>
|
||||
|
||||
<p>The <a
|
||||
href='reference.html#mxmlWalkPrev'><tt>mxmlWalkPrev()</tt></a>
|
||||
href='#mxmlWalkPrev'><tt>mxmlWalkPrev()</tt></a>
|
||||
and <a
|
||||
href='reference.html#mxmlWalkNext'><tt>mxmlWalkNext()</tt></a>functions
|
||||
href='#mxmlWalkNext'><tt>mxmlWalkNext()</tt></a>functions
|
||||
can be used to iterate through the XML node tree:</p>
|
||||
|
||||
<pre>
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *node = <a href='reference.html#mxmlWalkPrev'>mxmlWalkPrev</a>(current, tree, MXML_DESCEND);
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *node = <a href='#mxmlWalkPrev'>mxmlWalkPrev</a>(current, tree, MXML_DESCEND);
|
||||
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *node = <a href='reference.html#mxmlWalkNext'>mxmlWalkNext</a>(current, tree, MXML_DESCEND);
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *node = <a href='#mxmlWalkNext'>mxmlWalkNext</a>(current, tree, MXML_DESCEND);
|
||||
</pre>
|
||||
|
||||
<p>In addition, you can find a named element/node using the <a
|
||||
href='reference.html#mxmlFindElement'><tt>mxmlFindElement()</tt></a>
|
||||
href='#mxmlFindElement'><tt>mxmlFindElement()</tt></a>
|
||||
function:</p>
|
||||
|
||||
<pre>
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "name", "attr",
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "name", "attr",
|
||||
"value", MXML_DESCEND);
|
||||
</pre>
|
||||
|
||||
@ -206,30 +206,30 @@ e.g.:</p>
|
||||
|
||||
<pre>
|
||||
/* Find the first "a" element */
|
||||
node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "a", NULL, NULL, MXML_DESCEND);
|
||||
node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "a", NULL, NULL, MXML_DESCEND);
|
||||
|
||||
/* Find the first "a" element with "href" attribute */
|
||||
node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "a", "href", NULL, MXML_DESCEND);
|
||||
node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "a", "href", NULL, MXML_DESCEND);
|
||||
|
||||
/* Find the first "a" element with "href" to a URL */
|
||||
node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "a", "href",
|
||||
node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "a", "href",
|
||||
"http://www.easysw.com/~mike/mxml/", MXML_DESCEND);
|
||||
|
||||
/* Find the first element with a "src" attribute*/
|
||||
node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, NULL, "src", NULL, MXML_DESCEND);
|
||||
node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, NULL, "src", NULL, MXML_DESCEND);
|
||||
|
||||
/* Find the first element with a "src" = "foo.jpg" */
|
||||
node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, NULL, "src", "foo.jpg", MXML_DESCEND);
|
||||
node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, NULL, "src", "foo.jpg", MXML_DESCEND);
|
||||
</pre>
|
||||
|
||||
<p>You can also iterate with the same function:</p>
|
||||
|
||||
<pre>
|
||||
<a href='reference.html#mxml_node_t'>mxml_node_t</a> *node;
|
||||
<a href='#mxml_node_t'>mxml_node_t</a> *node;
|
||||
|
||||
for (node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "name", NULL, NULL, MXML_DESCEND);
|
||||
for (node = <a href='#mxmlFindElement'>mxmlFindElement</a>(tree, tree, "name", NULL, NULL, MXML_DESCEND);
|
||||
node != NULL;
|
||||
node = <a href='reference.html#mxmlFindElement'>mxmlFindElement</a>(node, tree, "name", NULL, NULL, MXML_DESCEND))
|
||||
node = <a href='#mxmlFindElement'>mxmlFindElement</a>(node, tree, "name", NULL, NULL, MXML_DESCEND))
|
||||
{
|
||||
... do something ...
|
||||
}
|
||||
|
281
doc/mxml.html
281
doc/mxml.html
@ -23,7 +23,7 @@ PRE { font-family: monospace }
|
||||
Michael Sweet<BR>
|
||||
Copyright 2003-2004<BR>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 ALIGN="CENTER"><A NAME="CONTENTS">Table of Contents</A></H1>
|
||||
<BR>
|
||||
<BR><B><A HREF="#INTRO">Introduction</A></B>
|
||||
@ -101,9 +101,16 @@ Copyright 2003-2004<BR>
|
||||
<LI><A HREF="#mxmlDelete">mxmlDelete()</A></LI>
|
||||
<LI><A HREF="#mxmlElementGetAttr">mxmlElementGetAttr()</A></LI>
|
||||
<LI><A HREF="#mxmlElementSetAttr">mxmlElementSetAttr()</A></LI>
|
||||
<LI><A HREF="#mxmlEntityAddCallback">mxmlEntityAddCallback()</A></LI>
|
||||
<LI><A HREF="#mxmlEntityGetName">mxmlEntityGetName()</A></LI>
|
||||
<LI><A HREF="#mxmlEntityGetValue">mxmlEntityGetValue()</A></LI>
|
||||
<LI><A HREF="#mxmlEntityRemoveCallback">mxmlEntityRemoveCallback()</A></LI>
|
||||
<LI><A HREF="#mxmlFindElement">mxmlFindElement()</A></LI>
|
||||
<LI><A HREF="#mxmlIndexDelete">mxmlIndexDelete()</A></LI>
|
||||
<LI><A HREF="#mxmlIndexEnum">mxmlIndexEnum()</A></LI>
|
||||
<LI><A HREF="#mxmlIndexFind">mxmlIndexFind()</A></LI>
|
||||
<LI><A HREF="#mxmlIndexNew">mxmlIndexNew()</A></LI>
|
||||
<LI><A HREF="#mxmlIndexReset">mxmlIndexReset()</A></LI>
|
||||
<LI><A HREF="#mxmlLoadFile">mxmlLoadFile()</A></LI>
|
||||
<LI><A HREF="#mxmlLoadString">mxmlLoadString()</A></LI>
|
||||
<LI><A HREF="#mxmlNewElement">mxmlNewElement()</A></LI>
|
||||
@ -129,6 +136,7 @@ Copyright 2003-2004<BR>
|
||||
<LI><A HREF="#_structures">Structures</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF="#mxml_attr_s">mxml_attr_s</A></LI>
|
||||
<LI><A HREF="#mxml_index_s">mxml_index_s</A></LI>
|
||||
<LI><A HREF="#mxml_node_s">mxml_node_s</A></LI>
|
||||
<LI><A HREF="#mxml_text_s">mxml_text_s</A></LI>
|
||||
<LI><A HREF="#mxml_value_s">mxml_value_s</A></LI>
|
||||
@ -137,6 +145,7 @@ Copyright 2003-2004<BR>
|
||||
<UL>
|
||||
<LI><A HREF="#mxml_attr_t">mxml_attr_t</A></LI>
|
||||
<LI><A HREF="#mxml_element_t">mxml_element_t</A></LI>
|
||||
<LI><A HREF="#mxml_index_t">mxml_index_t</A></LI>
|
||||
<LI><A HREF="#mxml_node_t">mxml_node_t</A></LI>
|
||||
<LI><A HREF="#mxml_text_t">mxml_text_t</A></LI>
|
||||
<LI><A HREF="#mxml_type_t">mxml_type_t</A></LI>
|
||||
@ -146,8 +155,12 @@ Copyright 2003-2004<BR>
|
||||
<UL>
|
||||
<LI><A HREF="#mxml_value_u">mxml_value_u</A></LI>
|
||||
</UL>
|
||||
<LI><A HREF="#_variables">Variables</A></LI>
|
||||
<UL>
|
||||
<LI><A HREF="#num_callbacks">num_callbacks</A></LI>
|
||||
</UL>
|
||||
<HR>
|
||||
</UL>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="INTRO">Introduction</A></H1>
|
||||
<P>This programmers manual describes Mini-XML version 2.0, a small XML
|
||||
parsing library that you can use to read and write XML and XML-like
|
||||
@ -307,7 +320,7 @@ File and directory names.</TD></TR>
|
||||
<DD>The XML specification from the World Wide Web Consortium (W3C)
|
||||
<BR /> </DD>
|
||||
</DL>
|
||||
</BLOCKQUOTE><HR>
|
||||
</BLOCKQUOTE><HR NOSHADE>
|
||||
<H1 align="right"><A name="INSTALL">1 - Building, Installing, and
|
||||
Packaging Mini-XML</A></H1>
|
||||
<P>This chapter describes how to build, install, and package Mini-XML on
|
||||
@ -370,7 +383,7 @@ epm(1)</TT> program to create software packages in a variety of formats.
|
||||
<P>The native packages will be in the local OS's native format: RPM for
|
||||
Red Hat Linux, DPKG for Debian Linux, PKG for Solaris, and so forth.
|
||||
Use the corresponding commands to install the native packages.</P>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="BASICS">2 - Getting Started with Mini-XML</A></H1>
|
||||
<P>This chapter describes how to write programs that use Mini-XML to
|
||||
access data in an XML file.</P>
|
||||
@ -592,7 +605,7 @@ mxmlSaveString()</TT></A> functions load XML node trees from and save
|
||||
the order would be reversed, ending at "?xml".</P>
|
||||
</LI>
|
||||
</UL>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="ADVANCED">3 - More Mini-XML Programming
|
||||
Techniques</A></H1>
|
||||
<P>This chapter shows additional ways to use the Mini-XML library in
|
||||
@ -602,7 +615,7 @@ mxmlSaveString()</TT></A> functions load XML node trees from and save
|
||||
<H2><A NAME="4_3">Changing Node Values</A></H2>
|
||||
<H2><A NAME="4_4">Formatted Text</A></H2>
|
||||
<H2><A NAME="4_5">Indexing</A></H2>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="MXMLDOC">4 - Using the mxmldoc Utility</A></H1>
|
||||
<P>This chapter describes how to use the <TT>mxmldoc(1)</TT> utility
|
||||
that comes with Mini-XML to automatically generate documentation for
|
||||
@ -957,7 +970,7 @@ align="bottom"><I> Listing 4-1, XML Schema File "mxmldoc.xsd" (con't)<
|
||||
</TD></TR>
|
||||
</TABLE>
|
||||
</CENTER>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="LICENSE">A - GNU Library General Public
|
||||
License</A></H1>
|
||||
<P align="center">Version 2, June 1991
|
||||
@ -1333,11 +1346,22 @@ align="bottom"><I> Listing 4-1, XML Schema File "mxmldoc.xsd" (con't)<
|
||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGES.</P>
|
||||
<P align="center"><BIG>END OF TERMS AND CONDITIONS</BIG></P>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="RELNOTES">B - Release Notes</A></H1>
|
||||
<H2><A NAME="7_1">Changes in Mini-XML 2.0</A></H2>
|
||||
<UL>
|
||||
<LI>New programmers manual.</LI>
|
||||
<LI>Added UTF-16 support (input only; all output is UTF-8)</LI>
|
||||
<LI>Added index functions to build a searchable index of XML nodes.</LI>
|
||||
<LI>Added character entity callback interface to support additional
|
||||
character entities beyond those defined in the XHTML specification.</LI>
|
||||
<LI>Added support for XHTML character entities.</LI>
|
||||
<LI>The mxmldoc utility now produces XML output which conforms to an
|
||||
updated XML schema, described in the file "doc/mxmldoc.xsd".</LI>
|
||||
<LI>Changed the whitespace callback interface to return strings instead
|
||||
of a single character, allowing for greater control over the formatting
|
||||
of XML files written using Mini-XML. THIS CHANGE WILL REQUIRE CHANGES
|
||||
TO YOUR 1.x CODE IF YOU USE WHITESPACE CALLBACKS.</LI>
|
||||
<LI>The mxmldoc utility now produces XML output which conforms to an
|
||||
updated XML schema, described in the file "doc/mxmldoc.xsd".</LI>
|
||||
<LI>Changed the whitespace callback interface to return strings instead
|
||||
@ -1456,7 +1480,7 @@ align="bottom"><I> Listing 4-1, XML Schema File "mxmldoc.xsd" (con't)<
|
||||
<UL>
|
||||
<LI>Initial public release.</LI>
|
||||
</UL>
|
||||
<HR>
|
||||
<HR NOSHADE>
|
||||
<H1 align="right"><A name="REFERENCE">C - Library Reference</A></H1>
|
||||
<H2><A NAME="8_1">Contents</A></H2>
|
||||
<UL>
|
||||
@ -1465,6 +1489,7 @@ align="bottom"><I> Listing 4-1, XML Schema File "mxmldoc.xsd" (con't)<
|
||||
<LI><A href="#_structures">Structures</A></LI>
|
||||
<LI><A href="#_types">Types</A></LI>
|
||||
<LI><A href="#_unions">Unions</A></LI>
|
||||
<LI><A href="#_variables">Variables</A></LI>
|
||||
</UL>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
@ -1498,9 +1523,18 @@ align="bottom"><I> Listing 4-1, XML Schema File "mxmldoc.xsd" (con't)<
|
||||
<LI><A href="#mxmlDelete"><TT>mxmlDelete()</TT></A></LI>
|
||||
<LI><A href="#mxmlElementGetAttr"><TT>mxmlElementGetAttr()</TT></A></LI>
|
||||
<LI><A href="#mxmlElementSetAttr"><TT>mxmlElementSetAttr()</TT></A></LI>
|
||||
<LI><A href="#mxmlEntityAddCallback"><TT>mxmlEntityAddCallback()</TT></A>
|
||||
</LI>
|
||||
<LI><A href="#mxmlEntityGetName"><TT>mxmlEntityGetName()</TT></A></LI>
|
||||
<LI><A href="#mxmlEntityGetValue"><TT>mxmlEntityGetValue()</TT></A></LI>
|
||||
<LI><A href="#mxmlEntityRemoveCallback"><TT>mxmlEntityRemoveCallback()</TT>
|
||||
</A></LI>
|
||||
<LI><A href="#mxmlFindElement"><TT>mxmlFindElement()</TT></A></LI>
|
||||
<LI><A href="#mxmlIndexDelete"><TT>mxmlIndexDelete()</TT></A></LI>
|
||||
<LI><A href="#mxmlIndexEnum"><TT>mxmlIndexEnum()</TT></A></LI>
|
||||
<LI><A href="#mxmlIndexFind"><TT>mxmlIndexFind()</TT></A></LI>
|
||||
<LI><A href="#mxmlIndexNew"><TT>mxmlIndexNew()</TT></A></LI>
|
||||
<LI><A href="#mxmlIndexReset"><TT>mxmlIndexReset()</TT></A></LI>
|
||||
<LI><A href="#mxmlLoadFile"><TT>mxmlLoadFile()</TT></A></LI>
|
||||
<LI><A href="#mxmlLoadString"><TT>mxmlLoadString()</TT></A></LI>
|
||||
<LI><A href="#mxmlNewElement"><TT>mxmlNewElement()</TT></A></LI>
|
||||
@ -1638,6 +1672,29 @@ mxmlElementSetAttr(
|
||||
<H4>Returns</H4>
|
||||
<P>Nothing.</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlEntityAddCallback">mxmlEntityAddCallback()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Add a callback to convert entities to Unicode.</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
void
|
||||
mxmlEntityAddCallback(
|
||||
int (*cb)(const char *name));
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>(*cb)(const char *name)</TT></TD><TD>Callback function to
|
||||
add</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>Nothing.</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlEntityGetName">mxmlEntityGetName()</A></H3>
|
||||
<HR noshade/>
|
||||
@ -1685,6 +1742,29 @@ mxmlEntityGetValue(
|
||||
<H4>Returns</H4>
|
||||
<P>Character value or -1 on error</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlEntityRemoveCallback">mxmlEntityRemoveCallback()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Remove a callback.</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
void
|
||||
mxmlEntityRemoveCallback(
|
||||
int (*cb)(const char *name));
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>(*cb)(const char *name)</TT></TD><TD>Callback function to
|
||||
remove</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>Nothing.</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlFindElement">mxmlFindElement()</A></H3>
|
||||
<HR noshade/>
|
||||
@ -1726,6 +1806,134 @@ mxmlFindElement(
|
||||
<H4>Returns</H4>
|
||||
<P>Element node or NULL</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlIndexDelete">mxmlIndexDelete()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Delete an index.</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
void
|
||||
mxmlIndexDelete(
|
||||
<A href="#mxml_index_t">mxml_index_t</A> * ind);
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>ind</TT></TD><TD>Index to delete</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>Nothing.</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlIndexEnum">mxmlIndexEnum()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Return the next node in the index. Nodes are returned in the sorted
|
||||
order of the index.</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
<A href="#mxml_node_t">mxml_node_t</A> *
|
||||
mxmlIndexEnum(
|
||||
<A href="#mxml_index_t">mxml_index_t</A> * ind);
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>ind</TT></TD><TD>Index to enumerate</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>Next node or NULL if there is none</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlIndexFind">mxmlIndexFind()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Find the next matching node. You should call mxmlIndexReset() prior
|
||||
to using this function for the first time with a particular set of
|
||||
"element" and "value" strings. Passing NULL for both "element" and
|
||||
"value" is equivalent to calling mxmlIndexEnum().</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
<A href="#mxml_node_t">mxml_node_t</A> *
|
||||
mxmlIndexFind(
|
||||
<A href="#mxml_index_t">mxml_index_t</A> * ind,
|
||||
const char * element,
|
||||
const char * value);
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>ind</TT></TD><TD>Index to search</TD></TR>
|
||||
<TR><TD><TT>element</TT></TD><TD>Element name to find, if any</TD></TR>
|
||||
<TR><TD><TT>value</TT></TD><TD>Attribute value, if any</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>Node or NULL if none found</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlIndexNew">mxmlIndexNew()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Create a new index. The index will contain all nodes that contain the
|
||||
named element and/or attribute. If both "element" and "attr" are NULL,
|
||||
then the index will contain a sorted list of the elements in the node
|
||||
tree. Nodes are sorted by element name and optionally by attribute
|
||||
value if the "attr" argument is not NULL.</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
<A href="#mxml_index_t">mxml_index_t</A> *
|
||||
mxmlIndexNew(
|
||||
<A href="#mxml_node_t">mxml_node_t</A> * node,
|
||||
const char * element,
|
||||
const char * attr);
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>node</TT></TD><TD>XML node tree</TD></TR>
|
||||
<TR><TD><TT>element</TT></TD><TD>Element to index or NULL for all</TD></TR>
|
||||
<TR><TD><TT>attr</TT></TD><TD>Attribute to index or NULL for none</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>New index</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlIndexReset">mxmlIndexReset()</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>Reset the enumeration/find pointer in the index and return the first
|
||||
node in the index. This function should be called prior to using
|
||||
mxmlIndexEnum() or mxmlIndexFind() for the first time.</P>
|
||||
<H4>Syntax</H4>
|
||||
<PRE>
|
||||
<A href="#mxml_node_t">mxml_node_t</A> *
|
||||
mxmlIndexReset(
|
||||
<A href="#mxml_index_t">mxml_index_t</A> * ind);
|
||||
</PRE>
|
||||
<H4>Arguments</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>ind</TT></TD><TD>Index to reset</TD></TR>
|
||||
</TABLE>
|
||||
<H4>Returns</H4>
|
||||
<P>First node or NULL if there is none</P>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxmlLoadFile">mxmlLoadFile()</A></H3>
|
||||
<HR noshade/>
|
||||
@ -2327,6 +2535,7 @@ mxmlWalkPrev(
|
||||
<H2><A name="_structures">Structures</A></H2>
|
||||
<UL>
|
||||
<LI><A href="#mxml_attr_s"><TT>mxml_attr_s</TT></A></LI>
|
||||
<LI><A href="#mxml_index_s"><TT>mxml_index_s</TT></A></LI>
|
||||
<LI><A href="#mxml_node_s"><TT>mxml_node_s</TT></A></LI>
|
||||
<LI><A href="#mxml_text_s"><TT>mxml_text_s</TT></A></LI>
|
||||
<LI><A href="#mxml_value_s"><TT>mxml_value_s</TT></A></LI>
|
||||
@ -2355,6 +2564,35 @@ struct mxml_attr_s
|
||||
<TR><TD><TT>value</TT></TD><TD>Attribute value</TD></TR>
|
||||
</TABLE>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxml_index_s">mxml_index_s</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>An XML node index.</P>
|
||||
<H4>Definition</H4>
|
||||
<PRE>
|
||||
struct mxml_index_s
|
||||
{
|
||||
int alloc_nodes;
|
||||
char * attr;
|
||||
int cur_node;
|
||||
<A href="#mxml_node_t">mxml_node_t</A> ** nodes;
|
||||
int num_nodes;
|
||||
};
|
||||
</PRE>
|
||||
<H4>Members</H4>
|
||||
<P class="table"></P>
|
||||
<TABLE align="center" border="1" cellpadding="5" cellspacing="0" width="80%">
|
||||
<THEAD></THEAD>
|
||||
<TR bgcolor="#cccccc"><TH>Name</TH><TH>Description</TH></TR>
|
||||
<TBODY></TBODY>
|
||||
<TR><TD><TT>alloc_nodes</TT></TD><TD>Allocated nodes in index</TD></TR>
|
||||
<TR><TD><TT>attr</TT></TD><TD>Attribute used for indexing or NULL</TD></TR>
|
||||
<TR><TD><TT>cur_node</TT></TD><TD>Current node</TD></TR>
|
||||
<TR><TD><TT>nodes</TT></TD><TD>Node array</TD></TR>
|
||||
<TR><TD><TT>num_nodes</TT></TD><TD>Number of nodes in index</TD></TR>
|
||||
</TABLE>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxml_node_s">mxml_node_s</A></H3>
|
||||
<HR noshade/>
|
||||
@ -2441,6 +2679,7 @@ struct mxml_value_s
|
||||
<UL>
|
||||
<LI><A href="#mxml_attr_t"><TT>mxml_attr_t</TT></A></LI>
|
||||
<LI><A href="#mxml_element_t"><TT>mxml_element_t</TT></A></LI>
|
||||
<LI><A href="#mxml_index_t"><TT>mxml_index_t</TT></A></LI>
|
||||
<LI><A href="#mxml_node_t"><TT>mxml_node_t</TT></A></LI>
|
||||
<LI><A href="#mxml_text_t"><TT>mxml_text_t</TT></A></LI>
|
||||
<LI><A href="#mxml_type_t"><TT>mxml_type_t</TT></A></LI>
|
||||
@ -2467,6 +2706,16 @@ typedef struct <A href="#mxml_attr_s">mxml_attr_s</A> mxml_attr_t;
|
||||
typedef struct <A href="#mxml_value_s">mxml_value_s</A> mxml_element_t;
|
||||
</PRE>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxml_index_t">mxml_index_t</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Description</H4>
|
||||
<P>An XML node index.</P>
|
||||
<H4>Definition</H4>
|
||||
<PRE>
|
||||
typedef struct <A href="#mxml_index_s">mxml_index_s</A> mxml_index_t;
|
||||
</PRE>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="mxml_node_t">mxml_node_t</A></H3>
|
||||
<HR noshade/>
|
||||
@ -2541,5 +2790,19 @@ union mxml_value_u
|
||||
<TR><TD><TT>real</TT></TD><TD>Real number</TD></TR>
|
||||
<TR><TD><TT>text</TT></TD><TD>Text fragment</TD></TR>
|
||||
</TABLE>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H2><A name="_variables">Variables</A></H2>
|
||||
<UL>
|
||||
<LI><A href="#num_callbacks"><TT>num_callbacks</TT></A></LI>
|
||||
</UL>
|
||||
|
||||
<!-- NEW PAGE -->
|
||||
<H3><A name="num_callbacks">num_callbacks</A></H3>
|
||||
<HR noshade/>
|
||||
<H4>Definition</H4>
|
||||
<PRE>
|
||||
static int num_callbacks = 1;
|
||||
</PRE>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
BIN
doc/mxml.pdf
BIN
doc/mxml.pdf
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
--
|
||||
-- "$Id: mxml.sql,v 1.3 2004/05/17 21:00:42 mike Exp $"
|
||||
-- "$Id: mxml.sql,v 1.4 2004/05/20 03:38:42 mike Exp $"
|
||||
--
|
||||
-- Database schema for the Mini-XML web pages.
|
||||
--
|
||||
@ -10,6 +10,7 @@
|
||||
-- Revision History:
|
||||
--
|
||||
-- M. Sweet 05/17/2004 Initial revision.
|
||||
-- M. Sweet 05/19/2004 Added link, poll, and vote tables.
|
||||
--
|
||||
|
||||
|
||||
@ -69,6 +70,80 @@ CREATE TABLE comment (
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table 'link'
|
||||
--
|
||||
-- This table lists links to external applications, web pages, etc.
|
||||
-- Basically, we end up providing a hierachical, searchable link list,
|
||||
-- complete with comments from users...
|
||||
--
|
||||
|
||||
CREATE TABLE link (
|
||||
id INTEGER PRIMARY KEY, -- Link ID number
|
||||
parent_id INTEGER, -- Parent link ID or 0 for top-level
|
||||
is_category INTEGER, -- 0 = listing, 1 = category
|
||||
is_published INTEGER, -- 0 = private, 1 = public
|
||||
name VARCHAR(255), -- Link name
|
||||
version VARCHAR(255), -- Current version number string
|
||||
license VARCHAR(255), -- Current license
|
||||
author VARCHAR(255), -- Current author
|
||||
email VARCHAR(255), -- Public email address
|
||||
homepage_url VARCHAR(255), -- Home page
|
||||
download_url VARCHAR(255), -- Download page
|
||||
description TEXT, -- HTML description of link
|
||||
rating_total INTEGER, -- Total of all ratings
|
||||
rating_count INTEGER, -- Number of ratings
|
||||
homepage_visits INTEGER, -- Number of clicks to the home page
|
||||
download_visits INTEGER, -- Number of clicks to the download page
|
||||
create_date INTEGER, -- Creation time/date
|
||||
create_user VARCHAR(255), -- User that created the link
|
||||
modify_date INTEGER, -- Last time/date changed
|
||||
modify_user VARCHAR(255) -- User that made the last change
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table 'poll'
|
||||
--
|
||||
-- This table provides a very simple single question, multiple choice poll
|
||||
-- interface for the main page. Used successfully for a couple years now
|
||||
-- on the CUPS and FLTK sites, the main twist is the new poll_type field
|
||||
-- to control whether it is pick-one or pick-many poll.
|
||||
--
|
||||
|
||||
CREATE TABLE poll (
|
||||
id INTEGER PRIMARY KEY, -- Poll ID number
|
||||
is_published INTEGER, -- 0 = private, 1 = public
|
||||
poll_type INTEGER, -- 0 = pick one, 1 = pick many
|
||||
question VARCHAR(255), -- Question plain text
|
||||
answer0 VARCHAR(255), -- Answer #1 plain text
|
||||
count0 INTEGER, -- Number of votes for #1
|
||||
answer1 VARCHAR(255), -- Answer #2 plain text
|
||||
count1 INTEGER, -- Number of votes for #2
|
||||
answer2 VARCHAR(255), -- Answer #3 plain text
|
||||
count2 INTEGER, -- Number of votes for #3
|
||||
answer3 VARCHAR(255), -- Answer #4 plain text
|
||||
count3 INTEGER, -- Number of votes for #4
|
||||
answer4 VARCHAR(255), -- Answer #5 plain text
|
||||
count4 INTEGER, -- Number of votes for #5
|
||||
answer5 VARCHAR(255), -- Answer #6 plain text
|
||||
count5 INTEGER, -- Number of votes for #6
|
||||
answer6 VARCHAR(255), -- Answer #7 plain text
|
||||
count6 INTEGER, -- Number of votes for #7
|
||||
answer7 VARCHAR(255), -- Answer #8 plain text
|
||||
count7 INTEGER, -- Number of votes for #8
|
||||
answer8 VARCHAR(255), -- Answer #9 plain text
|
||||
count8 INTEGER, -- Number of votes for #9
|
||||
answer9 VARCHAR(255), -- Answer #10 plain text
|
||||
count9 INTEGER, -- Number of votes for #10
|
||||
votes INTEGER, -- Total votes
|
||||
create_date INTEGER, -- Time/date of creation
|
||||
create_user VARCHAR(255), -- User that created the poll
|
||||
modify_date INTEGER, -- Time/date of last change
|
||||
modify_user VARCHAR(255) -- User that made the last change
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Schema for table 'str'
|
||||
--
|
||||
@ -154,6 +229,18 @@ INSERT INTO users VALUES(NULL, 1, 'mike', 'Michael Sweet <mike@easysw.com>',
|
||||
'195c416888c3151df53ae9f38c67afcc', 100,
|
||||
1084823565, 'mike', 1084823565, 'mike');
|
||||
|
||||
|
||||
--
|
||||
-- End of "$Id: mxml.sql,v 1.3 2004/05/17 21:00:42 mike Exp $".
|
||||
-- Table structure for table 'vote'
|
||||
--
|
||||
-- This table is used to track ratings, poll votes, etc. that are made on
|
||||
-- the links and poll pages.
|
||||
--
|
||||
|
||||
CREATE TABLE vote (
|
||||
type_id_ip VARCHAR(255) PRIMARY KEY -- type_id_ip
|
||||
);
|
||||
|
||||
--
|
||||
-- End of "$Id: mxml.sql,v 1.4 2004/05/20 03:38:42 mike Exp $".
|
||||
--
|
||||
|
BIN
www/images/graph.gif
Normal file
BIN
www/images/graph.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 B |
@ -1,12 +1,13 @@
|
||||
<?php
|
||||
//
|
||||
// "$Id: index.php,v 1.4 2004/05/19 21:17:47 mike Exp $"
|
||||
// "$Id: index.php,v 1.5 2004/05/20 03:38:42 mike Exp $"
|
||||
//
|
||||
// Mini-XML home page...
|
||||
//
|
||||
|
||||
include_once "phplib/html.php";
|
||||
include_once "phplib/common.php";
|
||||
include_once "phplib/poll.php";
|
||||
|
||||
html_header();
|
||||
|
||||
@ -14,21 +15,29 @@ print("<h1 align='center'>Mini-XML Home Page</h1>");
|
||||
|
||||
print("<p><table width='100%' height='100%' border='0' cellpadding='0' "
|
||||
."cellspacing='0'>\n"
|
||||
."<tr><td valign='top' width='40%'>");
|
||||
."<tr><td valign='top' width='33%'>");
|
||||
|
||||
html_start_table(array("Current Poll [ <a href='poll.php'>"
|
||||
."Show All</a> ]"));
|
||||
html_start_row();
|
||||
print("<td>");
|
||||
show_poll(get_recent_poll());
|
||||
print("</td>");
|
||||
html_end_row();
|
||||
html_end_table();
|
||||
|
||||
html_start_table(array("Quick Info"), "100%", "100%");
|
||||
html_start_row();
|
||||
print("<td>"
|
||||
."<p align='center'>Stable Release: <a href='software.php?1.3'>v1.3, "
|
||||
."December 21, 2003</a><br />"
|
||||
."Developer Release: <a href='software.php?2.0rc1'>v2.0rc1, "
|
||||
."May 20, 2004</a></p>\n"
|
||||
."<p align='center'>"
|
||||
."Stable Release: <a href='software.php?1.3'>v1.3</a><br />"
|
||||
."Developer Release: <a href='software.php?2.0rc1'>v2.0rc1</a></p>\n"
|
||||
."<small><p>Mini-XML is a small XML parsing library that you can use to "
|
||||
."read XML and XML-like data files in your application without "
|
||||
."requiring large non-standard libraries. Mini-XML only requires "
|
||||
."an ANSI C compatible compiler (GCC works, as do most vendors' "
|
||||
."ANSI C compilers) and a 'make' program.</p>\n"
|
||||
."<p>Mini-XML provides the following functionality:</p>\n"
|
||||
."<!--<p>Mini-XML provides the following functionality:</p>\n"
|
||||
."<ul>\n"
|
||||
."<li>Reading of UTF-8 and UTF-16 and writing of UTF-8 encoded "
|
||||
."XML files and strings.</li>\n"
|
||||
@ -42,14 +51,14 @@ print("<td>"
|
||||
."<li>Functions for creating, indexing, and managing trees of data.</li>\n"
|
||||
."<li>\"Find\" and \"walk\" functions for easily locating and "
|
||||
."navigating trees of data.</li>\n"
|
||||
."</ul></small>\n"
|
||||
."</ul>--></small>\n"
|
||||
."</td>");
|
||||
html_end_row();
|
||||
html_end_table();
|
||||
|
||||
print("</td><td> </td>"
|
||||
."<td valign='top' width='60%'>"
|
||||
."<h2>Recent Articles [ <a href='articles.php'>View All</a>"
|
||||
."<td valign='top' width='67%'>"
|
||||
."<h2>Recent Articles [ <a href='articles.php'>Show All</a>"
|
||||
." ]</h2>\n");
|
||||
|
||||
$result = db_query("SELECT * FROM article WHERE is_published = 1 "
|
||||
@ -88,6 +97,6 @@ print("</td></tr>\n"
|
||||
html_footer();
|
||||
|
||||
//
|
||||
// End of "$Id: index.php,v 1.4 2004/05/19 21:17:47 mike Exp $".
|
||||
// End of "$Id: index.php,v 1.5 2004/05/20 03:38:42 mike Exp $".
|
||||
//
|
||||
?>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?
|
||||
//
|
||||
// "$Id: common.php,v 1.10 2004/05/20 02:04:45 mike Exp $"
|
||||
// "$Id: common.php,v 1.11 2004/05/20 03:38:42 mike Exp $"
|
||||
//
|
||||
// Common utility functions for PHP pages...
|
||||
//
|
||||
@ -224,6 +224,8 @@ format_text($text) // I - Original string
|
||||
else
|
||||
$ftext .= "<br />\n";
|
||||
}
|
||||
else
|
||||
$ftext .= "\n";
|
||||
|
||||
$col = 0;
|
||||
break;
|
||||
@ -671,6 +673,6 @@ validate_email($email) // I - Email address
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id: common.php,v 1.10 2004/05/20 02:04:45 mike Exp $".
|
||||
// End of "$Id: common.php,v 1.11 2004/05/20 03:38:42 mike Exp $".
|
||||
//
|
||||
?>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
//
|
||||
// "$Id: globals.php,v 1.5 2004/05/19 22:45:23 mike Exp $"
|
||||
// "$Id: globals.php,v 1.6 2004/05/20 03:38:42 mike Exp $"
|
||||
//
|
||||
// Global PHP constants and variables...
|
||||
//
|
||||
@ -28,6 +28,7 @@ $argv = $_SERVER["argv"];
|
||||
$PHP_SELF = $_SERVER["PHP_SELF"];
|
||||
$REQUEST_METHOD = $_SERVER["REQUEST_METHOD"];
|
||||
$SERVER_NAME = $_SERVER["SERVER_NAME"];
|
||||
$REMOTE_ADDR = $_SERVER["REMOTE_ADDR"];
|
||||
|
||||
if (array_key_exists("ISHTTPS", $_SERVER))
|
||||
$PHP_URL = "https://$_SERVER[SERVER_NAME]:$_SERVER[SERVER_PORT]$_SERVER[PHP_SELF]";
|
||||
@ -35,6 +36,6 @@ else
|
||||
$PHP_URL = "http://$_SERVER[SERVER_NAME]:$_SERVER[SERVER_PORT]$_SERVER[PHP_SELF]";
|
||||
|
||||
//
|
||||
// End of "$Id: globals.php,v 1.5 2004/05/19 22:45:23 mike Exp $".
|
||||
// End of "$Id: globals.php,v 1.6 2004/05/20 03:38:42 mike Exp $".
|
||||
//
|
||||
?>
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
//
|
||||
// "$Id: html.php,v 1.10 2004/05/19 22:45:23 mike Exp $"
|
||||
// "$Id: html.php,v 1.11 2004/05/20 03:38:42 mike Exp $"
|
||||
//
|
||||
// PHP functions for standardized HTML output...
|
||||
//
|
||||
@ -236,6 +236,7 @@ html_start_table($headings, // I - Array of heading strings
|
||||
{
|
||||
global $html_row, $html_cols;
|
||||
|
||||
|
||||
print("<p><table");
|
||||
if ($width != "")
|
||||
print(" width='$width'");
|
||||
@ -246,12 +247,11 @@ html_start_table($headings, // I - Array of heading strings
|
||||
."<img src='images/hdr-top-left.gif' width='16' height='16' "
|
||||
."alt=''/></th>");
|
||||
|
||||
$add_html_cols = 0; // Add to html_cols after display if colspan is used.
|
||||
$html_row = 0;
|
||||
$html_cols = sizeof($headings);
|
||||
$html_cols = count($headings);
|
||||
|
||||
reset($headings);
|
||||
for ($i = 0; $i < $html_cols; $i ++)
|
||||
for ($i = 0; $i < count($headings); $i ++)
|
||||
{
|
||||
//
|
||||
// Headings can be in the following forms:
|
||||
@ -262,58 +262,45 @@ html_start_table($headings, // I - Array of heading strings
|
||||
// "xxxxxxxx:aa" -- Heading with align.
|
||||
// "xxxxxxxx::cc" -- Heading with a colspan.
|
||||
// "xxxxxxxx:::ww" -- Heading with a width.
|
||||
// "xxxxxxxx:cc:ww" -- Heading with colspan and width.
|
||||
// "xxxxxxxx::cc:ww" -- Heading with colspan and width.
|
||||
// "xxxxxxxx:aa:cc:ww" -- Heading with align, colspan and width.
|
||||
//
|
||||
// etc, etc.
|
||||
//
|
||||
|
||||
$s_header = "";
|
||||
$s_header = "";
|
||||
$s_colspan = "";
|
||||
$s_width = "";
|
||||
$s_align = "";
|
||||
$s_width = "";
|
||||
$s_align = "";
|
||||
|
||||
if (strstr( $headings[$i], ":" ))
|
||||
if (strstr($headings[$i], ":"))
|
||||
{
|
||||
$data = explode( ":", $headings[$i] );
|
||||
|
||||
$data = explode(":", $headings[$i]);
|
||||
$s_header = $data[0];
|
||||
|
||||
if (ISSET($data[1]))
|
||||
{
|
||||
$align = $data[1];
|
||||
$s_align = "align=$align";
|
||||
}
|
||||
if ($data[1] != "")
|
||||
$s_align = "align=$data[1]";
|
||||
|
||||
if ($data[2] > 0)
|
||||
if ($data[2] > 1)
|
||||
{
|
||||
$colspan = $data[2];
|
||||
$s_colspan = "colspan=$colspan";
|
||||
if ($colspan > 1)
|
||||
$add_html_cols += ($colspan - 1);
|
||||
$s_colspan = "colspan=$data[2]";
|
||||
|
||||
if ($data[2] > 1)
|
||||
$html_cols += $data[2] - 1;
|
||||
}
|
||||
|
||||
if ($data[3] > 0)
|
||||
{
|
||||
$width = $data[3];
|
||||
$s_width = "width=$width%";
|
||||
}
|
||||
$s_width = "width=$data[3]%";
|
||||
}
|
||||
else
|
||||
$s_header = $headings[$i];
|
||||
|
||||
if (strlen($s_header))
|
||||
{
|
||||
print("<th $s_align $s_colspan $s_width>$s_header</th>");
|
||||
}
|
||||
else
|
||||
{
|
||||
print("<th $s_colspan $s_width> </th>");
|
||||
}
|
||||
}
|
||||
|
||||
$html_cols += $add_html_cols;
|
||||
|
||||
print("<th align='right' valign='top'>"
|
||||
."<img src='images/hdr-top-right.gif' "
|
||||
."width='16' height='16' alt=''/></th></tr>\n");
|
||||
|
114
www/phplib/poll.php
Normal file
114
www/phplib/poll.php
Normal file
@ -0,0 +1,114 @@
|
||||
<?
|
||||
//
|
||||
// "$Id: poll.php,v 1.1 2004/05/20 03:38:42 mike Exp $"
|
||||
//
|
||||
// Common poll interface functions...
|
||||
//
|
||||
// This file should be included using "include_once"...
|
||||
//
|
||||
// Contents:
|
||||
//
|
||||
// get_recent_poll() - Get the most recent poll...
|
||||
// show_poll() - Show a poll...
|
||||
//
|
||||
|
||||
|
||||
//
|
||||
// Include necessary headers...
|
||||
//
|
||||
|
||||
include_once "db.php";
|
||||
|
||||
|
||||
//
|
||||
// Constants for poll_type column...
|
||||
//
|
||||
|
||||
$POLL_TYPE_PICKONE = 0;
|
||||
$POLL_TYPE_PICKMANY = 1;
|
||||
|
||||
|
||||
//
|
||||
// 'get_recent_poll()' - Get the most recent poll...
|
||||
//
|
||||
|
||||
function // O - Poll ID or 0
|
||||
get_recent_poll()
|
||||
{
|
||||
$result = db_query("SELECT id FROM poll WHERE is_published = 1 "
|
||||
."ORDER BY id DESC LIMIT 1");
|
||||
$row = db_next($result);
|
||||
$id = (int)$row['id'];
|
||||
|
||||
db_free($result);
|
||||
|
||||
return ($id);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// 'show_poll()' - Show a poll...
|
||||
//
|
||||
|
||||
function
|
||||
show_poll($id) // I - Poll ID
|
||||
{
|
||||
global $PHP_SELF, $POLL_TYPE_PICKONE, $POLL_TYPE_PICKMANY;
|
||||
|
||||
|
||||
$result = db_query("SELECT * FROM poll WHERE is_published = 1 AND id = $id");
|
||||
|
||||
if (db_count($result) == 1)
|
||||
{
|
||||
$row = db_next($result);
|
||||
$id = $row['id'];
|
||||
$question = htmlspecialchars($row['question']);
|
||||
|
||||
print("<p><form method='POST' action='poll.php?v$row[id]'>"
|
||||
."<b>$question</b>\n");
|
||||
|
||||
if ($row['poll_type'] == $POLL_TYPE_PICKONE)
|
||||
print("(please pick one)\n");
|
||||
else
|
||||
print("(pick all that apply)\n");
|
||||
|
||||
for ($i = 0; $i < 10; $i ++)
|
||||
{
|
||||
$answer = htmlspecialchars($row["answer$i"]);
|
||||
|
||||
if ($answer != "")
|
||||
{
|
||||
if ($row['poll_type'] == $POLL_TYPE_PICKONE)
|
||||
print("<br /><input type='radio' name='ANSWER'");
|
||||
else
|
||||
print("<br /><input type='checkbox' name='ANSWER$i'");
|
||||
|
||||
print(" value='$i'/>$answer\n");
|
||||
}
|
||||
}
|
||||
|
||||
$votes = $row['votes'];
|
||||
if ($votes == 1)
|
||||
$votes .= " vote";
|
||||
else
|
||||
$votes .= " votes";
|
||||
|
||||
$ccount = count_comments("poll.php_r$id");
|
||||
if ($ccount == 1)
|
||||
$ccount .= " comment";
|
||||
else
|
||||
$ccount .= " comments";
|
||||
|
||||
print("<br /><input type='submit' value='Vote'/>\n"
|
||||
."[ <a href='poll.php?r$id'>Results</a> ]\n");
|
||||
print("<br />($votes, $ccount)</form></p>\n");
|
||||
}
|
||||
|
||||
db_free($result);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// End of "$Id: poll.php,v 1.1 2004/05/20 03:38:42 mike Exp $".
|
||||
//
|
||||
?>
|
388
www/poll.php
Normal file
388
www/poll.php
Normal file
@ -0,0 +1,388 @@
|
||||
<?php
|
||||
//
|
||||
// "$Id: poll.php,v 1.1 2004/05/20 03:38:42 mike Exp $"
|
||||
//
|
||||
// Poll page...
|
||||
//
|
||||
|
||||
//
|
||||
// Include necessary headers...
|
||||
//
|
||||
|
||||
include_once "phplib/html.php";
|
||||
include_once "phplib/poll.php";
|
||||
include_once "phplib/common.php";
|
||||
|
||||
|
||||
// Get the operation code:
|
||||
//
|
||||
// cN = show poll N
|
||||
// eN = edit poll N
|
||||
// l = list all polls
|
||||
// n = new poll
|
||||
// rN = show results of poll N
|
||||
// uN = update poll N (POST)
|
||||
// vN = vote for poll N (POST)
|
||||
|
||||
$poll = 0;
|
||||
|
||||
if ($argc > 0)
|
||||
{
|
||||
$op = $argv[0][0];
|
||||
$argv[0][0] = ' ';
|
||||
$poll = (int)$argv[0];
|
||||
}
|
||||
else if ($LOGIN_LEVEL >= AUTH_DEVEL)
|
||||
$op = 'l';
|
||||
else
|
||||
$op = 'c';
|
||||
|
||||
if ($poll == 0 && $op != 'u' && $op != 'n')
|
||||
$poll = get_recent_poll();
|
||||
|
||||
// Do it!
|
||||
switch ($op)
|
||||
{
|
||||
case 'c' : // Show a poll
|
||||
html_header("Poll #$poll");
|
||||
print("<h1>Poll #$poll</h1>\n");
|
||||
show_poll($poll);
|
||||
html_footer();
|
||||
break;
|
||||
|
||||
case 'l' : // List all polls
|
||||
html_header("Polls");
|
||||
|
||||
if ($LOGIN_LEVEL > AUTH_USER)
|
||||
{
|
||||
// Show all polls and allow poll creation...
|
||||
$result = db_query("SELECT * FROM poll ORDER BY id DESC");
|
||||
|
||||
html_start_links(1);
|
||||
html_link("Add New Poll", "$PHP_SELF?n");
|
||||
html_end_links(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only show published polls...
|
||||
$result = db_query("SELECT * FROM poll WHERE is_published = 1 "
|
||||
."ORDER BY id DESC");
|
||||
}
|
||||
|
||||
print("<h1>Polls</h1>\n");
|
||||
|
||||
html_start_table(array("ID", "Question::2"));
|
||||
|
||||
while ($row = db_next($result))
|
||||
{
|
||||
$id = $row['id'];
|
||||
$votes = $row['votes'];
|
||||
$question = htmlspecialchars($row['question']);
|
||||
$ccount = count_comments("poll.php_r$id");
|
||||
|
||||
if ($ccount == 1)
|
||||
$ccount .= " comment";
|
||||
else
|
||||
$ccount .= " comments";
|
||||
|
||||
html_start_row();
|
||||
print("<td align='center'>#$row[id]</td>"
|
||||
."<td align='center' width='67%'>$question");
|
||||
if (!$row['is_published'])
|
||||
print(" <img src='images/private.gif' width='16' height='16' "
|
||||
."align='middle' alt='private'/>");
|
||||
print("</td><td nowrap><a href='$PHP_SELF?c$id'>Vote</a> | "
|
||||
."<a href='$PHP_SELF?r$id'>Results</a>");
|
||||
|
||||
if ($LOGIN_LEVEL > AUTH_USER)
|
||||
print(" | <a href='$PHP_SELF?e$id'>Edit</a>");
|
||||
|
||||
print(" ($votes total votes, $ccount)</td>");
|
||||
html_end_row();
|
||||
}
|
||||
|
||||
html_end_table();
|
||||
|
||||
db_free($result);
|
||||
|
||||
html_footer();
|
||||
break;
|
||||
|
||||
case 'r' : // Show results
|
||||
html_header("Poll #$poll");
|
||||
|
||||
html_start_links(1);
|
||||
html_link("Show All Polls", "$PHP_SELF?l");
|
||||
html_link("Show Comments", "#_USER_COMMENTS");
|
||||
html_link("Submit Comment", "comment.php?r0+ppoll.php_r$poll");
|
||||
html_end_links(1);
|
||||
|
||||
print("<h1>Poll #$poll</h1>\n");
|
||||
|
||||
$result = db_query("SELECT * FROM poll WHERE id = $poll");
|
||||
$row = db_next($result);
|
||||
|
||||
$votes = $row['votes'];
|
||||
|
||||
for ($max_count = 0, $i = 0; $i < 10; $i ++)
|
||||
{
|
||||
if ($row["count$i"] > $max_count)
|
||||
$max_count = $row["count$i"];
|
||||
}
|
||||
|
||||
if ($votes == 0)
|
||||
print("<p>No votes for this poll yet...</p>\n");
|
||||
else
|
||||
{
|
||||
$question = htmlspecialchars($row['question']);
|
||||
|
||||
print("<center><table>\n");
|
||||
print("<tr><td></td><th align='left'>$question</th></tr>\n");
|
||||
|
||||
for ($i = 0; $i < 10; $i ++)
|
||||
{
|
||||
if ($row["answer$i"] != "")
|
||||
{
|
||||
$percent = (int)(100 * $row["count$i"] / $votes);
|
||||
$size = (int)(300 * $row["count$i"] / $max_count);
|
||||
$answer = htmlspecialchars($row["answer$i"]);
|
||||
$count = $row["count$i"];
|
||||
|
||||
print("<tr><td align='right'>$answer</td><td>"
|
||||
."<img src='${rootpath}images/graph.gif' width='$size' "
|
||||
."height='12'> $count / $percent%</td></tr>\n");
|
||||
}
|
||||
}
|
||||
|
||||
print("<tr><td></td><th align='right'>$votes total votes.</th></tr>\n");
|
||||
print("</table></center>\n");
|
||||
}
|
||||
|
||||
print("<hr noshade/>\n"
|
||||
."<h2><a name='_USER_COMMENTS'>User Comments</a></h2>\n");
|
||||
html_start_links();
|
||||
html_link("Submit Comment", "comment.php?r0+ppoll.php_r$poll");
|
||||
html_end_links();
|
||||
|
||||
show_comments("poll.php_r$poll");
|
||||
|
||||
db_free($result);
|
||||
|
||||
html_footer();
|
||||
break;
|
||||
|
||||
case 'v' : // Vote on a poll
|
||||
$answers = "";
|
||||
|
||||
if ($REQUEST_METHOD == "POST")
|
||||
{
|
||||
if (array_key_exists("ANSWER", $_POST))
|
||||
{
|
||||
$answer = (int)$_POST["ANSWER"];
|
||||
$answers = ",count$answer=count$answer+1";
|
||||
}
|
||||
else
|
||||
{
|
||||
for ($i = 0; $i < 10; $i ++)
|
||||
{
|
||||
if (array_key_exists("ANSWER$i", $_POST))
|
||||
$answers .= ",count$i=count$i+1";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($answers != "")
|
||||
{
|
||||
if (!db_query("INSERT INTO vote VALUES('poll_${poll}_${REMOTE_ADDR}')")
|
||||
&& $LOGIN_LEVEL < AUTH_DEVEL)
|
||||
{
|
||||
html_header("Poll Error");
|
||||
print("<h1>Poll Error</h1>\n");
|
||||
print("<p>Sorry, it appears that you or someone else using your IP "
|
||||
."address has already voted for "
|
||||
."<a href='$PHP_SELF?r$poll'>poll #$poll</a>.\n");
|
||||
html_footer();
|
||||
}
|
||||
else
|
||||
{
|
||||
db_query("UPDATE poll SET votes=votes+1$answers WHERE id = $poll");
|
||||
|
||||
header("Location: $PHP_SELF?r$poll");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
header("Location: $PHP_SELF?c$poll");
|
||||
}
|
||||
break;
|
||||
|
||||
case 'n' : // New poll
|
||||
case 'e' : // Edit poll
|
||||
if (!$LOGIN_USER)
|
||||
{
|
||||
header("Location:$PHP_SELF?r$poll");
|
||||
break;
|
||||
}
|
||||
|
||||
if ($poll)
|
||||
{
|
||||
html_header("Poll #$poll");
|
||||
|
||||
print("<h1>Poll #$poll</h1>\n");
|
||||
|
||||
$result = db_query("SELECT * FROM poll WHERE id = $poll");
|
||||
$row = db_next($result);
|
||||
|
||||
$question = htmlspecialchars($row['question']);
|
||||
$poll_type = $row['poll_type'];
|
||||
|
||||
for ($i = 0; $i < 10; $i ++)
|
||||
{
|
||||
if ($row["answer$i"])
|
||||
$answer[$i] = htmlspecialchars($row["answer$i"], ENT_QUOTES);
|
||||
else
|
||||
$answer[$i] = "";
|
||||
}
|
||||
|
||||
$is_published = $row['is_published'];
|
||||
|
||||
db_free($result);
|
||||
}
|
||||
else
|
||||
{
|
||||
html_header("New Poll");
|
||||
|
||||
print("<h1>New Poll</h1>\n");
|
||||
|
||||
$question = "";
|
||||
$poll_type = $POLL_TYPE_PICKONE;
|
||||
$answer[0] = "";
|
||||
$answer[1] = "";
|
||||
$answer[2] = "";
|
||||
$answer[3] = "";
|
||||
$answer[4] = "";
|
||||
$answer[5] = "";
|
||||
$answer[6] = "";
|
||||
$answer[7] = "";
|
||||
$answer[8] = "";
|
||||
$answer[9] = "";
|
||||
$is_published = 0;
|
||||
}
|
||||
|
||||
print("<form method='POST' action='$PHP_SELF?u$poll'>\n");
|
||||
print("<center><table>\n"
|
||||
."<tr><th align='right' valign='top'>Question:</th><td>"
|
||||
."<textarea name='QUESTION' wrap='virtual' cols='40' rows='4'>"
|
||||
."$question</textarea></td></tr>\n");
|
||||
|
||||
print("<tr><th align='right'>Type:</th><td>"
|
||||
."<select name='POLLTYPE'>");
|
||||
|
||||
print("<option value='$POLL_TYPE_PICKONE'");
|
||||
if ($poll_type == $POLL_TYPE_PICKONE)
|
||||
print(" selected");
|
||||
print(">Pick One</option>");
|
||||
|
||||
print("<option value='$POLL_TYPE_PICKMANY'");
|
||||
if ($poll_type == $POLL_TYPE_PICKMANY)
|
||||
print(" selected");
|
||||
print(">Pick Many</option>");
|
||||
|
||||
print("</select></td></tr>\n");
|
||||
|
||||
print("<tr><th align='right'>Published:</th><td>");
|
||||
select_is_published($is_published);
|
||||
print("</td></tr>\n");
|
||||
|
||||
for ($i = 0; $i < 10; $i ++)
|
||||
{
|
||||
$number = $i + 1;
|
||||
|
||||
print("<tr><TH ALIGN='RIGHT'>Answer #$number</th><td>"
|
||||
."<INPUT NAME='ANSWER$i' SIZE='45' MAXLENGTH='255' "
|
||||
."VALUE='$answer[$i]'></td></tr>\n");
|
||||
}
|
||||
|
||||
if ($poll)
|
||||
print("<tr><th></th><td><input type='SUBMIT' VALUE='Update Poll'></td></tr>\n");
|
||||
else
|
||||
print("<tr><th></th><td><input type='SUBMIT' VALUE='Create Poll'></td></tr>\n");
|
||||
|
||||
print("</table></center>\n");
|
||||
print("</form>\n");
|
||||
|
||||
html_footer();
|
||||
break;
|
||||
|
||||
case 'u' : // Update poll
|
||||
header("Location:$PHP_SELF?l");
|
||||
|
||||
if ($LOGIN_LEVEL < AUTH_DEVEL)
|
||||
break;
|
||||
|
||||
$is_published = (int)$_POST["IS_PUBLISHED"];
|
||||
$question = db_escape($_POST["QUESTION"]);
|
||||
$poll_type = (int)$_POST["POLLTYPE"];
|
||||
$answer0 = db_escape($_POST["ANSWER0"]);
|
||||
$answer1 = db_escape($_POST["ANSWER1"]);
|
||||
$answer2 = db_escape($_POST["ANSWER2"]);
|
||||
$answer3 = db_escape($_POST["ANSWER3"]);
|
||||
$answer4 = db_escape($_POST["ANSWER4"]);
|
||||
$answer5 = db_escape($_POST["ANSWER5"]);
|
||||
$answer6 = db_escape($_POST["ANSWER6"]);
|
||||
$answer7 = db_escape($_POST["ANSWER7"]);
|
||||
$answer8 = db_escape($_POST["ANSWER8"]);
|
||||
$answer9 = db_escape($_POST["ANSWER9"]);
|
||||
$date = time();
|
||||
|
||||
if ($poll)
|
||||
{
|
||||
// Update an existing poll...
|
||||
db_query("UPDATE poll SET "
|
||||
."question='$question',"
|
||||
."is_published=$is_published,"
|
||||
."poll_type=$poll_type,"
|
||||
."answer0='$answer0',"
|
||||
."answer1='$answer1',"
|
||||
."answer2='$answer2',"
|
||||
."answer3='$answer3',"
|
||||
."answer4='$answer4',"
|
||||
."answer5='$answer5',"
|
||||
."answer6='$answer6',"
|
||||
."answer7='$answer7',"
|
||||
."answer8='$answer8',"
|
||||
."answer9='$answer9',"
|
||||
."modify_date=$date,"
|
||||
."modify_user='$LOGIN_USER' "
|
||||
."WHERE id = $poll");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create a new poll...
|
||||
db_query("INSERT INTO poll VALUES(NULL,"
|
||||
."$is_published,"
|
||||
."$poll_type,"
|
||||
."'$question',"
|
||||
."'$answer0',0,"
|
||||
."'$answer1',0,"
|
||||
."'$answer2',0,"
|
||||
."'$answer3',0,"
|
||||
."'$answer4',0,"
|
||||
."'$answer5',0,"
|
||||
."'$answer6',0,"
|
||||
."'$answer7',0,"
|
||||
."'$answer8',0,"
|
||||
."'$answer9',0,"
|
||||
."0,"
|
||||
."$date,'$LOGIN_USER',"
|
||||
."$date,'$LOGIN_USER')");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
db_close();
|
||||
|
||||
//
|
||||
// End of "$Id: poll.php,v 1.1 2004/05/20 03:38:42 mike Exp $".
|
||||
//
|
||||
?>
|
Loading…
Reference in New Issue
Block a user