/**
 * kreas novan datumbaztabelon.
 *
 * @param string $tabelnomo
 * @param array $kamporeguloj  array() el array(), pri kies
 *        formato vidu ĉe {@link donu_kampo_sql()}.
 * @param array $sxlosiloj  listo de ŝlosiloj/indeksoj. De la formo
 *           nomo => detaloj,
 *          kie 'nomo =>' povas esti forlasita (por lasi la sistemon
 *                                           mem krei la nomon).
 *          La nomo 'primary' indikas la ĉefan ŝlosilon.
 *          Se tiu ne estas donita, ni kreas la ĉefan ŝlosilon el "(`ID`)".
 *
 *          detaloj povas esti ĉeno (nomo de kolumno)
 *          aŭ array de tiaj nomoj. En la lasta kazo, se
 *               detaloj[0] == 'index', ĝi estos forprenita
 *          kaj indikas, ke ni havas ne-unikan indekson.
 * @param string $komento
 * @param string $tipo se donita, alia ol la defauxlta tabeltipo 
 *       (ekzemple MEMORY por nur-memoraj tabeloj).
 */
function kreu_tabelon($tabelnomo, $kampoj, $sxlosiloj = null, $komento = "", $tipo = null)
{
    $sql = "CREATE TABLE IF NOT EXISTS `" . traduku_tabelnomon($tabelnomo) . "` (\n  ";
    $sqlkampoj = array();
    foreach ($kampoj as $kampopriskribo) {
        $sqlkampoj[] = donu_kampo_sql($kampopriskribo, $tabelnomo);
    }
    $primary = "ID";
    if (!$sxlosiloj) {
        $sxlosiloj = array();
    }
    foreach ($sxlosiloj as $nomo => $valoro) {
        debug_echo("<!-- nomo: " . $nomo . ", valoro: " . var_export($valoro, true) . " -->");
        if ('primary' === $nomo) {
            debug_echo("<!-- primary! -->");
            if (is_array($valoro)) {
                $primary = implode('`, `', $valoro);
            } else {
                $primary = $valoro;
            }
        } else {
            $unique = true;
            if (is_array($valoro)) {
                if ($valoro[0] == 'index') {
                    $unique = false;
                    array_shift($valoro);
                }
                $valoro = implode('`, `', $valoro);
            }
            debug_echo("<!-- valoro: " . var_export($valoro, true) . " -->");
            $sxlosilfrazo = ($unique ? "UNIQUE KEY " : "KEY ") . (is_int($nomo) ? '' : "`{$nomo}` ") . "(`" . $valoro . "`)";
            $sqlkampoj[] = $sxlosilfrazo;
        }
    }
    debug_echo("<!-- sqlkampoj: " . var_export($sqlkampoj, true) . "-->");
    $sqlkampoj[] = "PRIMARY KEY (`{$primary}`)";
    $sql .= implode(",\n  ", $sqlkampoj);
    $sql .= "\n) ";
    if (CHARSET_DB_SUPPORT) {
        $sql .= "DEFAULT CHARSET=utf8 COLLATE=utf8_esperanto_ci ";
    }
    if ($tipo) {
        $sql .= "\n   TYPE='" . $tipo . "'";
    }
    if ($komento) {
        $sql .= "\n   COMMENT='" . addslashes($komento) . "'";
    }
    $sql .= ";\n";
    // TODO
    faru_SQL($sql);
}
<pre>
<?

switch($_REQUEST['sendu']) {
case 'uzanto':
  faru_SQL(datumbazaldono("entajpantoj",
			  array("nomo" => $_POST['nomo'],
				"kodvorto" => $_POST['kodvorto'],
				"vidi" => "J",
				"administri" => "J",
				"teknikumi" => "J")));
  break;
case 'renkontigxo':
  faru_SQL(datumbazaldono("renkontigxo",
			  array('nomo' => $_POST['nomo'],
				'mallongigo' => $_POST['mallongigo'],
				'kotizosistemo' => 1,
				)));
  break;
}

?></pre>

<form id="uzanto" method="POST" action="uzanto_renkontigxo.php">
<h2>Uzanto</h2>
<p>Kreas unuan uzanton. (Pliajn poste eblas krei ene de la
			programo per "grava administrado".)</p>
<table>
<?php 
tabelentajpejo("uzantnomo", "nomo", "", 20, "Salutnomo de la uzanto");
tabelentajpejo("pasvorto", "kodvorto", "", 20, "Pasvorto por ensaluti", "", "", "j");
 /**
  * eldonas la restantajn liniojn, kiuj ankoraŭ
  * estas en la memoro.
  * 
  * Faras nenion, se tiaj ne estas.
  */
 function faru()
 {
     if (count($this->kolektitajxoj)) {
         $sql = $this->komenca_sql . implode($this->interliniajxo, $this->kolektitajxoj) . " ;\n";
         faru_SQL($sql);
         $this->reset();
     }
 }