"; return $j; } } $error = "dbtable_get_field_index: Invalid fieldname \"$fieldname\"."; return -1; } // Create a table for editing a database table entry // $tablear - array that defines table (see tables.php) // $valuesar - array of current values // $action - URL to post form to (or "" for display-only) // $actionlabel - Value to put on submit form ("Save", etc.) // $hidden - array of hidden form variables (name1,value1,name2,value2,...) function dbtable_to_html ( $tablear, $valuesar, $action="", $formname="", $actionlabel="", $hidden="" ) { global $CELLBG; $ret = "" . "
" . "" . "
" . "\n"; if ( ! is_array ( $tablear ) ) { return "Error: dbtable_to_html parameter 1 is not an array!\n
\n"; } if ( $action != "" ) { $ret .= ""; } } } for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( ! empty ( $tablear[$i]["hide"] ) ) continue; if ( ! empty ( $action ) && ! empty ( $tablear[$i]["calculated"] ) ) continue; $ret .= "\n"; } else { $ret .= " "; } $ret .= "\n"; $ret .= "
"; if ( ! empty ( $tablear[$i]["prompt"] ) ) { $ret .= ""; if ( empty ( $tablear[$i]["noneditable"] ) && ! empty ( $action ) ) { if ( $tablear[$i]["type"] == "text" || $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "float" ) { $ret .= "
" . "
\n
\n
\n"; return $ret; } // Print rows of a table into an HTML table. The first column will // include (optionally) href links to a page which can show further // details. // $tablear - db table (defined in tables.php) // $tablename - db table name // $href - URL (%0 will be replaced with field field 0) // $fields - list of fields to include in table. // $keys - array of db key fields (field tagged with "iskey" => 1) // $order - SQL order text function dbtable_html_list ( $tablear, $tablename, $href, $fields, $keys, $order ) { global $THBG, $THFG, $CELLBG; if ( ! is_array ( $tablear ) ) return "Error: dbtable_to_html_list parameter 1 is not an array!\n
\n"; if ( ! is_array ( $fields ) ) return "Error: dbtable_to_html_list parameter 2 is not an array!\n
\n"; if ( ! is_array ( $keys ) ) return "Error: dbtable_to_html_list parameter 3 is not an array!\n
\n"; $ret = "" . "
" . "" . "
" . "\n"; // header $ret .= ""; for ( $i = 0; $i < count ( $fields ); $i++ ) { $ind = dbtable_get_field_index ( $tablear, $fields[$i] ); /* if ( $ind < 0 ) echo "Error: dbtable_html_list invalid fieldname \"$fields[$i]\" $i\n"; exit; */ if ( empty ( $tablear[$ind]["hide"] ) ) $ret .= ""; } $ret .= "\n"; $sql = "SELECT " . $fields[0]; for ( $i = 1; $i < count ( $fields ); $i++ ) { $sql .= ", " . $fields[$i]; } $sql .= " FROM " . $tablename . " "; if ( is_array ( $keys ) && count ( $keys ) > 0 ) { $sql .= "WHERE "; $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( ! empty ( $tablear[$i]["iskey"] ) ) { if ( empty ( $keys[$tablear[$i]["name"]] ) ) { //echo "Error: key value for " . $tablear[$i]["name"] . " not set.\n"; //exit; } else { if ( $first ) $first = 0; else $sql .= " AND "; $sql .= $tablear[$i]["name"] . " = " ; if ( $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "float" || $tablear[$i]["type"] == "date" ) $sql .= $keys[$tablear[$i]["name"]]; else $sql .= "'" . $keys[$tablear[$i]["name"]] . "'"; } } } } if ( ! empty ( $order ) ) $sql .= " ORDER BY " . $order; //echo "SQL: $sql

\n"; $res = dbi_query ( $sql ); if ( $res ) { while ( $row = dbi_fetch_row ( $res ) ) { $ret .= "

"; $first_href = 1; $first = 1; for ( $i = 0; $i < count ( $fields ); $i++ ) { // check data type (date) $ind = dbtable_get_field_index ( $tablear, $fields[$i] ); if ( empty ( $tablear[$ind]["hide"] ) ) { $ret .= ""; } } $ret .= "\n"; } } else { echo translate("Database error") . ": " . dbi_error (); exit; } $ret .= "
" . "" . $tablear[$ind]["prompt"] . "
"; if ( $tablear[$ind]["type"] == "date" ) $val = date_to_str ( $row[$i], "", 1, 1 ); else if ( $tablear[$ind]["type"] == "dbdate" ) { $y = substr ( $row[$i], 0, 4 ); $m = substr ( $row[$i], 5, 2 ); $d = substr ( $row[$i], 8, 2 ); $date = sprintf ( "%04d%02d%02d", $y, $m, $d ); $val = date_to_str ( $date, "", 1, 1 ); } else $val = htmlentities ( $row[$i] ); if ( $first_href && ! empty ( $href ) ) { $first_href = 0; $url = $href; for ( $j = count ( $fields ) - 1; $j >= 0; $j-- ) { $url = str_replace ( "%$j", $row[$j], $url ); } $ret .= "" . $val . ""; } else { $ret .= $val; } $ret .= "
\n
\n
\n"; return $ret; } // Load a single row of a db table // $tablear - db table (defined in tables.php) // $tablename - db table name // $keys - array of db key fields (field tagged with "iskey" => 1) function dbtable_load ( $tablear, $tablename, $keys ) { $ret = false; $sql = "SELECT "; if ( ! is_array ( $tablear ) ) { echo "Error: dbtable_load parameter 1 is not an array!\n
\n"; exit; } if ( ! is_array ( $keys ) ) { echo "Error: dbtable_load parameter 3 is not an array!\n
\n"; exit; } $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( $first ) $first = 0; else $sql .= ", "; if ( empty ( $tablear[$i]["name"] ) ) { echo "Error: dbtable_load $tablename field $i does not define name.\n"; exit; } $sql .= $tablear[$i]["name"]; } $sql .= " FROM " . $tablename . " WHERE "; $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( ! empty ( $tablear[$i]["iskey"] ) ) { if ( empty ( $keys[$tablear[$i]["name"]] ) ) { //echo "Error: key value for " . $tablear[$i]["name"] . " not set.\n"; //exit; } else { if ( $first ) $first = 0; else $sql .= " AND "; $sql .= $tablear[$i]["name"] . " = " ; if ( $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "float" || $tablear[$i]["type"] == "date" ) $sql .= $keys[$tablear[$i]["name"]]; else $sql .= "'" . $keys[$tablear[$i]["name"]] . "'"; } } } //echo "SQL: $sql

\n"; $res = dbi_query ( $sql ); if ( $res ) { if ( $row = dbi_fetch_row ( $res ) ) { $ret = array (); for ( $i = 0; $i < count ( $tablear ); $i++ ) { $ret[$i] = $row[$i]; } } else { $ret = false; // not found } dbi_free_result ( $res ); } else { echo translate("Database error") . ": " . dbi_error (); exit; } return $ret; } // Delete a single row of a db table // $tablear - db table (defined in tables.php) // $tablename - db table name // $keys - array of db key fields (field tagged with "iskey" => 1) function dbtable_delete ( $tablear, $tablename, $keys ) { $ret = false; if ( ! is_array ( $tablear ) ) { echo "Error: dbtable_delete parameter 1 is not an array!\n
\n"; exit; } if ( ! is_array ( $keys ) ) { echo "Error: dbtable_delete parameter 3 is not an array!\n
\n"; exit; } $sql = "DELETE FROM $tablename WHERE "; $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( ! empty ( $tablear[$i]["iskey"] ) ) { if ( empty ( $keys[$tablear[$i]["name"]] ) ) { //echo "Error: key value for " . $tablear[$i]["name"] . " not set.\n"; //exit; continue; } else { if ( $first ) $first = 0; else $sql .= " AND "; $sql .= $tablear[$i]["name"] . " = " ; if ( $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "float" || $tablear[$i]["type"] == "date" ) $sql .= $keys[$tablear[$i]["name"]]; else $sql .= "'" . $keys[$tablear[$i]["name"]] . "'"; } } } //echo "SQL: $sql

\n"; if ( ! dbi_query ( $sql ) ) { echo translate("Database error") . ": " . dbi_error (); exit; } return $ret; } // Add a row into a table (SQL insert) // $tablear - db table (defined in tables.php) // $tablename - db table name // $valuesar - array of values function dbtable_add ( $tablear, $tablename, $valuesar ) { global $error; $ret = false; $sql = "INSERT INTO " . $tablename . " ("; if ( ! is_array ( $tablear ) ) { echo "Error: dbtable_add parameter 1 is not an array!\n
\n"; exit; } if ( ! is_array ( $valuesar ) ) { echo "Error: dbtable_add parameter 3 is not an array!\n
\n"; exit; } $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( $first ) $first = 0; else $sql .= ", "; if ( empty ( $tablear[$i]["name"] ) ) { echo "Error: dbtable_load $tablename field $i does not define name.\n"; exit; } $sql .= $tablear[$i]["name"]; } $sql .= " ) VALUES ("; $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( $first ) $first = 0; else $sql .= ", "; if ( empty ( $valuesar[$i] ) ) $sql .= "NULL"; else if ( $tablear[$i]["type"] == "date" || $tablear[$i]["type"] == "int" ) $sql .= $valuesar[$i]; else $sql .= "'" . $valuesar[$i] . "'"; } $sql .= " )"; //echo "SQL: $sql

\n"; if ( ! dbi_query ( $sql ) ) { // Shouldn't happen... complain if it does. $error = translate("Database error") . ": " . dbi_error (); return false; } return true; } // Update a row in a table (SQL update) // $tablear - db table (defined in tables.php) // $tablename - db table name // $valuesar - array of values function dbtable_update ( $tablear, $tablename, $valuesar ) { global $error; $sql = "UPDATE " . $tablename . " SET"; if ( ! is_array ( $tablear ) ) { echo "Error: dbtable_update parameter 1 is not an array!\n
\n"; exit; } if ( ! is_array ( $valuesar ) ) { echo "Error: dbtable_update parameter 3 is not an array!\n
\n"; exit; } $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( ! empty ( $tablear[$i]["iskey"] ) ) continue; if ( $first ) $first = 0; else $sql .= ", "; if ( empty ( $tablear[$i]["name"] ) ) { echo "Error: dbtable_update $tablename field $i does not define name.\n"; exit; } $sql .= " " . $tablear[$i]["name"] . " = "; if ( empty ( $valuesar[$i] ) ) { $sql .= "NULL"; } else if ( $tablear[$i]["type"] == "int" || $tablear[$i]["type"] == "date" ) { $sql .= $valuesar[$i]; } else $sql .= "'" . $valuesar[$i] . "'"; } $sql .= " WHERE"; $first = 1; for ( $i = 0; $i < count ( $tablear ); $i++ ) { if ( empty ( $tablear[$i]["iskey"] ) ) continue; if ( $first ) $first = 0; else $sql .= " AND"; if ( empty ( $valuesar[$i] ) ) { echo "Error: you must set field $i (" . $tablear[$i]["name"] . ") by hand. Cannot be empty."; exit; } $sql .= " " . $tablear[$i]["name"] . " = '" . $valuesar[$i] . "'"; } //echo "SQL: $sql

\n"; if ( ! dbi_query ( $sql ) ) { // Shouldn't happen... complain if it does. $error = translate("Database error") . ": " . dbi_error (); return false; } return true; } // Generate a new ID function dbtable_genid ( $tablename, $field ) { $ret = 1; $sql = "SELECT MAX(" . $field . ") FROM " . $tablename; $res = dbi_query ( $sql ); if ( $res ) { if ( $row = dbi_fetch_row ( $res ) ) { $ret = $row[0] + 1; } dbi_free_result ( $res ); } return $ret; } // Convert an array of db values (with index values 0,1,2,... into // an associative array (with index values of table column names). // $tablear - db table (defined in tables.php) // $valuesar - array of values function dbtable_build_name_index ( $tablear, $valuesar ) { $ret = array (); for ( $i = 0; $i < count ( $tablear ); $i++ ) { $ret[$tablear[$i]["name"]] = $valuesar[$i]; } return $ret; } ?>